Melhores Práticas para Gerenciar Credenciais com Segurança Usando o AWS CLI
Gerenciar credenciais com segurança é fundamental ao interagir com a Amazon Web Services (AWS) através da Interface de Linha de Comando (CLI). As chaves de acesso (ID da Chave de Acesso e Chave de Acesso Secreta) concedem acesso programático aos seus recursos de nuvem, tornando o seu comprometimento um risco de segurança significativo. Este artigo descreve as melhores práticas essenciais para armazenar, gerenciar e utilizar essas credenciais para minimizar a exposição e manter uma postura de segurança robusta ao automatizar tarefas ou gerenciar recursos via CLI.
O AWS CLI depende de métodos específicos para localizar credenciais. Compreender esses métodos — desde arquivos de configuração até variáveis de ambiente e Perfis IAM (IAM Roles) — é o primeiro passo para proteger seu ambiente. Exploraremos a ordem de precedência recomendada e destacaremos alternativas modernas e mais seguras para codificar segredos diretamente (hardcoding).
Compreendendo a Ordem de Carregamento de Credenciais do AWS CLI
O AWS CLI resolve credenciais usando uma hierarquia definida. Conhecer essa ordem ajuda você a entender onde o CLI procura por credenciais primeiro e garante que sua configuração pretendida, a mais segura, tenha precedência.
O CLI verifica credenciais na seguinte ordem (da prioridade mais alta para a mais baixa):
- Opções da Linha de Comando: Credenciais passadas diretamente via flags (
--access-key-ide--secret-access-key). - Variáveis de Ambiente: Credenciais definidas na sessão shell atual.
- Processo de Credencial (Credential Process): A saída de um processo de credencial configurado (muitas vezes usado por SSO ou ferramentas externas).
- Cadeia de Provedores de Credenciais AWS (AWS Credential Provider Chain): Esta cadeia verifica o seguinte em ordem:
a. Credenciais de um perfil IAM atribuído à instância EC2 ou tarefa ECS em execução.
b. Credenciais armazenadas no arquivo de credenciais compartilhado (~/.aws/credentials). - Arquivo de Configuração: Se nenhuma credencial for encontrada, o CLI interromperá a busca.
Dica de Segurança: Não é recomendado depender de flags de linha de comando para uso regular, pois o histórico de comandos (
.bash_history) pode expor informações confidenciais.
1. Protegendo Credenciais em Arquivos de Configuração (~/.aws/credentials)
Por padrão, o AWS CLI armazena credenciais no arquivo de credenciais compartilhado, tipicamente localizado em ~/.aws/credentials. Embora conveniente, este arquivo deve ser protegido.
Proteção e Permissões de Arquivos
É vital restringir o acesso de leitura a este arquivo. Em sistemas Linux/macOS, defina as permissões para que apenas o proprietário possa ler ou gravar o arquivo:
chmod 600 ~/.aws/credentials
Usando Perfis para Segregação
Usar perfis distintos permite separar credenciais para diferentes ambientes (por exemplo, desenvolvimento, homologação, produção) ou contas diferentes. Isso evita ações acidentais entre ambientes.
Exemplo de ~/.aws/credentials:
[default]
aws_access_key_id = AKIABCDEFGHIJKLMNO
aws_secret_access_key = xYzdEfGhIjKlMnOpQrStUvWxYz1234567890
[production-user]
aws_access_key_id = AKIA9876543210ZYXWVU
aws_secret_access_key = aBcDeFgHiJkLmNoPqRsTuVwXyZ9876543210
Ao usar um perfil nomeado, você deve especificá-lo com a flag --profile:
aws s3 ls --profile production-user
2. Aproveitando Variáveis de Ambiente
Variáveis de ambiente oferecem uma maneira dinâmica de fornecer credenciais à sessão do CLI sem gravá-las no disco. Isso é frequentemente preferido para acesso temporário ou dentro de ambientes de script onde a gravação em disco é restrita ou indesejável.
Defina as seguintes variáveis em sua sessão shell:
export AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
export AWS_DEFAULT_REGION="us-east-1"
Nota Importante sobre Precedência: Credenciais definidas via variáveis de ambiente sempre substituem aquelas encontradas no arquivo ~/.aws/credentials, pois aparecem mais acima na cadeia de carregamento de credenciais.
Aviso de Segurança: Seja cauteloso ao exportar variáveis de ambiente, especialmente em terminais compartilhados ou scripts que podem ser registrados (logged). Sempre desfaça a definição (unset) delas imediatamente após o uso:
bash unset AWS_ACCESS_KEY_ID unset AWS_SECRET_ACCESS_KEY
3. O Método Mais Seguro: Perfis IAM (IAM Roles) (Perfis de Instância/Identidade Web)
Para workloads (cargas de trabalho) em execução na infraestrutura AWS (como instâncias EC2, funções Lambda ou tarefas ECS), a prática mais segura é nunca usar credenciais estáticas. Em vez disso, use Perfis IAM (IAM Roles).
Os Perfis IAM permitem atribuir credenciais de segurança temporárias e rotacionadas automaticamente ao recurso por meio do serviço de metadados de instância (instance metadata service). O AWS CLI detecta e usa automaticamente essas credenciais sem que elas sejam armazenadas no disco ou em variáveis de ambiente.
Como Funciona:
- Uma instância EC2 é iniciada com um Perfil IAM associado.
- O CLI em execução nessa instância consulta o Serviço de Metadados da Instância (IMDS) em busca de credenciais temporárias.
- O CLI usa essas credenciais temporárias para todas as chamadas de API subsequentes.
Isso elimina totalmente o risco associado a chaves de acesso de longa duração.
4. Utilizando o Processo de Credencial e SSO
O gerenciamento moderno de credenciais depende cada vez mais de provedores de autenticação externos, frequentemente integrados via configuração credential_process.
AWS SSO (Single Sign-On)
O AWS SSO oferece uma maneira unificada de gerenciar o acesso em várias contas e perfis usando provedores de identidade (IdPs) existentes. O AWS CLI se integra perfeitamente ao SSO, abstraindo o gerenciamento de tokens de sessão temporários.
Para começar a usar o SSO, você primeiro executa o comando de login:
aws sso login --profile <profile-name>
Isso abre uma janela do navegador para autenticação. Após o sucesso, o CLI armazena os tokens de sessão necessários, muitas vezes utilizando o mecanismo credential_process internamente para atualizar tokens automaticamente, o que significa que você não lida com chaves secretas brutas.
Configurando o credential_process
Você pode configurar o CLI para chamar uma ferramenta externa (como um agente de vault ou um auxiliar SSO) para buscar credenciais dinamicamente. Isso é especificado no arquivo de configuração:
Exemplo de ~/.aws/config:
[profile my-vault-profile]
region = us-west-2
credential_process = /usr/local/bin/my-vault-cli get-aws-creds --profile my-vault-profile
Este método é crucial ao integrar com ferramentas de gerenciamento de segredos como o HashiCorp Vault.
Resumo e Lista de Verificação de Melhores Práticas
Para maximizar a segurança das suas operações no AWS CLI, adira a estes princípios centrais:
- Princípio do Menor Privilégio: Garanta que todos os usuários e perfis IAM tenham apenas as permissões estritamente necessárias para realizar suas tarefas.
- Prefira Perfis a Chaves: Sempre use Perfis IAM (Perfis de Instância) ao operar dentro da infraestrutura AWS.
- Use SSO: Para uso interativo humano, utilize o AWS SSO para gerenciar o acesso a múltiplas contas.
- Nunca Codifique Chaves Diretamente (Hardcode): Evite colocar Chaves de Acesso diretamente em scripts, código-fonte ou histórico de comandos.
- Proteja o Arquivo de Credenciais: Restrinja as permissões do sistema de arquivos (
chmod 600) em~/.aws/credentials. - Rode Chaves Regularmente: Se chaves estáticas precisarem ser usadas, imponha um cronograma rigoroso de rotação.
Ao priorizar métodos de aquisição dinâmica de credenciais, como Perfis IAM e SSO, em vez de chaves de acesso estáticas armazenadas em disco, você reduz significativamente a superfície de ataque associada ao uso do seu AWS CLI.