Melhores Práticas para Gerenciar Credenciais com Segurança Usando o AWS CLI
Aprenda as melhores práticas definitivas para proteger suas credenciais do AWS CLI. Este guia abrange a ordem de carregamento de credenciais, o uso adequado de arquivos de configuração, variáveis de ambiente e, crucialmente, como alavancar funções IAM e AWS SSO para eliminar o risco de armazenar chaves de acesso estáticas de longa duração. Implemente estas estratégias para alcançar segurança robusta em seus fluxos de trabalho de automação e gerenciamento da AWS.
Melhores Práticas para Gerenciar Credenciais com Segurança na AWS CLI
As credenciais da AWS CLI podem criar, excluir e expor recursos reais na nuvem, portanto, uma chave de acesso vazada não é um erro pequeno. A configuração mais segura fornece aos humanos credenciais de curta duração por meio do IAM Identity Center e concede às cargas de trabalho credenciais temporárias por meio de funções.
Estas melhores práticas para gerenciar credenciais com segurança na AWS CLI explicam onde a CLI procura por credenciais, quando usar perfis e como evitar chaves estáticas de longa duração em scripts.
Entendendo a Ordem de Carregamento de Credenciais da AWS CLI
A AWS CLI resolve as credenciais por meio de uma cadeia de provedores. A cadeia exata pode variar de acordo com a versão da CLI e a configuração, mas a ordem prática que você encontrará com mais frequência é:
- Variáveis de Ambiente:
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEYe, opcionalmente,AWS_SESSION_TOKEN. - Configuração de assumir função e identidade web: Perfis que instruem a CLI a chamar a AWS STS para obter credenciais temporárias.
- Credenciais do IAM Identity Center: Perfis criados por
aws configure ssoouaws configure sso-session. - Arquivo de credenciais compartilhado: Geralmente
~/.aws/credentials. - Arquivo de configuração compartilhado: Geralmente
~/.aws/config, incluindo entradascredential_process. - Credenciais de contêiner: Funções de tarefa ECS e endpoints de credenciais de contêiner compatíveis.
- Credenciais de perfil de instância EC2: Credenciais temporárias do Serviço de Metadados de Instância (IMDS).
A AWS CLI não usa os sinalizadores de linha de comando --access-key-id ou --secret-access-key para comandos normais. Se você os vir em um script, provavelmente está confundindo o comportamento da AWS CLI com outra ferramenta ou SDK.
1. Protegendo Credenciais em Arquivos de Configuração (~/.aws/credentials)
O arquivo de credenciais compartilhado, tipicamente ~/.aws/credentials, é conveniente, mas deve ser um fallback para casos em que você não pode usar o IAM Identity Center ou funções. Se você precisar armazenar chaves estáticas lá, proteja o arquivo e mantenha as permissões restritas.
Proteção e Permissões do Arquivo
É 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 as credenciais para diferentes ambientes (por exemplo, desenvolvimento, homologação, produção) ou diferentes contas. Isso evita ações acidentais entre ambientes.
Exemplo de ~/.aws/credentials:
[default]
aws_access_key_id = AKIAEXAMPLE000000000
aws_secret_access_key = exampleSecretAccessKeyDoNotUse
[production-user]
aws_access_key_id = AKIAEXAMPLE111111111
aws_secret_access_key = anotherExampleSecretDoNotUse
Ao usar um perfil nomeado, você deve especificá-lo com o sinalizador --profile:
aws s3 ls --profile production-user
2. Aproveitando Variáveis de Ambiente
As variáveis de ambiente fornecem credenciais ao processo atual e seus processos filhos sem editar os arquivos de configuração da AWS. Elas são úteis para sessões temporárias e trabalhos de CI, mas ainda podem vazar por meio de ambientes de processo, logs de depuração ou histórico de shell descuidado.
Defina as seguintes variáveis em sua sessão de shell:
export AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
export AWS_SESSION_TOKEN="temporary-session-token-if-using-sts"
export AWS_DEFAULT_REGION="us-east-1"
Nota Importante sobre Precedência: As credenciais definidas por meio de 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: Tenha cuidado ao exportar variáveis de ambiente, especialmente em terminais compartilhados ou scripts que possam ser registrados em log. Sempre remova-as imediatamente após o uso:
unset AWS_ACCESS_KEY_ID unset AWS_SECRET_ACCESS_KEY unset AWS_SESSION_TOKEN
3. Prefira Funções IAM para Cargas de Trabalho AWS
Para cargas de trabalho executadas na infraestrutura AWS, como EC2, Lambda, ECS e EKS, evite credenciais estáticas. Use funções IAM para que a AWS emita credenciais temporárias automaticamente.
No EC2, um perfil de instância expõe credenciais temporárias por meio do IMDS. No ECS, as funções de tarefa expõem credenciais por meio do endpoint de credenciais do contêiner. No EKS, as Funções IAM para Contas de Serviço usam tokens de identidade web. A AWS CLI e os SDKs sabem como usar esses provedores sem armazenar chaves de longa duração em disco.
Como Funciona:
- Uma instância EC2 é iniciada com uma função IAM associada por meio de um perfil de instância.
- A CLI em execução nessa instância consulta o Serviço de Metadados de Instância (IMDS) para obter credenciais temporárias.
- A CLI usa essas credenciais temporárias para todas as chamadas de API subsequentes.
Isso elimina completamente o risco associado a chaves de acesso de longa duração.
4. Use o IAM Identity Center para Acesso Humano
Para engenheiros que usam a AWS CLI em laptops, o IAM Identity Center geralmente é mais seguro do que as chaves de acesso de usuário IAM. Você faz login por meio de um navegador, escolhe uma conta e função, e a CLI usa credenciais armazenadas em cache de curta duração.
Configure-o com:
aws configure sso
Em seguida, faça login quando sua sessão expirar:
aws sso login --profile <nome-do-perfil>
O IAM Identity Center era anteriormente chamado de AWS SSO, então você ainda pode ver sso em comandos da CLI e chaves de configuração.
5. Use credential_process para Corretores Externos
Você pode configurar a CLI para chamar uma ferramenta externa, como um agente de cofre ou corretor de credenciais empresarial, para buscar credenciais dinamicamente. Isso é especificado em ~/.aws/config:
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 das Melhores Práticas e Lista de Verificação
Para maximizar a segurança de suas operações na AWS CLI, siga estes princípios fundamentais:
- Princípio do Menor Privilégio: Garanta que todos os usuários e funções IAM tenham apenas as permissões estritamente necessárias para realizar suas tarefas.
- Prefira Funções em vez de Chaves: Sempre use Funções IAM (Perfis de Instância) ao operar dentro da infraestrutura AWS.
- Use o IAM Identity Center: Para uso interativo humano, use o IAM Identity Center para gerenciar o acesso a várias contas.
- Nunca Codifique Chaves: 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. - Gire as Chaves Regularmente: Se chaves estáticas precisarem ser usadas, imponha um cronograma de rotação rigoroso.
Seu padrão deve ser credenciais temporárias: IAM Identity Center para pessoas, funções IAM para cargas de trabalho e credential_process para acesso empresarial intermediado. Use chaves de acesso estáticas apenas quando não houver uma opção melhor; nesse caso, limite-as rigidamente, gire-as e remova-as assim que a dependência desaparecer.