Credenciais de acesso vazadas podem comprometer recursos de cloud e operações de negócios. Proteja suas credenciais escolhendo o método de autenticação certo para cada cenário de implantação.
O que é uma credencial de acesso?
Uma credencial de acesso verifica sua identidade quando você usa ferramentas de desenvolvimento (API, CLI, SDK ou Terraform) para acessar a Alibaba Cloud.
Par de AccessKey: Composto por um AccessKey ID e um AccessKey secret. Esta é uma credencial permanente para contas da Alibaba Cloud e usuários do RAM. Create an AccessKey pair.
Token STS: Um token do Security Token Service (STS) é uma credencial temporária emitida para uma função do RAM com um período de validade e escopo de permissão personalizados. What is STS?.
Causas comuns de vazamento de credenciais
Pares de AccessKey codificados (hardcoded) no código da aplicação ficam expostos a qualquer pessoa com acesso de leitura ao repositório e se tornam públicos se o código for enviado para comunidades open source ou services de hospedagem de código.
Pares de AccessKey embutidos no código do lado do cliente podem ser extraídos através da descompilação da aplicação.
Documentações técnicas ou materiais compartilhados contêm informações de pares de AccessKey.
Códigos de exemplo na documentação do product contêm informações de pares de AccessKey.
Respostas de API que não possuem controles de permissão adequados retornam informações de credenciais de acesso.
Métodos seguros para usar credenciais de acesso
Minimize o tempo e o escopo de exposição das credenciais. Escolha um método seguro com base no seu cenário de implantação.
|
Método |
Cenário |
|
Aplicações implantadas em um cluster ACK. O RRSA isola as permissões no nível da função do RAM para que cada aplicação assuma uma função exclusiva. |
|
|
Aplicações implantadas em uma instância ECS. A instância assume uma função do RAM para acessar a OpenAPI da Alibaba Cloud. |
|
|
Equipes de desenvolvimento, operações e products que precisam de credenciais para O&M, gerenciamento ou depuração. Use o SSO baseado em função para assumir uma função do RAM e obter um token STS. |
|
|
Aplicações implantadas no Function Compute (FC) que precisam acessar outros recursos de cloud. Associe a função do FC a uma função do RAM para usar um token STS em vez de credenciais permanentes. |
|
|
Cenários onde as soluções anteriores não se aplicam. Armazene as credenciais em variáveis de ambiente do sistema. |
Usar RAM Roles for Service Accounts (RRSA)
Pré-requisitos
Este método se aplica a cloud services that support RAM.
-
Versão do cluster: Kubernetes 1.22 ou posterior, em um cluster gerenciado ACK (Basic ou Pro), cluster ACK Serverless (Basic ou Pro) ou cluster ACK Edge (apenas Pro).
É necessário usar o Alibaba Cloud SDK V2.0.
SDKs personalizados para products de gateway autogerenciados não podem ser usados.
Como funciona

Como o RRSA funciona
Sem o RRSA, qualquer pod em um nó pode ler as credenciais da função da instância ECS através dos metadados da instância e herdar todas as permissões concedidas a essa função. Para restringir as permissões do RAM por aplicação, impeça que as aplicações recuperem as credenciais temporárias da função da instância através dos metadados da instância ECS ou ECI, ou não anexe nenhuma política de permissão do RAM à função da instância.
O RRSA resolve isso vinculando uma função do RAM a uma conta de service do Kubernetes. Quando um pod é iniciado, ele recebe um token OIDC com escopo para sua conta de service, chama a API AssumeRoleWithOIDC e recebe um token STS com escopo de função para acesso à API de cloud.
O fluxo de autenticação:
Injeção de token: Quando um pod é iniciado, o ACK usa a projeção de volume de token da conta de service para montar um arquivo de token OIDC com escopo para a conta de service do pod.
Assumir função: A aplicação chama a API
AssumeRoleWithOIDCusando este token OIDC.Receber credenciais STS: O STS valida o token OIDC em relação ao provedor OIDC registrado e retorna credenciais com escopo para a função do RAM.
Acessar recursos: O pod usa as credenciais STS de curta duração para acessar as APIs autorizadas da Alibaba Cloud.
Os tokens OIDC têm curta duração. Leia o token do arquivo em cada solicitação de autenticação — não o armazene em cache. O ACK renova os tokens automaticamente antes do vencimento.
Quando o RRSA está ativado, o ACK automaticamente:
Cria um emissor OIDC dedicado para o cluster.
Atualiza a configuração
service-account-issuerdo cluster, mesclando o novo emissor OIDC ao valor existente.Cria um provedor de identidade OIDC (IdP) na sua conta, chamado
ack-rrsa-<cluster_id>, configurado para single sign-on (SSO) com o emissor OIDC do cluster.
Procedimento
Enable RRSA para o seu cluster ACK.
Use RRSA no seu cluster ACK.
Exemplos de código
O Alibaba Cloud SDK V2.0 suporta autenticação de token OIDC do RRSA. Qualquer SDK de service de cloud construído na V2.0 que suporte tokens STS também suporta o RRSA.
|
Linguagem |
Versão |
Demo |
|
Go |
Alibaba Cloud Credentials for Go 1.2.6 ou posterior. Para instruções, consulte Method 6: Use OIDCRoleArn. |
|
|
Java |
Alibaba Cloud Credentials for Java 0.2.10 ou posterior. Para instruções, consulte Method 6: OIDC role ARN. |
|
|
Python 3 |
Alibaba Cloud Credentials for Python 0.3.1 ou posterior. Para instruções, consulte Manage access credentials. |
|
|
Node.js / TypeScript |
Alibaba Cloud Credentials for TypeScript/Node.js 2.2.6 ou posterior. Para instruções, consulte Method 6: Use OIDCRoleArn. |
Usar uma função do RAM de instância
Pré-requisitos
Este método se aplica a cloud services that support RAM.
É necessário usar o Alibaba Cloud SDK V2.0.
SDKs personalizados para products de gateway autogerenciados não podem ser usados.
Como funciona
Você pode anexar uma função do RAM (Resource Access Management) de instância a uma instância do Elastic Compute Service (ECS). Em seguida, a instância ECS pode usar a credencial temporária do Security Token Service (STS) da função do RAM da instância para acessar as APIs de outros services da Alibaba Cloud. A credencial temporária do STS é atualizada periodicamente. Isso garante a segurança do seu par de AccessKey e implementa controle de acesso e gerenciamento de permissões de granularidade fina usando o RAM.

Fluxo de trabalho:
A aplicação recupera um token STS acessando o instance metadata do ECS.
A aplicação usa o token STS para acessar recursos de cloud. What is STS?.
Procedimento
Atribua uma função do RAM a uma instância ECS. Instance RAM roles.
Exemplos de código
O Alibaba Cloud Credentials simplifica o uso da função do RAM de instância. Estes exemplos chamam a operação DescribeRegions do ECS com uma função do RAM de instância.
|
Linguagem de programação |
Exemplo de código |
|
Go |
|
|
Java |
|
|
Python |
|
|
PHP |
|
|
Node.js |
|
|
.NET |
Assunção de função em cadeia entre contas
Se a sua aplicação em uma instância ECS precisar acessar recursos em outra conta da Alibaba Cloud, você pode usar a assunção de função em cadeia entre contas para obter acesso sem armazenar um par de AccessKey.
Como funciona
A instância ECS primeiro obtém credenciais temporárias para sua própria função do RAM de instância a partir dos metadados da instância. Em seguida, usa essas credenciais para chamar sts:AssumeRole para assumir uma função do RAM na conta de destino e obter um token STS para a conta de destino. Esse processo é chamado de assunção de função em cadeia.
Procedimento
Na conta de destino, crie uma função do RAM. Defina
Principal.RAMna política de confiança da função para o Alibaba Cloud Resource Name (ARN) da função do RAM de instância na conta de origem, por exemplo,acs:ram::<source-account-id>:role/<instance-role-name>. Conceda a essa função as permissões de que a aplicação precisa.Na função do RAM de instância na conta de origem, anexe uma política de permissão que conceda a permissão
sts:AssumeRole. Você pode usar a política do sistemaAliyunSTSAssumeRoleAccess.Na instância ECS, use a ferramenta Alibaba Cloud Credentials para realizar a assunção de função em cadeia. A ferramenta primeiro obtém as credenciais temporárias da função do RAM de instância a partir dos metadados da instância. Em seguida, usa essas credenciais para chamar
sts:AssumeRolepara assumir a função do RAM na conta de destino e obter um token STS entre contas.
Token STS para desenvolvimento e depuração
Cenário
Para equipes de desenvolvimento, operações e products que precisam de credenciais para O&M, gerenciamento ou depuração, use o SSO baseado em função para assumir uma função do RAM e obter um token STS em vez de um par de AccessKey permanente.
Procedimento
Para cenários de conta única, recomendamos que você configure SAML-based role SSO dentro da conta de cloud e atribua funções do RAM aos funcionários com base em suas funções de trabalho. Os funcionários podem então usar a ferramenta saml2alibabacloud na linha de comando para obter um token STS após a autenticação com o provedor de identidade (IdP).
Para cenários de várias contas, recomendamos que você use o CloudSSO para configure single sign-on for multiple accounts. Após a configuração, os funcionários podem use the CLI to log on to CloudSSO and access Alibaba Cloud resources.
Usar um token STS no Function Compute
Cenário
Em vez de codificar (hardcode) o par de AccessKey de um usuário do RAM em uma função do FC, associe a função a uma função do RAM. A aplicação então usa um token STS para acessar recursos de cloud, evitando vazamentos de credenciais permanentes.
Arquitetura da solução
As funções de função do FC gerenciam credenciais temporárias em tempo de execução, evitando a exposição de longo prazo do par de AccessKey. Configure a função e as permissões uma vez; as funções obtêm credenciais temporárias automaticamente.
Um administrador cria uma função confiável pelo Function Compute e concede a ela as permissões necessárias (1), e então associa a função à função do FC (2). A aplicação recupera um token STS do contexto da função (3). Durante esse processo, o Function Compute chama o AssumeRole para obter o token STS do RAM/STS (i). A aplicação usa o token STS para chamar a API do recurso de cloud de destino (4), e a API do recurso retorna o resultado para a aplicação cliente.

Procedimento
Grant Function Compute permissions to access other Alibaba Cloud services.
Configurar variáveis de ambiente do sistema
Procedimento
Configure as variáveis de ambiente ALIBABA_CLOUD_ACCESS_KEY_ID e ALIBABA_CLOUD_ACCESS_KEY_SECRET.
<ACCESS_KEY_ID>
Exemplos de código do Alibaba Cloud SDK
Os SDKs da Alibaba Cloud criam uma credencial padrão a partir das variáveis de ambiente ALIBABA_CLOUD_ACCESS_KEY_ID e ALIBABA_CLOUD_ACCESS_KEY_SECRET e a usam para autenticar solicitações automaticamente. Estes exemplos chamam a operação DescribeRegions do ECS.
|
Linguagem de programação |
Exemplo de código |
|
Go |
|
|
Java |
|
|
Python |
|
|
PHP |
|
|
Node.js |
|
|
.NET |
Exemplo de código genérico
Se você não puder usar os SDKs da Alibaba Cloud (por exemplo, SDKs personalizados para products de gateway autogerenciados), carregue as variáveis de ambiente diretamente. Exemplo em Java:
import com.aliyun.credentials.Client;
import com.aliyun.credentials.models.Config;
public class DemoTest {
public static void main(String[] args) throws Exception{
Config config = new Config();
// Specify the type of credential you want to use.
config.setType("access_key");
// The AccessKeyId of your RAM user.
config.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
// The AccessKeySecret of your RAM user.
config.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
Client client = new Client(config);
}
}
Remediar credenciais vazadas
Vazamento de par de AccessKey: Remediate a compromised AccessKey pair.
Vazamento de token STS: What do I do if an STS token is leaked?.
Referências
Melhores práticas de segurança de cloud relacionadas: