O Alibaba Cloud Terraform Provider oferece suporte a diversos métodos de autenticação. Escolha um deles com base no seu ambiente de execução e nos requisitos de segurança.
Prioridade dos métodos de autenticação
Ao configurar o provedor da Alibaba Cloud, selecione um método de autenticação. O provedor busca as credenciais na seguinte ordem e interrompe a busca na primeira correspondência encontrada:
Configuração estática: O provedor lê primeiramente os parâmetros access_key, secret_key, security_token ou ecs_role_name, caso estejam especificados explicitamente no bloco do provedor.
Variáveis de ambiente: Se nenhuma configuração estática for encontrada, o provedor lê as variáveis de ambiente do sistema, como ALICLOUD_ACCESS_KEY e ALICLOUD_SECRET_KEY.
-
Arquivo de configuração compartilhada:
Configuração estática: O provedor lê as informações de autenticação do perfil especificado no arquivo de configuração compartilhada local. Essas informações podem incluir um par de AccessKey, ram_role_arn, ram_role_name ou sts_token.
Configuração avançada: Caso o arquivo de configuração compartilhada não contenha uma configuração estática, mas esteja configurado com CloudSSO, OAuth, um programa externo ou uma função RAM encadeável (ChainableRamRoleArn), o provedor invoca o plugin correspondente para obter uma credencial temporária do Security Token Service (STS).
Credencial via URL: Se nenhum dos métodos acima fornecer uma credencial, o provedor tenta recuperar as credenciais da URL especificada por credentials_uri.
Recomendações de segurança
Para ambientes de produção, utilize estes métodos baseados em credenciais temporárias:
Função RAM de instância para ECS
Assunção de função RAM (AssumeRole)
Assunção de função via IdP OIDC
Vantagens de segurança:
Elimina AccessKeys de longa duração codificadas diretamente no código, reduzindo o risco de comprometimento de chaves.
Limita a duração das permissões por meio da expiração das credenciais.
Suporte a autorização refinada
Para um controle de acesso refinado por aplicação, equipe ou projeto, utilize a assunção de função RAM e a assunção de função via IdP OIDC. Associe funções e políticas dedicadas a cada carga de trabalho do Terraform para aplicar o princípio do menor privilégio.
Métodos de autenticação do Terraform
O Alibaba Cloud Terraform Provider oferece suporte aos seguintes métodos de autenticação:
|
Método de autenticação |
Instruções |
Casos de uso |
|
(access_key) |
Defina um par de AccessKey diretamente no arquivo de configuração. |
|
|
(ALIBABA_CLOUD_ACCESS_KEY) |
Lê as informações do AccessKey a partir de variáveis de ambiente. |
|
|
Função RAM de instância para ECS (ecs_role_name) |
Obtém credenciais temporárias dos metadados da instância ECS por meio da função RAM associada. |
Execução do Terraform em uma instância ECS. |
|
Assunção de função OIDC (assume_role_with_oidc) |
Assume uma função RAM por meio de um provedor de identidade OIDC para obter credenciais temporárias. |
Execução do Terraform em um cluster Kubernetes com suporte a OIDC, como o Alibaba Cloud ACK. |
|
(assume_role) |
Assume uma função RAM para obter credenciais temporárias. |
|
|
(credentials_uri) |
Recupera credenciais temporárias de uma URI especificada. |
Serviços personalizados de credenciais. |
|
Arquivo de configuração compartilhada (profile) |
Gerencie múltiplos perfis de credenciais em um único arquivo de configuração da CLI da Alibaba Cloud. Métodos suportados:
|
|
Configuração estática
Variáveis de ambiente
Função RAM de instância para ECS
Assunção de função OIDC
Assunção de função
Credencial via URL
Arquivo de configuração compartilhada
O Terraform lê as credenciais do arquivo config.json da CLI da Alibaba Cloud. Configure vários tipos de credenciais em um único arquivo e referencie-os pelo nome do profile. Configurar credenciais.
Caminhos padrão dos arquivos:
Linux/macOS:
~/.aliyun/config.jsonWindows:
C:\Users\USER_NAME\.aliyun\config.json
Exemplo de configuração
Use profile para especificar o nome da credencial no bloco provider. Se o arquivo não estiver no caminho padrão, defina shared_credentials_file:
provider "alicloud" {
region = "cn-hangzhou"
shared_credentials_file = "~/.aliyun/config.json"
profile = "TerraformTest"
}
Exemplo de config.json:
{
"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": "External",
"process_command": "<YOUR_COMMAND>",
"region_id": "<REGION_ID>",
"output_format": "json",
"language": "en"
},
{
"name": "<PROFILE_NAME5>",
"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_NAME6>",
"mode": "ChainableRamRoleArn",
"source_profile": "<PROFILE_NAME>",
"ram_role_arn": "<ROLE_ARN>",
"ram_session_name": "<ROLE_SESSION_NAME>",
"expired_seconds": 3600
},
{
"name": "<PROFILE_NAME7>",
"mode": "CloudSSO",
"cloud_sso_sign_in_url": "https://******/login",
"access_token": "eyJraWQiOiJiYzViMzUwYy******",
"cloud_sso_access_token_expire": 1754316142,
"cloud_sso_access_config": "ac-00s1******",
"cloud_sso_account_id": "151266******"
},
{
"name": "<PROFILE_NAME8>",
"mode": "OAuth",
"access_key_id": "<ALIBABA_CLOUD_ACCESS_KEY_ID>",
"access_key_secret": "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>",
"sts_token": "<SECURITY_TOKEN>",
"region_id": "<REGION_ID>",
"output_format": "json",
"language": "<zh|en>",
"sts_expiration": "<STS_EXPIRATION>",
"oauth_access_token": "<OAUTH_ACCESS_TOKEN>",
"oauth_refresh_token": "<OAUTH_REFRESH_TOKEN>",
"oauth_access_token_expire": 1754316142,
"oauth_site_type": "<CN|EN>"
}
]
}
No arquivo config.json, o parâmetro mode especifica o tipo de credencial:
AK: Usa o AccessKey do usuário como credencial.
StsToken: Usa um token STS como credencial.
RamRoleArn: Obtém a credencial usando o ARN de uma função RAM.
EcsRamRole: Obtém a credencial usando a função RAM associada a uma instância ECS.
External: Obtém uma credencial executando um comando externo.
OIDC: Obtém a credencial usando um ARN de IdP OIDC e um token OIDC.
ChainableRamRoleArn: Cadeia de funções. Usa
source_profilepara referenciar outra credencial noconfig.jsone obtém uma nova credencial por meio de assunção de função.OAuth: Credencial obtida fazendo login na CLI usando OAuth.
CloudSSO: Credencial obtida por um usuário do CloudSSO via CLI da Alibaba Cloud.