O Alibaba Cloud SDK for C# V1.0 oferece suporte a diversos tipos de credenciais. Escolha a opção mais adequada ao seu ambiente de implantação e aos seus requisitos de segurança.
Escolha um tipo de credencial
|
Tipo de credencial |
Quando usar |
|
AccessKey |
Desenvolvimento e testes. Evite em produção — um AccessKey exposto compromete todos os recursos da conta. |
|
Token STS |
Acesso de curta duração com permissões refinadas. Geralmente obtido via AssumeRole. |
|
ARN de função RAM |
Acesso entre contas ou delegação de permissões a um usuário RAM via STS. |
|
Função RAM de instância |
Aplicações em execução no ECS. Não requer AccessKey — o SDK obtém as credenciais automaticamente do service de metadados da instância. |
|
Função RAM com OIDC |
Aplicações em execução no ACK (Kubernetes). Cada pod assume uma função RAM distinta sem precisar de AccessKey. |
|
Cadeia de provedor de credenciais padrão |
Desenvolvimento local ou ambientes com gerenciamento externo de credenciais (variáveis de ambiente, arquivo de configuração ou metadados da instância). |
Usar um AccessKey
A exposição de um AccessKey da sua conta Alibaba Cloud compromete todos os recursos associados a ela. Para maior segurança, recomendamos fortemente o uso de um AccessKey pertencente a um usuário RAM. Para mais informações, consulte Crie um AccessKey.
Verifique se as variáveis de ambiente
ALIBABA_CLOUD_ACCESS_KEY_IDeALIBABA_CLOUD_ACCESS_KEY_SECRETestão definidas no seu ambiente de execução. Para mais informações, consulte Configure environment variables in Linux, macOS, and Windows.
-
Inicialize o cliente com um AccessKey usando
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. } } } -
Inicialize o cliente com um AccessKey usando
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. } } }
Usar um token STS
Inicialize o cliente com uma credencial de acesso temporária obtida por meio do 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.
}
}
}
Usar um ARN de função RAM
Obtenha um token STS chamando a operação AssumeRole do STS como um usuário do 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.
}
}
}
Usar uma função RAM de instância
O SDK recupera credenciais temporárias de uma instance RAM role associada à sua instância do Elastic Compute Service (ECS). As aplicações acessam as APIs da Alibaba Cloud sem um AccessKey codificado, pois o SDK utiliza automaticamente as permissões concedidas à função.
Certifique-se de que uma função RAM esteja associada à sua instância 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.
}
}
}
Usar uma função RAM com OIDC
No Container Service for Kubernetes (ACK), o recurso RAM Roles for Service Accounts (RRSA) permite que cada pod assuma uma função RAM distinta e acesse recursos da cloud com credenciais temporárias. Essa abordagem aplica o princípio de menor privilégio e elimina a necessidade de AccessKeys, evitando vazamentos de credenciais.
O ACK cria e monta um arquivo de token OpenID Connect (OIDC) da conta de service para cada pod e injeta os detalhes de configuração nas variáveis de ambiente. O SDK lê essas variáveis e chama a operação AssumeRoleWithOIDC do STS para trocar o token OIDC por um token STS temporário. Para mais informações, consulte Isolate pod permissions by using 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.
}
}
}
Usar a cadeia de provedor de credenciais padrão
O DefaultCredentialProvider busca credenciais na seguinte ordem e usa a primeira correspondência encontrada:
|
Prioridade |
Fonte |
Tipo de credencial |
|
1 |
Variáveis de ambiente ( |
AccessKey |
|
2 |
Variáveis de ambiente ( |
Função RAM OIDC |
|
3 |
Arquivo de credenciais ( |
Qualquer tipo compatível |
|
4 |
Variável de ambiente |
Função RAM de instância |
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.
}
}
}
O DefaultCredentialProvider é conveniente para desenvolvimento e testes locais, mas não é recomendado para produção. Em caso de falha na autenticação, identificar a origem da credencial problemática pode ser difícil. Em produção, use um tipo de credencial explícito adequado ao seu ambiente de implantação, como uma função RAM de instância para ECS ou uma função RAM OIDC para ACK.
1. Credenciais de ambiente
O SDK verifica as variáveis ALIBABA_CLOUD_ACCESS_KEY_ID e ALIBABA_CLOUD_ACCESS_KEY_SECRET. Se ambas estiverem definidas e não vazias, o sistema as usará para criar as credenciais.
2. Função RAM OIDC
Se o SDK não encontrar nenhuma credencial de prioridade superior, ele lerá as seguintes variáveis de ambiente:
|
Variável |
Descrição |
|
|
O ARN da função RAM. |
|
|
O ARN do provedor OIDC. |
|
|
O caminho do arquivo do token OIDC. |
Se todas as três estiverem definidas, o SDK chamará a operação AssumeRoleWithOIDC e usará o token STS retornado.
3. Arquivo de configuração
Se existir um arquivo em ~/.alibabacloud/credentials.ini (ou C:\Users\USER_NAME\.alibabacloud\credentials.ini no Windows), o SDK lerá as credenciais dele. Substitua o caminho padrão pela variável de ambiente ALIBABA_CLOUD_CREDENTIALS_FILE. Especifique um perfil com ALIBABA_CLOUD_PROFILE; caso contrário, o SDK usará o perfil default.
O arquivo aceita todos os tipos de credenciais:
[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. Função RAM de instância
Se nenhuma credencial for encontrada nas sources anteriores, o SDK verificará a variável de ambiente ALIBABA_CLOUD_ECS_METADATA em busca do nome de uma função RAM de instância. Se definida, o SDK obterá um token STS do servidor de metadados do ECS.