Tous les produits
Search
Centre de documentation

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

Dernière mise à jour :Sep 10, 2026

Le SDK Alibaba Cloud pour C# V1.0 prend en charge plusieurs types d'identifiants. Choisissez celui qui correspond à votre environnement de déploiement et à vos exigences de sécurité.

Choisir un type d'identifiant

Type d'identifiant

Cas d'utilisation

AccessKey

Développement et tests. À éviter en production : une AccessKey exposée compromet toutes les ressources du compte.

Jeton STS

Accès temporaire avec des autorisations granulaires. Généralement obtenu via AssumeRole.

ARN de rôle RAM

Accès inter-comptes ou délégation d'autorisations à un utilisateur RAM via STS.

Rôle RAM d'instance

Applications s'exécutant sur ECS. Aucune AccessKey n'est requise : le SDK récupère automatiquement les identifiants depuis le service de métadonnées de l'instance.

Rôle RAM avec OIDC

Applications s'exécutant dans ACK (Kubernetes). Chaque pod assume un rôle RAM distinct sans AccessKey.

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

Développement local ou environnements où les identifiants sont gérés en externe (variables d'environnement, fichier de configuration ou métadonnées d'instance).

Utiliser une AccessKey

Important
  • La divulgation d'une AccessKey de votre compte Alibaba Cloud compromet toutes les ressources associées. Pour renforcer la sécurité, nous vous recommandons vivement d'utiliser une AccessKey appartenant à un utilisateur RAM. Pour plus d'informations, consultez Créer une AccessKey.

  • Assurez-vous que les variables d'environnement ALIBABA_CLOUD_ACCESS_KEY_ID et ALIBABA_CLOUD_ACCESS_KEY_SECRET sont définies dans votre environnement d'exécution. Pour plus d'informations, consultez Configurer les variables d'environnement sous Linux, macOS et Windows.

  • Initialisez le client avec une AccessKey en utilisant IClientProfile.

    using Aliyun.Acs.Core;
    using Aliyun.Acs.Core.Profile;
    
    namespace AlibabaCloud.SDK.Sample
    {
        public class Sample
        {
            public static void Main(string[] args)
            {
                IClientProfile profile = DefaultProfile.GetProfile(
                    // The region ID.
                    "<REGION_ID>",
                    // Retrieve the AccessKey ID of the RAM user from an environment variable.
                    Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                    // Retrieve the AccessKey secret of the RAM user from an environment variable.
                    Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
                DefaultAcsClient client = new DefaultAcsClient(profile);
                // Code for calling API operations is omitted.
            }
        }
    }
    
  • Initialisez le client avec une AccessKey en utilisant AlibabaCloudCredentialsProvider.

    using Aliyun.Acs.Core;
    using Aliyun.Acs.Core.Profile;
    using Aliyun.Acs.Core.Auth;
    
    namespace AlibabaCloud.SDK.Sample
    {
        public class Sample
        {
            public static void Main(string[] args)
            {
                AlibabaCloudCredentialsProvider provider = new AccessKeyCredentialProvider(
                    // Retrieve the AccessKey ID of the RAM user from an environment variable.
                    Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                    // Retrieve the AccessKey secret of the RAM user from an environment variable.
                    Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
                IClientProfile profile = DefaultProfile.GetProfile("<REGION_ID>");
                DefaultAcsClient client = new DefaultAcsClient(profile, provider);
                // Code for calling API operations is omitted.
            }
        }
    }
    

Utiliser un jeton STS

Initialisez le client avec des identifiants d'accès temporaires obtenus via Security Token Service (STS).

using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Auth;
using Aliyun.Acs.Core.Profile;

namespace AlibabaCloud.SDK.Sample
{
    public class Sample
    {
        public static void Main(string[] args)
        {
            AlibabaCloudCredentialsProvider provider = new StsCredentialProvider(
                // Retrieve the AccessKey ID of the RAM user from an environment variable.
                Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                // Retrieve the AccessKey secret of the RAM user from an environment variable.
                Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
                // Retrieve the security token of the RAM user from an environment variable.
                Environment.GetEnvironmentVariable("ALIBABA_CLOUD_SECURITY_TOKEN"));
            IClientProfile profile = DefaultProfile.GetProfile("<REGION_ID>");
            DefaultAcsClient client = new DefaultAcsClient(profile, provider);
            // Code for calling API operations is omitted.
        }
    }
}

Utiliser un ARN de rôle RAM

Obtenez un jeton STS en appelant l'opération STS AssumeRole en tant qu'utilisateur Resource Access Management (RAM).

using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Auth;
using Aliyun.Acs.Core.Profile;

namespace AlibabaCloud.SDK.Sample
{
    public class Sample
    {
        public static void Main(string[] args)
        {
            IClientProfile profile = DefaultProfile.GetProfile("<REGION_ID>");
            AlibabaCloudCredentialsProvider provider = new AccessKeyCredentialProvider(
                // Retrieve the AccessKey ID of the RAM user from an environment variable.
                Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                // Retrieve the AccessKey secret of the RAM user from an environment variable.
                Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
            // Use the RAM role ARN.
            STSAssumeRoleSessionCredentialsProvider stsProvider = new STSAssumeRoleSessionCredentialsProvider(
                provider,
                "<ROLE_ARN>",
                profile
                );

            DefaultAcsClient client = new DefaultAcsClient(profile, stsProvider);
            // Code for calling API operations is omitted.
        }
    }
}

Utiliser un rôle RAM d'instance

Le SDK récupère les identifiants temporaires à partir d'un rôle RAM d'instance attaché à votre instance Elastic Compute Service (ECS). Les applications accèdent aux API Alibaba Cloud sans AccessKey codée en dur : le SDK utilise automatiquement les autorisations accordées au rôle.

Important

Assurez-vous qu'un rôle RAM est attaché à votre instance ECS.

using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Profile;
using Aliyun.Acs.Core.Auth;

namespace AlibabaCloud.SDK.Sample
{
    public class Sample
    {
        public static void Main(string[] args)
        {
            IClientProfile profile = DefaultProfile.GetProfile("<REGION_ID>");
            // Use an instance RAM role.
            InstanceProfileCredentialsProvider provider = new InstanceProfileCredentialsProvider(
                "<ROLE_NAME>");
            DefaultAcsClient client = new DefaultAcsClient(profile, provider);
            // Code for calling API operations is omitted.
        }
    }
}

Utiliser un rôle RAM avec OIDC

Dans Container Service for Kubernetes (ACK), la fonctionnalité RAM Roles for Service Accounts (RRSA) permet à chaque pod d'assumer un rôle RAM distinct et d'accéder aux ressources cloud avec des identifiants temporaires. Cette approche applique le principe du moindre privilège et élimine les AccessKeys, prévenant ainsi les fuites d'identifiants.

ACK crée et monte un fichier de jeton OpenID Connect (OIDC) de compte de service pour chaque pod, et injecte les détails de configuration dans des variables d'environnement. Le SDK lit ces variables et appelle l'opération STS AssumeRoleWithOIDC pour échanger le jeton OIDC contre un jeton STS temporaire. Pour plus d'informations, consultez Isoler les autorisations des pods à l'aide de RAM Roles for Service Accounts (RRSA).

using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Auth;
using Aliyun.Acs.Core.Profile;

namespace AlibabaCloud.SDK.Sample
{
    public class Sample
    {
        public static void Main(string[] args)
        {
            AlibabaCloudCredentialsProvider provider = new OIDCCredentialsProvider(
                // The ARN of the RAM role.
                Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ROLE_ARN"), 
                // The ARN of the OIDC provider.
                Environment.GetEnvironmentVariable("ALIBABA_CLOUD_OIDC_PROVIDER_ARN"), 
                // The file path of the OIDC token.
                Environment.GetEnvironmentVariable("ALIBABA_CLOUD_OIDC_TOKEN_FILE"),
                // A custom role session name.
                "<ROLE_SESSION_NAME>",
                // The region ID for the STS service.
                "<REGION_ID>");
            IClientProfile profile = DefaultProfile.GetProfile("<REGION_ID>");
            DefaultAcsClient client = new DefaultAcsClient(profile, provider);
            // Code for calling API operations is omitted.
        }
    }
}

Utiliser la chaîne par défaut de fournisseurs d'identifiants

DefaultCredentialProvider recherche les identifiants dans l'ordre suivant et utilise la première correspondance trouvée :

Priorité

Source

Type d'identifiant

1

Variables d'environnement (ALIBABA_CLOUD_ACCESS_KEY_ID + ALIBABA_CLOUD_ACCESS_KEY_SECRET)

AccessKey

2

Variables d'environnement (ALIBABA_CLOUD_ROLE_ARN + ALIBABA_CLOUD_OIDC_PROVIDER_ARN + ALIBABA_CLOUD_OIDC_TOKEN_FILE)

Rôle RAM OIDC

3

Fichier d'identifiants (~/.alibabacloud/credentials.ini)

Tout type pris en charge

4

Variable d'environnement ALIBABA_CLOUD_ECS_METADATA (nom du rôle RAM d'instance)

Rôle RAM d'instance

using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Auth.Provider;
using Aliyun.Acs.Core.Profile;

namespace AlibabaCloud.SDK.Sample
{
    public class Sample
    {
        public static void Main(string[] args)
        {
            IClientProfile profile = DefaultProfile.GetProfile("<REGION_ID>");
            var alibabaCloudClientCredential = new DefaultCredentialProvider();
            var client = new DefaultAcsClient(profile,alibabaCloudClientCredential);
            // Code for calling API operations is omitted.
        }
    }
}
Important

DefaultCredentialProvider est pratique pour le développement et les tests locaux, mais n'est pas recommandé pour la production. En cas d'échec d'authentification, il peut être difficile d'identifier la source d'identifiants problématique. En production, utilisez un type d'identifiant explicite adapté à votre environnement de déploiement, tel qu'un rôle RAM d'instance pour ECS ou un rôle RAM OIDC pour ACK.

1. Identifiants d'environnement

Le SDK vérifie la présence des variables ALIBABA_CLOUD_ACCESS_KEY_ID et ALIBABA_CLOUD_ACCESS_KEY_SECRET. Si elles sont toutes deux définies et non vides, elles sont utilisées pour créer les identifiants.

2. Rôle RAM OIDC

Si aucun identifiant de priorité supérieure n'est trouvé, le SDK lit les variables d'environnement suivantes :

Variable

Description

ALIBABA_CLOUD_ROLE_ARN

L'ARN du rôle RAM.

ALIBABA_CLOUD_OIDC_PROVIDER_ARN

L'ARN du fournisseur OIDC.

ALIBABA_CLOUD_OIDC_TOKEN_FILE

Le chemin d'accès au fichier du jeton OIDC.

Si les trois variables sont définies, le SDK appelle l'opération AssumeRoleWithOIDC et utilise le jeton STS renvoyé.

3. Fichier de configuration

Si un fichier existe à l'emplacement ~/.alibabacloud/credentials.ini (ou C:\Users\USER_NAME\.alibabacloud\credentials.ini sous Windows), le SDK y lit les identifiants. Vous pouvez remplacer le chemin par défaut à l'aide de la variable d'environnement ALIBABA_CLOUD_CREDENTIALS_FILE. Spécifiez un profil avec ALIBABA_CLOUD_PROFILE ; si cette variable n'est pas définie, le SDK utilise le profil default.

Le fichier prend en charge tous les types d'identifiants :

[default]                            # Default profile
type = access_key                    # Authentication type: access_key
access_key_id = foo                  # Your AccessKey ID
access_key_secret = bar              # Your AccessKey Secret

[client1]                            # Profile named 'client1'
type = ecs_ram_role                  # Authentication type: ecs_ram_role
role_name = EcsRamRoleTest           # The role name

[client2]                            # Profile named 'client2'
type = ram_role_arn                  # Authentication type: ram_role_arn
access_key_id = foo
access_key_secret = bar
role_arn = role_arn                  # The role ARN
role_session_name = role_session_name # A custom session name

[client3]                            # Profile named 'client3'
type = oidc_role_arn                 # Authentication type: oidc_role_arn
access_key_id = foo
access_key_secret = bar
role_arn = role_arn                  # The role ARN
oidc_provider_arn = oidc_provider_arn # The OIDC provider ARN
oidc_token_file_path = /path/to/token # The OIDC token file path
role_session_name = role_session_name # A custom session name

4. Rôle RAM d'instance

Si aucun identifiant n'est trouvé via les sources précédentes, le SDK vérifie la variable d'environnement ALIBABA_CLOUD_ECS_METADATA pour obtenir le nom d'un rôle RAM d'instance. Si elle est définie, le SDK récupère un jeton STS depuis le serveur de métadonnées ECS.