Tous les produits
Search
Centre de documentation

Resource Access Management:Best practices for accessing Alibaba Cloud OpenAPI

Dernière mise à jour :Oct 09, 2026

La divulgation d'identifiants d'accès peut compromettre vos ressources cloud et vos activités commerciales. Sécurisez vos identifiants en choisissant la méthode d'authentification adaptée à chaque scénario de déploiement.

Qu'est-ce qu'un identifiant d'accès ?

Un identifiant d'accès permet de vérifier votre identité lorsque vous utilisez des outils de développement (API, CLI, SDK ou Terraform) pour accéder à Alibaba Cloud.

  • Paire AccessKey : composée d'un AccessKey ID et d'un AccessKey Secret. Il s'agit d'un identifiant permanent pour les comptes Alibaba Cloud et les utilisateurs RAM. Créer une paire AccessKey.

  • Jeton STS : un jeton Security Token Service (STS) est un identifiant temporaire délivré à un rôle RAM, avec une période de validité et une étendue d'autorisations personnalisées. Qu'est-ce que STS ?.

Causes courantes de fuite d'identifiants

  • Les paires AccessKey codées en dur dans le code applicatif sont exposées à toute personne disposant d'un accès en lecture au dépôt et deviennent publiques si le code est poussé vers des communautés open source ou des services d'hébergement de code.

  • Les paires AccessKey intégrées dans le code côté client peuvent être extraites par décompilation de l'application.

  • La documentation technique ou les supports partagés contiennent des informations sur les paires AccessKey.

  • Les exemples de code figurant dans la documentation produit contiennent des informations sur les paires AccessKey.

  • Les réponses API qui manquent de contrôles d'autorisation appropriés renvoient des informations d'identification d'accès.

Méthodes sécurisées pour utiliser les identifiants d'accès

Réduisez au minimum la durée d'exposition et l'étendue des identifiants. Choisissez une méthode sécurisée en fonction de votre scénario de déploiement.

Méthode

Scénario

Utiliser les rôles RAM pour les comptes de service (RRSA)

Applications déployées dans un cluster ACK. RRSA isole les autorisations au niveau du rôle RAM afin que chaque application assume un rôle unique.

Utiliser un rôle RAM d'instance

Applications déployées sur une instance ECS. L'instance assume un rôle RAM pour accéder à l'OpenAPI d'Alibaba Cloud.

Utiliser un jeton STS pour le développement et le débogage

Personnel de développement, d'exploitation et de produit ayant besoin d'identifiants pour l'O&M, la gestion ou le débogage. Utilisez le SSO basé sur les rôles pour assumer un rôle RAM et obtenir un jeton STS.

Utiliser un jeton STS dans Function Compute

Applications déployées dans Function Compute (FC) nécessitant un accès à d'autres ressources cloud. Associez la fonction FC à un rôle RAM pour utiliser un jeton STS au lieu d'identifiants permanents.

Configurer des variables d'environnement système

Scénarios où les solutions précédentes ne s'appliquent pas. Stockez les identifiants dans des variables d'environnement système.

Utiliser les rôles RAM pour les comptes de service (RRSA)

Prérequis

  • Cette méthode s'applique aux services cloud compatibles avec RAM.

  • Version du cluster : Kubernetes 1.22 ou ultérieure, sur un cluster géré ACK (Basic ou Pro), un cluster ACK Serverless (Basic ou Pro) ou un cluster ACK Edge (Pro uniquement).

  • Le SDK Alibaba Cloud V2.0 est utilisé.

  • Les SDK personnalisés pour les produits de passerelle auto-gérés ne peuvent pas être utilisés.

Fonctionnement

3

Fonctionnement de RRSA

Sans RRSA, tout pod sur un nœud peut lire les identifiants du rôle d'instance ECS via les métadonnées d'instance et hériter de toutes les autorisations accordées à ce rôle. Pour restreindre les autorisations RAM par application, empêchez les applications de récupérer les identifiants temporaires du rôle d'instance via les métadonnées d'instance ECS ou ECI, ou n'attachez aucune politique d'autorisation RAM au rôle d'instance.

RRSA résout ce problème en liant un rôle RAM à un compte de service Kubernetes. Au démarrage d'un pod, celui-ci reçoit un jeton OIDC limité à son compte de service, appelle l'API AssumeRoleWithOIDC et reçoit un jeton STS limité au rôle pour accéder aux API cloud.

Le flux d'authentification :

  1. Injection de jeton : Lorsqu'un pod démarre, ACK utilise la projection de volume de jeton de compte de service pour monter un fichier de jeton OIDC limité au compte de service du pod.

  2. Assumption de rôle : L'application appelle l'API AssumeRoleWithOIDC en utilisant ce jeton OIDC.

  3. Réception des identifiants STS : STS valide le jeton OIDC auprès du fournisseur OIDC enregistré et renvoie des identifiants limités au rôle RAM.

  4. Accès aux ressources : Le pod utilise les identifiants STS à courte durée de vie pour accéder aux API Alibaba Cloud autorisées.

Les jetons OIDC ont une durée de vie courte. Lisez le jeton depuis le fichier à chaque demande d'authentification — ne le mettez pas en cache. ACK renouvelle automatiquement les jetons avant leur expiration.

Lorsque RRSA est activé, ACK effectue automatiquement les opérations suivantes :

  • Crée un émetteur OIDC dédié pour le cluster.

  • Met à jour la configuration service-account-issuer du cluster, en fusionnant le nouvel émetteur OIDC avec la valeur existante.

  • Crée un fournisseur d'identité (IdP) OIDC dans votre compte, nommé ack-rrsa-<cluster_id>, configuré pour le single sign-on (SSO) avec l'émetteur OIDC du cluster.

Procédure

Exemples de code

Alibaba Cloud SDK V2.0 prend en charge l'authentification par jeton OIDC RRSA. Tout SDK de service cloud construit sur V2.0 et prenant en charge les jetons STS prend également en charge RRSA.

Langage

Version

Démo

Go

Alibaba Cloud Credentials for Go 1.2.6 ou ultérieure. Pour plus d'instructions, consultez Méthode 6 : Utiliser OIDCRoleArn.

Démo Go SDK

Java

Alibaba Cloud Credentials for Java 0.2.10 ou ultérieure. Pour plus d'instructions, consultez Méthode 6 : ARN de rôle OIDC.

Démo Java SDK

Python 3

Alibaba Cloud Credentials for Python 0.3.1 ou ultérieure. Pour plus d'instructions, consultez Gérer les identifiants d'accès.

Démo Python SDK

Node.js / TypeScript

Alibaba Cloud Credentials for TypeScript/Node.js 2.2.6 ou ultérieure. Pour plus d'instructions, consultez Méthode 6 : Utiliser OIDCRoleArn.

Démo Node.js SDK

Utiliser un rôle RAM d'instance

Prérequis

  • Cette méthode s'applique aux services cloud compatibles avec RAM.

  • Le SDK Alibaba Cloud V2.0 est utilisé.

  • Les SDK personnalisés pour les produits de passerelle auto-gérés ne peuvent pas être utilisés.

Fonctionnement

Vous pouvez attacher un rôle Resource Access Management (RAM) d'instance à une instance Elastic Compute Service (ECS). L'instance ECS peut alors utiliser l'identifiant temporaire Security Token Service (STS) du rôle RAM d'instance pour accéder aux API d'autres services Alibaba Cloud. L'identifiant temporaire STS est mis à jour périodiquement. Cela garantit la sécurité de votre paire AccessKey et met en œuvre un contrôle d'accès et une gestion des autorisations granulaires via RAM.

1

Flux de travail :

  1. L'application récupère un jeton STS en accédant aux métadonnées d'instance ECS.

  2. L'application utilise le jeton STS pour accéder aux ressources cloud. Qu'est-ce que STS ?.

Procédure

Attribuez un rôle RAM à une instance ECS. Rôles RAM d'instance.

Exemples de code

Alibaba Cloud Credentials simplifie l'utilisation des rôles RAM d'instance. Ces exemples appellent l'opération DescribeRegions d'ECS avec un rôle RAM d'instance.

Langage de programmation

Exemple de code

Go

Exemple de code Go

Java

Exemple de code Java

Python

Exemple de code Python

PHP

Exemple de code PHP

Node.js

Exemple de code Node.js

.NET

Exemple de code .NET

Assumption de rôle en chaîne inter-comptes

Si votre application sur une instance ECS doit accéder à des ressources dans un autre compte Alibaba Cloud, vous pouvez utiliser l'assumption de rôle en chaîne inter-comptes pour obtenir un accès sans stocker de paire AccessKey.

Fonctionnement

L'instance ECS obtient d'abord des identifiants temporaires pour son propre rôle RAM d'instance à partir des métadonnées d'instance. Elle utilise ensuite ces identifiants pour appeler sts:AssumeRole afin d'assumer un rôle RAM dans le compte de destination et d'obtenir un jeton STS pour ce compte. Ce processus est appelé assumption de rôle en chaîne.

Procédure

  1. Dans le compte de destination, créez un rôle RAM. Définissez Principal.RAM dans la politique de confiance du rôle sur le nom de ressource Alibaba Cloud (ARN) du rôle RAM d'instance dans le compte source, par exemple acs:ram::<source-account-id>:role/<instance-role-name>. Accordez à ce rôle les autorisations nécessaires à l'application.

  2. Sur le rôle RAM d'instance dans le compte source, attachez une politique d'autorisation accordant l'autorisation sts:AssumeRole . Vous pouvez utiliser la politique système AliyunSTSAssumeRoleAccess.

  3. Sur l'instance ECS, utilisez l'outil Alibaba Cloud Credentials pour effectuer l'assumption de rôle en chaîne. L'outil obtient d'abord les identifiants temporaires du rôle RAM d'instance à partir des métadonnées d'instance. Il utilise ensuite ces identifiants pour appeler sts:AssumeRole afin d'assumer le rôle RAM dans le compte de destination et d'obtenir un jeton STS inter-comptes.

Jeton STS pour le développement et le débogage

Scénario

Pour le personnel de développement, d'exploitation et de produit ayant besoin d'identifiants pour l'O&M, la gestion ou le débogage, utilisez le SSO basé sur les rôles pour assumer un rôle RAM et obtenir un jeton STS au lieu d'une paire AccessKey permanente.

Procédure

Utiliser un jeton STS dans Function Compute

Scénario

Au lieu de coder en dur la paire AccessKey d'un utilisateur RAM dans une fonction FC, associez la fonction à un rôle RAM. L'application utilise alors un jeton STS pour accéder aux ressources cloud, évitant ainsi la fuite d'identifiants permanents.

Architecture de la solution

Les rôles de fonction FC gèrent les identifiants temporaires au moment de l'exécution, évitant l'exposition à long terme des paires AccessKey. Configurez le rôle et les autorisations une seule fois ; les fonctions obtiennent automatiquement des identifiants temporaires.

Un administrateur crée un rôle approuvé par Function Compute et lui accorde les autorisations requises (1), puis associe le rôle à la fonction FC (2). L'application récupère un jeton STS à partir du contexte de la fonction (3). Durant ce processus, Function Compute appelle AssumeRole pour obtenir le jeton STS auprès de RAM/STS (i). L'application utilise le jeton STS pour appeler l'API de la ressource cloud cible (4), et l'API de la ressource renvoie le résultat à l'application cliente.

image

Procédure

Accorder à Function Compute des autorisations pour accéder à d'autres services Alibaba Cloud.

Configurer des variables d'environnement système

Procédure

Configurez les variables d'environnement ALIBABA_CLOUD_ACCESS_KEY_ID et ALIBABA_CLOUD_ACCESS_KEY_SECRET.

<ACCESS_KEY_ID>

Exemples de code du SDK Alibaba Cloud

Les SDK Alibaba Cloud créent un identifiant par défaut à partir des variables d'environnement ALIBABA_CLOUD_ACCESS_KEY_ID et ALIBABA_CLOUD_ACCESS_KEY_SECRET et l'utilisent pour authentifier automatiquement les requêtes. Ces exemples appellent l'opération DescribeRegions d'ECS.

Langage de programmation

Exemple de code

Go

Exemple de code Go

Java

Exemple de code Java

Python

Exemple de code Python

PHP

Exemple de code PHP

Node.js

Exemple de code Node.js

.NET

Exemple de code .NET

Exemple de code générique

Si vous ne pouvez pas utiliser les SDK Alibaba Cloud (par exemple, des SDK personnalisés pour des produits de passerelle auto-gérés), chargez directement les variables d'environnement. Exemple en Java :

import com.aliyun.credentials.Client;
import com.aliyun.credentials.models.Config;

public class DemoTest {
    public static void main(String[] args) throws Exception{
        Config config = new Config();
        // Specify the type of credential you want to use.
        config.setType("access_key");
        // The AccessKeyId of your RAM user.
        config.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
        // The AccessKeySecret of your RAM user.
        config.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        Client client = new Client(config);
    }
}

Remédier aux fuites d'identifiants

Références

Bonnes pratiques connexes en matière de sécurité cloud :