Todos os produtos
Search
Central de documentação

Alibaba Cloud SDK:Gerenciar credenciais de acesso

Última atualização: Jul 03, 2026

Ao chamar operações de API para gerenciar recursos em nuvem com os SDKs da Alibaba Cloud, configure informações de credenciais válidas. Este tópico descreve como configurar uma credencial de acesso para o Alibaba Cloud SDK V1.0 for Go. As credenciais de acesso aprimoram o controle de acesso durante o desenvolvimento com o SDK.

Informações básicas

Durante o desenvolvimento com os SDKs da Alibaba Cloud, configure um tipo de credencial adequado ao seu cenário de negócios e aos requisitos de controle de permissões. Para ajudar os desenvolvedores a criar aplicações estáveis e confiáveis, defina variáveis de ambiente ou arquivos de configuração apropriados para garantir que o SDK leia e utilize as credenciais corretamente.

Pré-requisitos

  • Go 1.10.x ou versão posterior instalada.

  • Biblioteca principal do Alibaba Cloud SDK for Go instalada.

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

Inicializar um cliente Credentials

Método 1: Usar a cadeia de provedores de credenciais padrão

Se você não especificar um método de inicialização para o cliente do SDK, o sistema usará a cadeia de provedores de credenciais padrão. Para mais detalhes, consulte a seção Cadeia de provedores de credenciais padrão deste tópico.

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étodo 2: Usar um par de AccessKey

Crie um par de AccessKey para contas Alibaba Cloud e usuários do Resource Access Management (RAM) para chamar APIs. Use esse par para inicializar um cliente do SDK.

Importante

O par de AccessKey de uma conta Alibaba Cloud possui acesso total a todos os recursos dessa conta. O vazamento desse par representa uma ameaça crítica à segurança dos recursos. Recomendamos o uso do par de AccessKey de um usuário RAM e a rotação regular das chaves. Para saber como criar um par de AccessKey para um usuário RAM, consulte Criar um par de 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étodo 3: Usar um token STS

Para garantir a segurança do seu negócio, solicite credenciais de segurança temporárias (TSC) no Security Token Service (STS) e crie um cliente temporário.

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étodo 4: Usar um par de AccessKey e uma função RAM

Especifique o Alibaba Cloud Resource Name (ARN) de uma função RAM para inicializar o cliente do SDK. Antes de enviar requisições de API, o cliente deve obter um token STS chamando a API do STS. Para restringir as permissões do token STS, configure uma política personalizada no 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étodo 5: Usar a função RAM de uma instância ECS

Anexe uma função RAM a uma instância ECS ou a uma instância de contêiner elástico. A ferramenta Credentials obtém automaticamente a função RAM associada à instância e utiliza o servidor de metadados para recuperar o token STS correspondente. Em seguida, esse token STS inicializa o cliente Credentials.

O acesso aos metadados da instância pode ocorrer em modo normal ou de reforço de segurança. Por padrão, a ferramenta Credentials obtém as credenciais de acesso no modo de reforço de segurança usando o Instance Metadata Service Version 2 (IMDSv2). Se ocorrer uma exceção nesse modo, configure o parâmetro DisableIMDSv1 para definir a lógica de tratamento de exceções. Valores válidos para o parâmetro DisableIMDSv1:

  1. Se definido como false (valor padrão), o sistema obtém a credencial de acesso no modo normal.

  2. true: O sistema lança a exceção e a ferramenta Credentials continua tentando obter a credencial no modo de reforço de segurança.

As configurações do servidor de metadados determinam se ele suporta o modo de reforço de segurança (IMDSv2).

Nota
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étodo 6: Usar a função RAM de um IdP OIDC

Após anexar uma função RAM a um nó de trabalho em um cluster do Container Service for Kubernetes (ACK), os pods nesse nó podem usar o servidor de metadados para obter um token STS. No entanto, permitir que aplicações não confiáveis (como aquelas cujo código não foi divulgado pelo cliente) acessem tokens STS via serviço de metadados pode gerar riscos de segurança. Para mitigar esses riscos e aplicar o princípio do menor privilégio (PoLP), recomendamos o uso do recurso RAM Roles for Service Account. Ele aumenta a segurança dos recursos em nuvem e permite que aplicações não confiáveis obtenham tokens STS de forma segura. Nesse cenário, o cluster ACK cria um arquivo de token OpenID Connect (OIDC) da conta de serviço, associa-o ao pod e injeta as variáveis de ambiente relevantes. A ferramenta Credentials usa então essas variáveis para chamar a operação AssumeRoleWithOIDC do STS e obter o token STS da função RAM. Para mais informações sobre o recurso RRSA, consulte Usar RRSA para autorizar diferentes pods a acessar diferentes serviços em nuvem. As seguintes variáveis de ambiente são injetadas no pod:

ALIBABA_CLOUD_ROLE_ARN: o ARN da função RAM.

ALIBABA_CLOUD_OIDC_PROVIDER_ARN: o ARN do IdP OIDC.

ALIBABA_CLOUD_OIDC_TOKEN_FILE: o caminho do arquivo 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étodo 7: Usar um bearer token

Somente o Cloud Call Center permite o uso de bearer token para inicializar um cliente do 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.
}

Cadeia de provedores de credenciais padrão

Quando se utilizam tipos diferentes de credenciais nos ambientes de desenvolvimento e produção, geralmente é necessário obter informações do ambiente diretamente no código e criar ramificações lógicas para carregar a credencial adequada. A cadeia de provedores de credenciais padrão da ferramenta Credentials permite usar o mesmo código para obter credenciais de diferentes ambientes, baseando-se em configurações externas à aplicação. Ao inicializar um cliente Credentials com credentials.NewDefaultCredentialsProvider() sem especificar um método, a ferramenta busca as informações de credencial na seguinte ordem:

1. Obter as informações de credencial de variáveis de ambiente

Se nenhuma credencial for encontrada na etapa anterior, a ferramenta Credentials tenta obtê-las a partir de variáveis de ambiente.

  • Caso as variáveis de ambiente de sistema ALIBABA_CLOUD_ACCESS_KEY_ID (AccessKey ID) e ALIBABA_CLOUD_ACCESS_KEY_SECRET (AccessKey secret) estejam definidas, a ferramenta utiliza o par de AccessKey especificado como credencial padrão.**

  • Se as variáveis de ambiente de sistema ALIBABA_CLOUD_ACCESS_KEY_ID (AccessKey ID), ALIBABA_CLOUD_ACCESS_KEY_SECRET (AccessKey secret) e ALIBABA_CLOUD_SECURITY_TOKEN (token STS) estiverem definidas, a ferramenta utiliza o token STS especificado como credencial padrão.

2. Obter as informações de credencial usando a função RAM de um IdP OIDC

Na ausência de credenciais na etapa anterior, a ferramenta Credentials verifica os valores das seguintes variáveis de ambiente:

ALIBABA_CLOUD_ROLE_ARN: o ARN da função RAM.

ALIBABA_CLOUD_OIDC_PROVIDER_ARN: o ARN do IdP OIDC.

ALIBABA_CLOUD_OIDC_TOKEN_FILE: o caminho do arquivo de token OIDC.

Se essas três variáveis estiverem definidas, a ferramenta as utiliza para chamar a operação AssumeRoleWithOIDC do STS e obter um token STS como credencial padrão.

3. Obter as informações de credencial do arquivo config.json

Caso nenhuma credencial tenha sido encontrada, a cadeia de provedores tenta carregar o arquivo de credenciais compartilhadas, config.json, em sua localização padrão e utiliza a credencial nele especificada.

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

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

Para configurar uma credencial dessa forma, utilize a Alibaba Cloud CLI ou crie manualmente um arquivo config.json no caminho apropriado. O exemplo abaixo mostra o formato do conteúdo:

{
  "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
    }
  ]
}

Parâmetro

Descrição

current

Especifique o nome da credencial para recuperar a configuração correspondente. O nome da credencial corresponde ao valor do parâmetro name em profiles. Por padrão, o sistema prioriza o nome da credencial definido pela variável de ambiente ALIBABA_CLOUD_PROFILE. Se essa variável não estiver configurada, o sistema usa o nome especificado em current.

profiles

Contém uma coleção de configurações de credenciais. O parâmetro mode define o tipo de credencial:

  • AK: Utiliza o AccessKey de um usuário RAM como credencial.

  • StsToken: Emprega um token STS como credencial.

  • RamRoleArn: Assume uma função RAM usando as credenciais de um usuário RAM para obter uma credencial temporária.

  • EcsRamRole: Recupera uma credencial a partir dos metadados da instância.

  • OIDC: Obtém uma credencial utilizando um ARN de provedor OIDC, um token OIDC e um ARN de função RAM.

  • ChainableRamRoleArn: Usa encadeamento de funções para obter uma nova credencial, partindo de uma credencial inicial em profiles indicada pelo parâmetro source_profile.

4. Obter as informações de credencial da função RAM da instância ECS

Se nenhuma credencial for encontrada na etapa anterior, a ferramenta Credentials verifica o valor da variável de ambiente ALIBABA_CLOUD_ECS_METADATA, que indica o nome da função RAM de uma instância ECS. Caso a função exista, a aplicação obtém um token STS dessa função como credencial padrão, utilizando o servidor de metadados do ECS no modo de reforço de segurança (IMDSv2). Se ocorrer uma exceção no modo IMDSv2, a ferramenta tentará obter a credencial no modo normal. Também é possível configurar a variável de ambiente ALIBABA_CLOUD_IMDSV1_DISABLED para definir a lógica de tratamento de exceções. Valores válidos:

  1. false (padrão): A ferramenta Credentials continua a obtenção da credencial no modo normal.

  2. true: O sistema lança a exceção e a ferramenta persiste na tentativa de obter a credencial no modo de reforço de segurança.

As configurações do servidor de metadados determinam se ele oferece suporte ao modo de reforço de segurança (IMDSv2).

5. Usar uma URI de credencial

Caso nenhuma credencial seja encontrada na etapa anterior, a ferramenta Credentials lê o valor da variável de ambiente ALIBABA_CLOUD_CREDENTIALS_URI, que especifica a URI da credencial. Se essa URI existir, a aplicação a utiliza para obter um token STS como credencial padrão.

Referências