
Um cofre para armazenar e acessar credenciais da AWS com segurança em ambientes de desenvolvimento
[!WARNING] Este projeto foi abandonado e não está mais recebendo atualizações. Se você quiser continuar recebendo atualizações ou contribuir, sinta-se à vontade para conferir o fork ativo em: https://github.com/ByteNess/aws-vault
O AWS Vault é uma ferramenta para armazenar e acessar credenciais da AWS com segurança em um ambiente de desenvolvimento.
O AWS Vault armazena credenciais IAM no keystore seguro do seu sistema operacional e, em seguida, gera credenciais temporárias a partir delas para expor ao seu shell e aplicações. Ele foi projetado para ser complementar às ferramentas da AWS CLI e reconhece seus perfis e configuração em ~/.aws/config.
Confira o post de anúncio no blog para mais detalhes.
Você pode instalar o AWS Vault:
brew install aws-vaultport install aws-vaultchoco install aws-vaultscoop install aws-vaultbrew install aws-vaultpacman -S aws-vaultemerge --ask app-admin/aws-vault (habilite o Guru primeiro)pkg install aws-vaultzypper install aws-vaultnix-env -i aws-vaultasdf plugin-add aws-vault https://github.com/karancode/asdf-aws-vault.git && asdf install aws-vault <version>Configuração, uso, dicas e truques estão disponíveis no arquivo USAGE.md.
Os backends de armazenamento suportados são:
Use a flag --backend ou a variável de ambiente AWS_VAULT_BACKEND para especificar.
# Store AWS credentials for the "jonsmith" profile
$ aws-vault add jonsmith
Enter Access Key Id: ABDCDEFDASDASF
Enter Secret Key: %%%
# Execute a command (using temporary credentials)
$ aws-vault exec jonsmith -- aws s3 ls
bucket_1
bucket_2
# open a browser window and login to the AWS Console
$ aws-vault login jonsmith
# List credentials
$ aws-vault list
Profile Credentials Sessions
======= =========== ========
jonsmith jonsmith -
# Start a subshell with temporary credentials
$ aws-vault exec jonsmith
Starting subshell /bin/zsh, use `exit` to exit the subshell
$ aws s3 ls
bucket_1
bucket_2
O aws-vault usa o serviço STS da Amazon para gerar credenciais temporárias por meio das chamadas de API GetSessionToken ou AssumeRole. Estas expiram em um curto período de tempo, então o risco de vazamento de credenciais é reduzido.
O AWS Vault então expõe as credenciais temporárias ao subprocesso de uma de duas maneiras
$ aws-vault exec jonsmith -- env | grep AWS
AWS_VAULT=jonsmith
AWS_DEFAULT_REGION=us-east-1
AWS_REGION=us-east-1
AWS_ACCESS_KEY_ID=%%%
AWS_SECRET_ACCESS_KEY=%%%
AWS_SESSION_TOKEN=%%%
AWS_CREDENTIAL_EXPIRATION=2020-04-16T11:16:27Z
$ aws-vault exec --server jonsmith -- env | grep AWS
AWS_VAULT=jonsmith
AWS_DEFAULT_REGION=us-east-1
AWS_REGION=us-east-1
AWS_CONTAINER_CREDENTIALS_FULL_URI=%%%
AWS_CONTAINER_AUTHORIZATION_TOKEN=%%%
O padrão é usar variáveis de ambiente, mas você pode optar pelo servidor de metadados de instância local com a flag --server no comando exec.
A melhor prática é criar Roles para delegar permissões. Por segurança, você também deve exigir que os usuários forneçam uma chave de uso único gerada a partir de um dispositivo de autenticação multifator (MFA).
Primeiro você precisará criar os usuários e roles no IAM, bem como configurar um dispositivo MFA. Você pode então configurar roles IAM para exigir MFA.
Aqui está um exemplo de configuração usando roles e MFA:
[default]
region = us-east-1
[profile jonsmith]
mfa_serial = arn:aws:iam::111111111111:mfa/jonsmith
[profile foo-readonly]
source_profile = jonsmith
role_arn = arn:aws:iam::22222222222:role/ReadOnly
[profile foo-admin]
source_profile = jonsmith
role_arn = arn:aws:iam::22222222222:role/Administrator
mfa_serial = arn:aws:iam::111111111111:mfa/jonsmith
[profile bar-role1]
source_profile = jonsmith
role_arn = arn:aws:iam::333333333333:role/Role1
mfa_serial = arn:aws:iam::111111111111:mfa/jonsmith
[profile bar-role2]
source_profile = bar-role1
role_arn = arn:aws:iam::333333333333:role/Role2
mfa_serial = arn:aws:iam::111111111111:mfa/jonsmith
Aqui está o que você pode esperar do aws-vault
| Command | Credentials | Cached | MFA |
|---|---|---|---|
aws-vault exec jonsmith --no-session | Long-term credentials | No | No |
aws-vault exec jonsmith | session-token | session-token | Yes |
aws-vault exec foo-readonly | role | No | No |
aws-vault exec foo-admin | session-token + role | session-token | Yes |
aws-vault exec foo-admin --duration=2h | role | role | Yes |
aws-vault exec bar-role2 | session-token + role + role | session-token | Yes |
aws-vault exec bar-role2 --no-session | role + role | role | Yes |