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
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_IDetALIBABA_CLOUD_ACCESS_KEY_SECRETsont 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.
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 ( |
AccessKey |
|
2 |
Variables d'environnement ( |
Rôle RAM OIDC |
|
3 |
Fichier d'identifiants ( |
Tout type pris en charge |
|
4 |
Variable d'environnement |
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.
}
}
}
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 |
|
|
L'ARN du rôle RAM. |
|
|
L'ARN du fournisseur OIDC. |
|
|
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.