GNU/Linux >> Tutoriels Linux >  >> Linux

Comment utiliser aws-vault pour accéder en toute sécurité à plusieurs comptes AWS

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-vaultAWS_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 zshaws-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 !


Linux
  1. Comment créer plusieurs comptes d'utilisateurs sous Linux

  2. Comment utiliser le tunneling SSH pour accéder aux serveurs restreints

  3. Comment utiliser AWS CLI pour gérer Amazon S3

  4. Comment utiliser plusieurs versions de Node.js à l'aide de NVM

  5. Comment utiliser l'option de chemin d'unisson avec plusieurs chemins ?

Comment utiliser Cloudformation pour créer des files d'attente SQS sur AWS

Comment utiliser plusieurs comptes Skype simultanément sous Linux

Comment utiliser aws-vault pour accéder en toute sécurité à plusieurs comptes AWS

Comment accéder et utiliser Patchman dans Plesk

Comment accéder aux comptes de messagerie Hostinger dans cPanel ?

Comment effacer les informations d'identification dans AWS Configure ?