Tous les produits
Search
Centre de documentation

Alibaba Cloud SDK:Gérer les identifiants d'accès

Dernière mise à jour :Aug 12, 2026

Lorsque vous appelez des opérations d'API pour gérer des ressources cloud via les SDK Alibaba Cloud, vous devez configurer des informations d'identification valides. Cette rubrique explique comment configurer un identifiant d'accès pour Alibaba Cloud SDK V1.0 for Go. Ces identifiants renforcent le contrôle d'accès lors du développement avec le SDK.

Informations générales

Lorsque vous utilisez les SDK Alibaba Cloud pour vos développements, configurez un type d'identifiant adapté à votre scénario métier et à vos exigences de contrôle des autorisations. Pour garantir la stabilité et la fiabilité de votre application, définissez correctement les variables d'environnement ou les fichiers de configuration afin que le SDK puisse lire et utiliser ces identifiants.

Prérequis

  • Go 1.10.x ou version ultérieure est installé.

  • La bibliothèque principale d'Alibaba Cloud SDK for Go est installée.

    go get -u github.com/aliyun/alibaba-cloud-sdk-go/sdk

Initialiser un client Credentials

Méthode 1 : Utiliser la chaîne de fournisseurs d'identifiants par défaut

Si aucune méthode d'initialisation n'est spécifiée pour le client SDK, la chaîne de fournisseurs d'identifiants par défaut s'applique automatiquement. Pour plus d'informations, consultez la section Chaîne de fournisseurs d'identifiants par défaut de cette rubrique.

package main

import (
    "github.com/aliyun/alibaba-cloud-sdk-go/sdk"
    "github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials/provider"
)

func main() {

    config := sdk.NewConfig()
    
    // No value is specified for this parameter.
    credential := credentials.NewDefaultCredentialsProvider()
    
    // <REGION_ID>: Specify the Alibaba Cloud region that the SDK client needs to access. Example: cn-hangzhou. 
    client, err := sdk.NewClientWithOptions("<REGION_ID>", config, credential)
    if err != nil {
	panic(err)
    }
    // The step of calling an API operation is omitted.
}

Méthode 2 : Utiliser une paire d'AccessKey

Vous pouvez créer une paire d'AccessKey pour les comptes Alibaba Cloud et les utilisateurs Resource Access Management (RAM) afin d'appeler des API. Cette paire d'AccessKey permet d'initialiser un client SDK.

Important

Une paire d'AccessKey associée à un compte Alibaba Cloud dispose d'un accès complet à toutes les ressources de ce compte. La fuite d'une telle paire représente une menace critique pour la sécurité de vos ressources. Nous vous recommandons d'utiliser la paire d'AccessKey d'un utilisateur RAM et de la renouveler régulièrement. Pour savoir comment créer une paire d'AccessKey pour un utilisateur RAM, consultez Créer une paire d'AccessKey.

package main

import (
    "os"

    "github.com/aliyun/alibaba-cloud-sdk-go/sdk"
    "github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials"
)

func main() {

    config := sdk.NewConfig()

    credential, err := credentials.NewStaticAKCredentialsProviderBuilder().
        // os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"): Obtain the AccessKey ID of the RAM user from an environment variable.
	WithAccessKeyId(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")).
        // os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"): Obtain the AccessKey secret of the RAM user from an environment variable.
	WithAccessKeySecret(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")).
	Build()
    if err != nil {
	panic(err)
    }
    
    // <REGION_ID>: Specify the Alibaba Cloud region that the SDK client needs to access. Example: cn-hangzhou. 
    client, err := sdk.NewClientWithOptions("<REGION_ID>", config, credential)
    if err != nil {
	panic(err)
    }
    
    // The step of calling an API operation is omitted.
}

Méthode 3 : Utiliser un token STS

Pour sécuriser vos activités, demandez des identifiants de sécurité temporaires (TSC) auprès du Security Token Service (STS) afin de créer un client temporaire.

package main

import (
    "os"

    "github.com/aliyun/alibaba-cloud-sdk-go/sdk"
    "github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials"
)

func main() {

    config := sdk.NewConfig()

    credential, err := credentials.NewStaticSTSCredentialsProviderBuilder().
        // os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"): Obtain the AccessKey ID of the RAM user from an environment variable.
	WithAccessKeyId(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")).
	// os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"): Obtain the AccessKey secret of the RAM user from an environment variable.
	WithAccessKeySecret(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")).
        // os.Getenv("ALIBABA_CLOUD_SECURITY_TOKEN"): Obtain the STS token from the environment variable.	
	WithSecurityToken(os.Getenv("ALIBABA_CLOUD_SECURITY_TOKEN")).
	Build()
    if err != nil {
	panic(err)
    }
    
    // <REGION_ID>: Specify the Alibaba Cloud region that the SDK client needs to access. Example: cn-hangzhou. 
    client, err := sdk.NewClientWithOptions("<REGION_ID>", config, credential)
    if err != nil {
	panic(err)
    }
    
    // The step of calling an API operation is omitted.
}

Méthode 4 : Utiliser une paire d'AccessKey et un rôle RAM

Spécifiez l'ARN (Alibaba Cloud Resource Name) d'un rôle RAM pour initialiser un client SDK. Avant d'envoyer des requêtes API, le client doit obtenir un token STS en appelant l'API STS. Pour restreindre les autorisations associées au token STS, configurez une politique personnalisée dans RAM.

package main

import (
    "os"

    "github.com/aliyun/alibaba-cloud-sdk-go/sdk"
    "github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials"
)

func main() {

    config := sdk.NewConfig()
    
    credential, err := credentials.NewRAMRoleARNCredentialsProviderBuilder().
        // os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"): Required. Obtain the AccessKey ID of the RAM user from the environment variable.
	WithAccessKeyId(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")).
	// os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"): Required. Obtain the AccessKey secret of the RAM user from the environment variable.
	WithAccessKeySecret(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")).
	// "<Role_Arn>" Required. The ARN of the RAM role. You can obtain the ARN of a RAM role in the RAM console. Example: acs:ram::123456789012****:role/adminrole.
	WithRoleArn("<Role_Arn>").
	// "<ROLE_SESSION_NAME>" Required. The name of the role session, which is used to distinguish different sessions. Example: alice. 
	WithRoleSessionName("<ROLE_SESSION_NAME>").
	// "<POLICY>": Specify a custom policy to limit the role session permissions. Example: {\"Statement\": [{\"Action\": [\"*\"],\"Effect\": \"Allow\",\"Resource\": [\"*\"]}],\"Version\":\"1\"}. 
	WithPolicy("<POLICY>").
	// "<EXTERNAL_ID>": Specify an external ID for the role, in case it is confused with the deputy. Example: abcd1234. 
	WithExternalId("<EXTERNAL_ID>").
	// <ROLE_SESSION_EXPIRATION>: the validity period of the token. Example: 3600. 
	WithDurationSeconds(3600).
	Build()
    if err != nil {
	panic(err)
    }
    
    // <REGION_ID>: Specify the Alibaba Cloud region that the SDK client needs to access. Example: cn-hangzhou.
    client, err := sdk.NewClientWithOptions("<REGION_ID>", config, credential)
    if err != nil {
	panic(err)
    }
    
    // The step of calling an API operation is omitted.
}

Méthode 5 : Utiliser le rôle RAM d'une instance ECS

Attachez un rôle RAM à une instance ECS ou à une instance de conteneur élastique. L'outil Credentials récupère automatiquement le rôle RAM associé à l'instance et utilise le serveur de métadonnées pour obtenir le token STS correspondant. Ce token sert ensuite à initialiser un client Credentials.

L'accès aux métadonnées de l'instance s'effectue en mode normal ou en mode renforcé. Par défaut, l'outil Credentials obtient les identifiants en mode renforcé via Instance Metadata Service Version 2 (IMDSv2). Si une exception survient dans ce mode, configurez le paramètre DisableIMDSv1 pour définir la logique de gestion des exceptions. Valeurs possibles pour DisableIMDSv1 :

  1. Si le paramètre est défini sur false (valeur par défaut), l'identifiant d'accès est obtenu en mode normal.

  2. true : L'exception est levée et l'outil Credentials continue d'obtenir l'identifiant d'accès en mode renforcé.

La prise en charge du mode renforcé (IMDSv2) dépend de la configuration du serveur de métadonnées.

Remarque
package main

import (
    "os"

    "github.com/aliyun/alibaba-cloud-sdk-go/sdk"
    "github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials"
)

func main() {
    
    config := sdk.NewConfig()
    
    // Use an STS token to initialize an SDK client. The STS token is obtained by using the RAM role attached to an ECS instance.
    // This method is suitable for the programs that run on ECS instances and need to access other Alibaba Cloud resources.
   credential, err := credentials.NewECSRAMRoleCredentialsProviderBuilder().
	// "<ROLE_NAME>": Specify the name of the RAM role that you want to use. You can specify a default value for the roleName parameter in the environment variable ALIBABA_CLOUD_ECS_METADATA. Example: alice. 
	WithRoleName(os.Getenv("ALIBABA_CLOUD_ECS_METADATA")).
	// A value of true specifies that the security hardening mode is forcibly used. The default value is false, which specifies that the system first tries to obtain the access credential in security hardening mode. If the access credential fails to be obtained, the normal mode is used. 
	//WithDisableIMDSv1(true).
	Build()
    if err != nil {
	panic(err)
    }
    
   // <REGION_ID>: Specify the Alibaba Cloud region that the SDK client needs to access. Example: cn-hangzhou. 
   client, err := sdk.NewClientWithOptions("<REGION_ID>", config, credential)
   if err != nil {
	panic(err)
   }
   
   // The step of calling an API operation is omitted.
}

Méthode 6 : Utiliser le rôle RAM d'un IdP OIDC

Après avoir attaché un rôle RAM à un nœud de travail dans un cluster Container Service for Kubernetes (ACK), les pods de ce nœud peuvent obtenir un token STS via le serveur de métadonnées. Toutefois, autoriser des applications non approuvées (dont le code n'est pas divulgué par le client, par exemple) à accéder aux tokens STS via ce service présente des risques de sécurité. Pour prévenir ces risques et appliquer le principe du moindre privilège (PoLP), nous recommandons d'utiliser la fonctionnalité RAM Roles for Service Account. Elle renforce la sécurité des ressources cloud tout en permettant aux applications non approuvées d'obtenir des tokens STS de manière sécurisée. Dans ce cas, le cluster ACK crée un fichier de token OpenID Connect (OIDC) de compte de service, l'associe au pod, puis injecte les variables d'environnement correspondantes. L'outil Credentials exploite ensuite ces variables pour appeler l'opération AssumeRoleWithOIDC de STS et récupérer le token STS du rôle RAM. Pour en savoir plus sur la fonctionnalité RRSA, consultez Utiliser RRSA pour autoriser différents pods à accéder à différents services cloud. Les variables d'environnement suivantes sont injectées dans le pod :

ALIBABA_CLOUD_ROLE_ARN : l'ARN du rôle RAM.

ALIBABA_CLOUD_OIDC_PROVIDER_ARN : l'ARN de l'IdP OIDC.

ALIBABA_CLOUD_OIDC_TOKEN_FILE : le chemin du fichier de token OIDC.

package main

import (
	"os"

	"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials"
)

func main() {

    config := sdk.NewConfig()

    // Use the RAM role of the OIDC identity provider (IdP) to initialize an SDK client.
    credential, err := credentials.NewOIDCCredentialsProviderBuilder().
	// Specify the ARN of the OIDC IdP by specifying the ALIBABA_CLOUD_OIDC_PROVIDER_ARN environment variable.
	WithOIDCProviderARN(os.Getenv("ALIBABA_CLOUD_OIDC_PROVIDER_ARN")).
	// Specify the path of the OIDC token file by specifying the ALIBABA_CLOUD_OIDC_TOKEN_FILE environment variable.
	WithOIDCTokenFilePath(os.Getenv("ALIBABA_CLOUD_OIDC_TOKEN_FILE")).
	// "<Role_Arn>" Required. The ARN of the RAM role. You can obtain the ARN of a RAM role in the RAM console. Example: acs:ram::123456789012****:role/adminrole.
	WithRoleArn("<Role_Arn>").
	// "<ROLE_SESSION_NAME>" Required. Specify a name for the role session. Example: alice. 
	WithRoleSessionName("<ROLE_SESSION_NAME>").
	// "<POLICY>": Optional. Grant limited permissions for the RAM role. Example: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}. 
	WithPolicy("<POLICY>").
	// <ROLE_SESSION_EXPIRATION>: Specify a validity period for the session. Example: 3600. 
	WithDurationSeconds(3600).
	Build()
     if err != nil {
	 panic(err)
    }   
    
    // <REGION_ID>: Specify the Alibaba Cloud region that the SDK client needs to access. Example: cn-hangzhou. 
    client, err := sdk.NewClientWithOptions("<REGION_ID>", config, credential)
    if err != nil {
	 panic(err)
    }
    
    // The step of calling an API operation is omitted.
}

Méthode 7 : Utiliser un bearer token

Seul Cloud Call Center permet d'utiliser un bearer token pour initialiser un client SDK.

package main

import (
    "github.com/aliyun/alibaba-cloud-sdk-go/sdk"
    "github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials"
)

func main() {

    config := sdk.NewConfig()

    // <BEARER_TOKEN> specifies a type of authentication method for API calls.
    credential := credentials.NewBearerTokenCredentialsProvider("<BEARER_TOKEN>")
    
    // <REGION_ID>: Specify the Alibaba Cloud region that the SDK client needs to access. Example: cn-hangzhou. 
    client, err := sdk.NewClientWithOptions("<REGION_ID>", config, credential)
    if err != nil {
	panic(err)
    }
    
    // The step of calling an API operation is omitted.
}

Chaîne de fournisseurs d'identifiants par défaut

Pour utiliser différents types d'identifiants selon les environnements de développement et de production, il faut généralement détecter l'environnement depuis le code et implémenter des branches conditionnelles pour récupérer l'identifiant approprié. La chaîne de fournisseurs d'identifiants par défaut de l'outil Credentials permet d'utiliser un code unique pour obtenir les identifiants adaptés à chaque environnement, grâce à une configuration externe à l'application. Si vous initialisez un client Credentials avec credentials.NewDefaultCredentialsProvider() sans préciser de méthode spécifique, l'outil recherche les informations d'identification dans l'ordre suivant :

1. Récupération des identifiants depuis les variables d'environnement

En l'absence d'identifiant trouvé à l'étape précédente, l'outil Credentials interroge les variables d'environnement.

  • Si les variables d'environnement système ALIBABA_CLOUD_ACCESS_KEY_ID (AccessKey ID) et ALIBABA_CLOUD_ACCESS_KEY_SECRET (AccessKey secret) sont définies, l'outil utilise la paire d'AccessKey correspondante comme identifiant par défaut.**

  • Si les variables d'environnement système ALIBABA_CLOUD_ACCESS_KEY_ID (AccessKey ID), ALIBABA_CLOUD_ACCESS_KEY_SECRET (AccessKey secret) et ALIBABA_CLOUD_SECURITY_TOKEN (token STS) sont définies, l'outil utilise le token STS spécifié comme identifiant par défaut.

2. Récupération des identifiants via le rôle RAM d'un IdP OIDC

Si aucun identifiant n'a été trouvé précédemment, l'outil Credentials vérifie les variables d'environnement suivantes :

ALIBABA_CLOUD_ROLE_ARN : l'ARN du rôle RAM.

ALIBABA_CLOUD_OIDC_PROVIDER_ARN : l'ARN de l'IdP OIDC.

ALIBABA_CLOUD_OIDC_TOKEN_FILE : le chemin du fichier de token OIDC.

Lorsque ces trois variables sont présentes, l'outil appelle l'opération AssumeRoleWithOIDC de STS pour obtenir un token STS utilisé comme identifiant par défaut.

3. Récupération des identifiants depuis le fichier config.json

Faute d'identifiant disponible, la chaîne de fournisseurs tente de charger le fichier d'identifiants partagés config.json depuis son emplacement par défaut et applique l'identifiant qu'il contient.

  • Linux/macOS : ~/.aliyun/config.json

  • Windows : C:\Users\USER_NAME\.aliyun\config.json

Pour configurer un identifiant de cette manière, utilisez Alibaba Cloud CLI ou créez manuellement un fichier config.json au chemin approprié. Le format du contenu est illustré ci-dessous :

{
  "current": "<PROFILE_NAME>",
  "profiles": [
    {
      "name": "<PROFILE_NAME>",
      "mode": "AK",
      "access_key_id": "<ALIBABA_CLOUD_ACCESS_KEY_ID>",
      "access_key_secret": "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>"
    },
    {
      "name": "<PROFILE_NAME1>",
      "mode": "StsToken",
      "access_key_id": "<ALIBABA_CLOUD_ACCESS_KEY_ID>",
      "access_key_secret": "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>",
      "sts_token": "<SECURITY_TOKEN>"
    },
    {
      "name":"<PROFILE_NAME2>",
      "mode":"RamRoleArn",
      "access_key_id":"<ALIBABA_CLOUD_ACCESS_KEY_ID>",
      "access_key_secret":"<ALIBABA_CLOUD_ACCESS_KEY_SECRET>",
      "ram_role_arn":"<ROLE_ARN>",
      "ram_session_name":"<ROLE_SESSION_NAME>",
      "expired_seconds":3600
    },
    {
      "name":"<PROFILE_NAME3>",
      "mode":"EcsRamRole",
      "ram_role_name":"<RAM_ROLE_ARN>"
    },
    {
      "name":"<PROFILE_NAME4>",
      "mode":"OIDC",
      "oidc_provider_arn":"<OIDC_PROVIDER_ARN>",
      "oidc_token_file":"<OIDC_TOKEN_FILE>",
      "ram_role_arn":"<ROLE_ARN>",
      "ram_session_name":"<ROLE_SESSION_NAME>",
      "expired_seconds":3600
    },
    {
      "name":"<PROFILE_NAME5>",
      "mode":"ChainableRamRoleArn",
      "source_profile":"<PROFILE_NAME>",
      "ram_role_arn":"<ROLE_ARN>",
      "ram_session_name":"<ROLE_SESSION_NAME>",
      "expired_seconds":3600
    }
  ]
}

Paramètre

Description

current

Spécifiez le nom de l'identifiant pour récupérer la configuration correspondante. Ce nom correspond à la valeur du paramètre name dans profiles. Par défaut, le système privilégie le nom défini par la variable d'environnement ALIBABA_CLOUD_PROFILE . En l'absence de cette variable, il utilise le nom indiqué dans current.

profiles

Contient l'ensemble des configurations d'identifiants. Le paramètre mode détermine le type d'identifiant :

  • AK : Utilise l'AccessKey d'un utilisateur RAM comme identifiant.

  • StsToken : Emploie un token STS comme identifiant.

  • RamRoleArn : Endosse un rôle RAM via les identifiants d'un utilisateur RAM pour obtenir un identifiant temporaire.

  • EcsRamRole : Récupère un identifiant depuis les métadonnées de l'instance.

  • OIDC : Obtient un identifiant à partir de l'ARN d'un fournisseur OIDC, d'un token OIDC et de l'ARN d'un rôle RAM.

  • ChainableRamRoleArn : Recourt au chaînage de rôles pour générer un nouvel identifiant, en s'appuyant sur un identifiant initial issu de profiles et désigné par le paramètre source_profile.

4. Récupération des identifiants depuis le rôle RAM de l'instance ECS

Si aucune étape précédente n'a abouti, l'outil Credentials lit la variable d'environnement ALIBABA_CLOUD_ECS_METADATA qui indique le nom du rôle RAM d'une instance ECS. Lorsque ce rôle existe, l'application obtient son token STS comme identifiant par défaut via le serveur de métadonnées ECS en mode renforcé (IMDSv2). En cas d'exception dans ce mode, l'outil bascule automatiquement vers le mode normal. Vous pouvez également définir la variable d'environnement ALIBABA_CLOUD_IMDSV1_DISABLED pour contrôler la gestion des exceptions. Valeurs possibles :

  1. false (par défaut) : L'outil Credentials poursuit la récupération de l'identifiant en mode normal.

  2. true : L'exception est levée et l'outil continue d'obtenir l'identifiant en mode renforcé.

La compatibilité avec le mode renforcé (IMDSv2) dépend de la configuration du serveur de métadonnées.

5. Utilisation d'un URI d'identifiant

À défaut d'identifiant trouvé auparavant, l'outil Credentials consulte la variable d'environnement ALIBABA_CLOUD_CREDENTIALS_URI contenant l'URI de l'identifiant. Si cet URI est valide, l'application l'utilise pour obtenir un token STS servant d'identifiant par défaut.

Références