Todos los productos
Search
Centro de documentos

Alibaba Cloud SDK:Gestione credenciales de acceso

Última actualización: Sep 05, 2026

Cuando llame a operaciones de API para la gestión de recursos en la nube mediante los SDK de Alibaba Cloud, debe configurar información de credenciales válida. En este tema se describe cómo configurar una credencial de acceso para Alibaba Cloud SDK V1.0 for Go. Las credenciales de acceso mejoran el control de acceso cuando usa el SDK para el desarrollo.

Información de contexto

Cuando use los SDK de Alibaba Cloud para el desarrollo, configure un tipo de credencial adecuado según su escenario de negocio y sus requisitos de control de permisos. Para ayudar a los desarrolladores a compilar una aplicación estable y confiable, configure las variables de entorno o los archivos de configuración adecuados y asegúrese de que el SDK pueda leer y usar las credenciales.

Requisitos previos

  • Se usa Go 1.10.x o una versión posterior.

  • La biblioteca principal de Alibaba Cloud SDK for Go está instalada.

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

Inicializar un cliente de credenciales

Método 1: Usar la cadena predeterminada de proveedores de credenciales

Si no se especifica un método para inicializar un cliente de SDK, se usa la cadena predeterminada de proveedores de credenciales. Para obtener más información, consulte la sección Default credential provider chain de este tema.

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 un par de AccessKey

Cree un par de AccessKey para cuentas de Alibaba Cloud y usuarios de Resource Access Management (RAM) para llamar a las API. El par de AccessKey puede usarse para inicializar un cliente de SDK.

Importante

Un par de AccessKey de una cuenta de Alibaba Cloud tiene acceso completo a todos los recursos de la cuenta. Las filtraciones del par de AccessKey representan amenazas críticas para los recursos de una cuenta de Alibaba Cloud. Se recomienda usar el par de AccessKey de un usuario de RAM y rotar el par de AccessKey periódicamente. Para obtener información sobre cómo crear un par de AccessKey para un usuario de RAM, consulte Create an AccessKey pair.

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 un token de STS

Asegúrese de la seguridad de su negocio y solicite credenciales de seguridad temporales (TSC) de Security Token Service (STS) para crear un cliente temporal.

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 un par de AccessKey y un rol de RAM

Especifique el Alibaba Cloud Resource Name (ARN) de un RAM role para inicializar un cliente de SDK. El cliente de SDK debe obtener un token de STS llamando a la API de STS antes de enviar solicitudes de API. Para limitar los permisos de un token de STS, configure una política personalizada en 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 el rol de RAM de una instancia de ECS

Puede adjuntar un rol de RAM a una instancia de ECS o a una instancia de contenedor elástica. La herramienta de credenciales obtiene automáticamente el rol de RAM adjunto a la instancia y usa el servidor de metadatos para obtener el token de STS del rol de RAM. Después, el token de STS se usa para inicializar un cliente de credenciales.

Puede acceder a los metadatos de la instancia en modo normal o de seguridad reforzada. De forma predeterminada, la herramienta de credenciales obtiene credenciales de acceso en modo de seguridad reforzada mediante Instance Metadata Service Version 2 (IMDSv2). Si se produce una excepción en el modo de seguridad reforzada, configure el parámetro DisableIMDSv1 para especificar una lógica de manejo de excepciones. Valores válidos del parámetro DisableIMDSv1:

  1. Si el parámetro se establece en false, que es el valor predeterminado, la credencial de acceso se obtiene en modo normal.

  2. true: se lanza la excepción y la herramienta de credenciales continúa obteniendo la credencial de acceso en modo de seguridad reforzada.

Las configuraciones del servidor de metadatos determinan si el servidor admite el modo de seguridad reforzada (IMDSv2).

Nota
  • Para obtener más información sobre los metadatos de instancia, consulte Obtain instance metadata.

  • Para obtener más información sobre cómo adjuntar un rol de RAM a una instancia de ECS, consulte la sección "Cree un rol de RAM de instancia y adjunte el rol de RAM de instancia a una instancia de ECS" del tema Instance RAM roles. Para obtener más información sobre cómo adjuntar un rol de RAM a una instancia de contenedor elástica, consulte la sección "Asigne el rol de RAM de instancia a una instancia de contenedor elástica" del tema Use an instance RAM role by calling API operations.

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 el rol de RAM de un IdP de OIDC

Después de adjuntar un rol de RAM a un nodo de trabajo en un clúster de Container Service for Kubernetes (ACK), los pods del nodo de trabajo pueden usar el servidor de metadatos para obtener un token de STS. Sin embargo, si permite que aplicaciones no confiables, como aplicaciones cuyo código el cliente no divulga, accedan a tokens de STS mediante el servicio de metadatos, pueden surgir riesgos de seguridad. Para prevenir riesgos de seguridad y aplicar el principio de menor privilegio (PoLP), se recomienda usar la función RAM Roles for Service Account. Esta función mejora la seguridad de los recursos en la nube y permite que las aplicaciones no confiables obtengan tokens de STS de manera segura. En este caso, el clúster de ACK crea un archivo de token de OpenID Connect (OIDC) de cuenta de servicio, asocia el archivo de token con un pod e inyecta las variables de entorno relevantes en el pod. Después, la herramienta de credenciales usa las variables de entorno para llamar a la operación AssumeRoleWithOIDC de STS y obtener un token de STS del rol de RAM. Para obtener más información sobre la función RRSA, consulte Use RRSA to authorize different pods to access different cloud services. A continuación se muestran las variables de entorno que se inyectan en el pod:

ALIBABA_CLOUD_ROLE_ARN: el ARN del rol de RAM.

ALIBABA_CLOUD_OIDC_PROVIDER_ARN: el ARN del IdP de OIDC.

ALIBABA_CLOUD_OIDC_TOKEN_FILE: la ruta del archivo de token de 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 un token de portador

Solo Cloud Call Center permite usar un token de portador para inicializar un cliente de 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.
}

Cadena predeterminada de proveedores de credenciales

Si desea usar diferentes tipos de credenciales en los entornos de desarrollo y producción, por lo general debe obtener la información del entorno desde el código. También debe escribir ramas de código para obtener credenciales distintas para cada entorno. La cadena predeterminada de proveedores de credenciales de la herramienta de credenciales permite usar el mismo código para obtener credenciales para diferentes entornos según configuraciones independientes de la aplicación. Si usa credentials.NewDefaultCredentialsProvider() para inicializar un cliente de credenciales sin especificar un método de inicialización, la herramienta de credenciales obtiene la información de credenciales en el orden que se muestra a continuación:

1. Obtener la información de credenciales de las variables de entorno

Si no se encuentran credenciales en el paso anterior, la herramienta de credenciales obtiene la información de credenciales de las variables de entorno.

  • Si se especifican las variables de entorno del sistema ALIBABA_CLOUD_ACCESS_KEY_ID (ID de AccessKey) y ALIBABA_CLOUD_ACCESS_KEY_SECRET (secreto de AccessKey), la herramienta de credenciales usa el par de AccessKey especificado como credencial predeterminada.**

  • Si se especifican las variables de entorno del sistema ALIBABA_CLOUD_ACCESS_KEY_ID (ID de AccessKey), ALIBABA_CLOUD_ACCESS_KEY_SECRET (secreto de AccessKey) y ALIBABA_CLOUD_SECURITY_TOKEN (token de STS), la herramienta de credenciales usa el token de STS especificado como credencial predeterminada.

2. Obtener la información de credenciales mediante el rol de RAM de un IdP de OIDC

Si no se encuentran credenciales en el paso anterior, la herramienta de credenciales obtiene los valores de las variables de entorno que se indican a continuación:

ALIBABA_CLOUD_ROLE_ARN: el ARN del rol de RAM.

ALIBABA_CLOUD_OIDC_PROVIDER_ARN: el ARN del IdP de OIDC.

ALIBABA_CLOUD_OIDC_TOKEN_FILE: la ruta del archivo de token de OIDC.

Si se especifican las tres variables de entorno anteriores, la herramienta de credenciales usa las variables de entorno para llamar a la operación AssumeRoleWithOIDC de STS y obtener un token de STS como credencial predeterminada.

3. Obtener la información de credenciales del archivo config.json

Si aún no se encontró ninguna credencial, la cadena de proveedores intenta cargar el archivo de credenciales compartidas, config.json, desde su ubicación predeterminada y usa la credencial especificada en el archivo.

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

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

Para configurar una credencial de esta manera, puede usar Alibaba Cloud CLI o crear manualmente un archivo config.json en la ruta adecuada. A continuación se muestra un ejemplo del formato del contenido:

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

Descripción

current

Especifique el nombre de la credencial para recuperar la configuración de credencial correspondiente. El nombre de la credencial es el valor del parámetro name en profiles. De forma predeterminada, el sistema da prioridad al nombre de credencial especificado por la variable de entorno ALIBABA_CLOUD_PROFILE . Si esta variable de entorno no está configurada, el sistema usa el nombre de credencial especificado por current.

profiles

Contiene una colección de configuraciones de credenciales. El parámetro mode especifica el tipo de credencial:

  • AK: Usa el AccessKey de un usuario de RAM como credencial.

  • StsToken: Usa un token de STS como credencial.

  • RamRoleArn: Asume un rol de RAM mediante las credenciales de un usuario de RAM para obtener una credencial temporal.

  • EcsRamRole: Obtiene una credencial de los metadatos de instancia.

  • OIDC: Obtiene una credencial mediante un ARN de proveedor de OIDC, un token de OIDC y un ARN de rol de RAM.

  • ChainableRamRoleArn: Usa el encadenamiento de roles para obtener una nueva credencial, con una credencial inicial de profiles especificada por el parámetro source_profile.

4. Obtener la información de credenciales del rol de RAM de la instancia de ECS

Si no se encuentran credenciales en el paso anterior, la herramienta de credenciales obtiene el valor de la variable de entorno ALIBABA_CLOUD_ECS_METADATA que especifica el nombre de rol de RAM de una instancia de ECS. Si el rol de RAM existe, la aplicación obtiene un token de STS del rol de RAM como credencial predeterminada mediante el servidor de metadatos de ECS en modo de seguridad reforzada (IMDSv2). Si se produce una excepción en el modo de seguridad reforzada (IMDSv2), la herramienta de credenciales obtiene la credencial de acceso en modo normal. También configure la variable de entorno ALIBABA_CLOUD_IMDSV1_DISABLED para especificar una lógica de manejo de excepciones. Valores válidos de la variable de entorno:

  1. false (predeterminado): La herramienta de credenciales continúa obteniendo la credencial de acceso en modo normal.

  2. true: se lanza la excepción y la herramienta de credenciales continúa obteniendo la credencial de acceso en modo de seguridad reforzada.

Las configuraciones del servidor de metadatos determinan si el servidor admite el modo de seguridad reforzada (IMDSv2).

5. Usar un URI de credencial

Si no se encuentran credenciales en el paso anterior, la herramienta de credenciales obtiene el valor de la variable de entorno ALIBABA_CLOUD_CREDENTIALS_URI que especifica el URI de la credencial. Si el URI de la credencial existe, la aplicación usa el URI de la credencial para obtener un token de STS como credencial predeterminada.

Referencias