Dès que vous commencez à travailler avec plusieurs projets ou organisations dans le cloud AWS, la première question que vous pouvez vous poser est de savoir comment gérer les informations d'identification awscli et comment les utiliser facilement et en toute sécurité pour obtenir accès à tous vos comptes et environnements AWS. Cet article couvrira aws-vault - un outil pour stocker et accéder en toute sécurité aux informations d'identification AWS dans un environnement de développement.
Le problème
Je n'ai toujours pas été un grand fan de ~/.aws/credentials
fichier, car chaque fois que je venais chez un nouveau client, je devais ouvrir ce fichier pour le modifier afin d'ajouter de nouvelles informations d'identification. En conséquence, j'avais constamment l'impression d'afficher toutes mes informations d'identification existantes sur toutes les caméras de sécurité du bureau. Que Dieu bénisse l'inventeur des écrans de confidentialité !
Le deuxième problème avec les informations d'identification est qu'elles doivent être renouvelées de temps à autre. Plus vous avez de comptes, plus vous consacrez d'efforts à la rotation des informations d'identification.
Et le troisième problème - assume des rôles dans les sessions de terminal et travaille dans plusieurs environnements différents en même temps.
Solution
Comme solution aux deux premiers problèmes, il n'y a pas si longtemps, j'ai commencé à utiliser :
- aws-vault – Gestionnaire d'informations d'identification AWS.
Pour résoudre les deux derniers problèmes, j'ai trouvé que la pile d'outils suivante répondait à la plupart de mes besoins :
- zsh et oh-my-zsh – terminal.
- zsh-aws-vault – Mise en surbrillance de l'environnement AWS pour la session de terminal.
Gestion des informations d'identification AWS
Voici un guide de démarrage rapide.
Installation
Je suppose ici que vous avez déjà zsh
et oh-my-zsh
installée. 😎
Installons aws-vault
. Voici la liste complète des étapes d'installation pour la plupart des plates-formes disponibles.
Nous ferons tout pour OS X (macOS) :
brew cask install aws-vault
Choisir le backend aws-vault
aws-vault prend en charge plusieurs backends pour stocker vos informations d'identification. Ma préférence est d'utiliser un fichier crypté. Vous devez donc ajouter la variable suivante à votre ~/.zshrc
:
export AWS_VAULT_BACKEND="file"
Déplacement des identifiants vers aws-vault
Ouvrez maintenant votre ~/.aws/credentials
dossier. Pour chaque profil existant, ajoutez des informations d'identification à aws-vault
.
cat ~/.aws/credentials
aws-vault add profile_1
aws-vault add profile_2
Maintenant, aws-vault a AWS_VAULT_FILE_PASSPHRASE
variable, qui peut être utilisée pour arrêter aws-vault de demander votre mot de passe de coffre-fort encore et encore. Il existe deux façons de l'utiliser :
Moyen non sécurisé
Ajoutez la variable suivante à votre ~/.zshrc
ou ~/.bashrc
fichier, pour empêcher aws-vault de demander votre mot de passe à chaque fois :
export AWS_VAULT_FILE_PASSPHRASE="my_strong_password"
Chemin sécurisé
Au lieu de stocker AWS_VAULT_FILE_PASSPHRASE
variable dans .*rc
fichiers, vous pouvez créer AWS Systems Manager Parameter Store SecureString
paramètre, qui contient votre aws-vault
mot de passe :
aws ssm put-parameter \
--name '/laptop/aws-vault/password' \
--description 'aws-vault password on my laptop' \
--value 'my_super_secret_password' \
--type SecureString
Créons un script wrapper, qui appellera aws-vault call aws-vault et configurera AWS_VAULT_FILE_PASSPHRASE
avec une valeur nécessaire d'AWS Systems Manager Parameter Store :
mkdir -p $HOME/bin
cat > $HOME/bin/call-aws-vault.sh <<- EOF
#!/usr/bin/env bash
export PROFILE=$1
export AWS_VAULT_FILE_PASSPHRASE=$(aws ssm get-parameters --profile default --names '/laptop/aws-vault/password' --with-decryption --query 'Parameters[0].Value' --output text)
aws-vault exec -j $PROFILE
EOF
chmod +x $HOME/bin/call-aws-vault.sh
Vous pouvez maintenant utiliser ce wrapper à ~/.aws/config
comme ça :
[profile my_new_profile]
credential_process = ~/bin/call-aws-vault.sh my_new_profile
Vous pouvez renommer ~/.aws/credentials et plus tard, supprimez-le complètement dès que vous avez tout testé.
Changer de profil AWS
Pour lister tous vos profils AWS, tapez simplement :
aws-vault list
Génial, vous pouvez désormais facilement changer d'environnement et voir où vous travaillez :
aws-vault exec --duration 8h default
Voici à quoi cela ressemble finalement :
Approche basée sur les rôles
Eh bien, d'accord, nous venons de déplacer toutes nos informations d'identification AWS vers un coffre-fort sécurisé et de configurer notre terminal pour afficher notre aws-vault actuel session. Il est maintenant temps de discuter de la manière dont nous pouvons encore améliorer la solution.
Organisation multi-comptes
L'une des meilleures pratiques pour organiser l'accès des utilisateurs AWS à différents comptes AWS consiste à gérer tous les utilisateurs IAM dans un compte AWS et à fournir l'accès à d'autres comptes AWS en leur permettant d'utiliser des rôles (sts:AssumeRole
appel API) à partir de ces comptes.
Voici l'exemple typique d'une organisation AWS :
AWS a fourni une excellente explication sur Comment utiliser un seul utilisateur IAM pour accéder facilement à tous vos comptes à l'aide de l'AWS CLI dans son article de blog, décrivant le processus consommateur de rôles et la configuration awscli. Je ne vais pas les copier-coller. Au lieu de cela, nous nous concentrerons sur le aws-vault configuration pour faire quelque chose de similaire, mais sans ~/.aws/credentials fichier.
En supposant que vous disposiez déjà de toutes les subventions et autorisations nécessaires entre vos comptes. Si ce n'est pas le cas, voici l'excellent article sur ce sujet : Tutoriel :Déléguer l'accès entre les comptes AWS à l'aide de rôles IAM.
Configuration du profil par défaut
Vous devriez déjà avoir votre valeur par défaut configuration du profil en place dans le fichier. Probablement, ça ressemble à ça :
[profile default]
region = us-east-1
Configurons aws-vault comme source d'informations d'identification pour notre profil par défaut :
[profile default]
region = us-east-1
credential_process = /usr/local/bin/aws-vault exec -j default
Désormais, si vous accordez des autorisations à votre utilisateur ou à votre rôle depuis par défaut profil pour assumer le rôle AWS à partir d'un autre compte, vous pourrez spécifier une nouvelle configuration de profils comme celle-ci :
[profile default]
region = us-east-1
credential_process = /usr/local/bin/aws-vault exec -j default
mfa_serial = arn:aws:iam:::mfa/admin
[profile default]
region = us-east-1
credential_process = /usr/local/bin/aws-vault exec -j default
mfa_serial = arn:aws:iam:::mfa/admin
[profile account_1_role_admin]
region = us-east-1
role_arn = arn:aws:iam:::role/admin
source_profile = default
[profile account_2_role_qa]
region = us-east-1
role_arn = arn:aws:iam:::role/qa
source_profile = default
source_profile l'option de configuration indiquera awscli quel compte utiliser pour saisir un rôle pour un profil donné.
Tests
Le moyen le plus rapide de tester que vous êtes capable d'assumer le rôle est d'appeler :
aws sts get-caller-identify
Vous devriez voir quelque chose de similaire pour votre default
profil :
{
"UserId": "AIDDRCTFVGBHNJMGF3WI7R",
"Account": "01234567890",
"Arn": "arn:aws:iam::01234567890:user/admin"
}
Pour tester tout autre appel de profil :
aws sts get-caller-identity --profile account_1_role_admin
Vous devriez voir une sortie semblable à la suivante :
{
"UserId": "AROALKJHGFGDFV3IR2VSI:botocore-session-1584897134",
"Account": "012345678901",
"Arn": "arn:aws:sts::012345678901:assumed-role/admin/botocore-session-1584897134"
}
Assumer le rôle de compte AWS
Pour assumer le rôle à partir de n'importe quel compte AWS que vous avez dans votre aws-vault, exécutez les commandes suivantes :
aws-vault ls
aws-vault exec --duration 8h default
Ici, nous assumons un rôle associé au profil par défaut pendant 8 heures.
Bonus :connexion à la console Web AWS sans mot de passe
En guise de petit bonus pour ceux d'entre vous qui ont terminé, voici comment se connecter à la console Web AWS pour chaque profil donné :
aws-vault ls
aws-vault login --duration 8h default
Résumé
Utiliser zsh , aws-vault , et AWS sts:AssumeRole
ensemble peuvent considérablement simplifier et sécuriser la gestion de plusieurs comptes AWS et de leurs informations d'identification.
Si vous aimez l'article, n'hésitez pas à le diffuser dans le monde entier. Et bien sûr, si vous avez des questions, des suggestions ou des commentaires, n'hésitez pas à utiliser Disqus ci-dessous.
Restez à l'écoute !