Sobald Sie anfangen, mit mehr als einem Projekt oder einer Organisation in der AWS-Cloud zu arbeiten, stellen Sie sich möglicherweise zuerst die Frage, wie Sie awscl-Anmeldeinformationen verwalten und wie Sie sie einfach und sicher erhalten müssen Zugriff auf alle Ihre AWS-Konten und -Umgebungen. Dieser Artikel behandelt aws-vault – ein Tool zum sicheren Speichern und Zugreifen auf AWS-Anmeldeinformationen in einer Entwicklungsumgebung.
Das Problem
Ich war schon immer kein großer Fan von ~/.aws/credentials
Datei, denn jedes Mal, wenn ich zu einem neuen Kunden kam, musste ich diese Datei für die Bearbeitung öffnen, um neue Anmeldeinformationen hinzuzufügen. Infolgedessen hatte ich ständig das Gefühl, dass ich alle meine vorhandenen Ausweise allen Überwachungskameras im Büro vorzeigte. Gott, segne den Erfinder des Sichtschutzes!
Das zweite Problem mit Anmeldeinformationen besteht darin, dass sie von Zeit zu Zeit erneuert werden müssen. Je mehr Konten Sie haben, desto mehr Aufwand investieren Sie in die Rotation der Anmeldeinformationen.
Und das dritte Problem besteht darin, Rollen in Terminalsitzungen zu übernehmen und gleichzeitig in mehreren verschiedenen Umgebungen zu arbeiten.
Lösung
Als Lösung für die ersten beiden Probleme habe ich vor nicht allzu langer Zeit begonnen, Folgendes zu verwenden:
- aws-vault – Manager für AWS-Anmeldeinformationen.
Als Lösung für die letzten beiden Probleme habe ich festgestellt, dass der folgende Tooling-Stack die meisten meiner Anforderungen erfüllt:
- zsh und oh-my-zsh – Terminal.
- zsh-aws-vault – Hervorhebung der AWS-Umgebung für die Terminalsitzung.
Verwalten von AWS-Anmeldeinformationen
Hier ist eine Kurzanleitung für die ersten Schritte.
Installation
Ich gehe hier davon aus, dass Sie bereits zsh
haben und oh-my-zsh
Eingerichtet. 😎
Lassen Sie uns aws-vault
installieren . Hier ist die vollständige Liste der Installationsschritte für die meisten verfügbaren Plattformen.
Wir werden alles für OS X (macOS) tun:
brew cask install aws-vault
Auswahl des aws-vault-Backends
aws-vault unterstützt mehrere Backends zum Speichern Ihrer Anmeldeinformationen. Meine Präferenz ist es, eine verschlüsselte Datei zu verwenden. Sie müssen also die folgende Variable zu Ihrem ~/.zshrc
hinzufügen :
export AWS_VAULT_BACKEND="file"
Verschieben von Anmeldeinformationen nach aws-vault
Öffnen Sie nun Ihre ~/.aws/credentials
Datei. Fügen Sie für jedes vorhandene Profil Anmeldedaten zu aws-vault
hinzu .
cat ~/.aws/credentials
aws-vault add profile_1
aws-vault add profile_2
Jetzt aws-vault hat AWS_VAULT_FILE_PASSPHRASE
-Variable, die verwendet werden kann, um aws-vault zu stoppen Sie müssen nicht immer wieder nach Ihrem Tresorpasswort fragen. Es gibt zwei Möglichkeiten, es zu verwenden:
Kein sicherer Weg
Fügen Sie Ihrem ~/.zshrc
die folgende Variable hinzu oder ~/.bashrc
Datei, um aws-vault zu verhindern dass Sie nicht jedes Mal nach Ihrem Passwort fragen:
export AWS_VAULT_FILE_PASSPHRASE="my_strong_password"
Sicherer Weg
Anstatt AWS_VAULT_FILE_PASSPHRASE
zu speichern Variable in .*rc
Dateien können Sie AWS Systems Manager Parameter Store SecureString
erstellen -Parameter, der Ihren aws-vault
enthält Passwort:
aws ssm put-parameter \
--name '/laptop/aws-vault/password' \
--description 'aws-vault password on my laptop' \
--value 'my_super_secret_password' \
--type SecureString
Lassen Sie uns ein Wrapper-Skript erstellen, das aws-vault call aws-vault aufruft und AWS_VAULT_FILE_PASSPHRASE
einrichtet mit einem erforderlichen Wert aus 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
Jetzt können Sie diesen Wrapper unter ~/.aws/config
verwenden so:
[profile my_new_profile]
credential_process = ~/bin/call-aws-vault.sh my_new_profile
Sie können ~/.aws/credentials umbenennen und später komplett löschen sobald du alles getestet hast.
Wechseln von AWS-Profilen
Um alle Ihre AWS-Profile aufzulisten, geben Sie einfach Folgendes ein:
aws-vault list
Großartig, jetzt können Sie ganz einfach Ihre Umgebung wechseln und sehen, wo Sie gerade arbeiten:
aws-vault exec --duration 8h default
So sieht es schließlich aus:
Rollenbasierter Ansatz
Okay, wir haben gerade alle unsere AWS-Anmeldeinformationen in einen sicheren Tresor verschoben und unser Terminal so konfiguriert, dass unser aktueller aws-Tresor angezeigt wird Sitzung. Jetzt ist es an der Zeit zu diskutieren, wie wir die Lösung noch weiter verbessern können.
Organisation mit mehreren Konten
Eine der bewährten Methoden zum Organisieren des Zugriffs von AWS-Benutzern auf verschiedene AWS-Konten – ist das Verwalten aller IAM-Benutzer in einem AWS-Konto und das Bereitstellen des Zugriffs auf andere AWS-Konten, indem ihnen ermöglicht wird, Rollen zu verwenden (sts:AssumeRole
API-Aufruf) von diesen Konten.
Hier ist das typische AWS Organization-Beispiel:
AWS hat in seinem Blog-Beitrag eine großartige Erklärung zur Verwendung eines einzelnen IAM-Benutzers für den einfachen Zugriff auf alle Ihre Konten mithilfe der AWS CLI bereitgestellt, in der der rollenverbrauchende Prozess und die awscli-Konfiguration beschrieben wurden. Ich werde sie nicht kopieren und einfügen. Stattdessen konzentrieren wir uns auf den aws-vault Konfiguration, um etwas Ähnliches zu tun, aber ohne ~/.aws/credentials Datei.
Angenommen, Sie haben bereits alle erforderlichen Berechtigungen und Berechtigungen zwischen Ihren Konten. Wenn nicht, finden Sie hier den großartigen Artikel zu diesem Thema – Tutorial:Delegate Access Across AWS Accounts Using IAM Roles.
Standardprofil-Setup
Sie sollten bereits Ihre Standardeinstellung haben Profileinrichtung in der Datei vorhanden. Wahrscheinlich sieht es ungefähr so aus:
[profile default]
region = us-east-1
Lassen Sie uns aws-vault konfigurieren als Anmeldedatenquelle für unser Standardprofil:
[profile default]
region = us-east-1
credential_process = /usr/local/bin/aws-vault exec -j default
Jetzt, wenn Sie Ihrem Benutzer oder Ihrer Rolle Berechtigungen von Standard erteilen Profil, um die AWS-Rolle von einem anderen Konto zu übernehmen, können Sie neue Profilkonfigurationen wie folgt angeben:
[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
Quellprofil Konfigurationsoption teilt awskli mit welches Konto verwendet werden soll, um eine Rolle für ein bestimmtes Profil zu übernehmen.
Testen
Am schnellsten können Sie testen, ob Sie die Rolle übernehmen können, indem Sie Folgendes aufrufen:
aws sts get-caller-identify
Sie sollten etwas Ähnliches für Ihren default
sehen Profil:
{
"UserId": "AIDDRCTFVGBHNJMGF3WI7R",
"Account": "01234567890",
"Arn": "arn:aws:iam::01234567890:user/admin"
}
So testen Sie einen anderen Profilaufruf:
aws sts get-caller-identity --profile account_1_role_admin
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
{
"UserId": "AROALKJHGFGDFV3IR2VSI:botocore-session-1584897134",
"Account": "012345678901",
"Arn": "arn:aws:sts::012345678901:assumed-role/admin/botocore-session-1584897134"
}
Annehmen der AWS-Kontorolle
Um die Rolle von einem beliebigen AWS-Konto zu übernehmen, das Sie in Ihrem aws-Vault haben, führen Sie die folgenden Befehle aus:
aws-vault ls
aws-vault exec --duration 8h default
Hier nehmen wir für 8 Stunden eine Rolle an, die dem Standardprofil zugeordnet ist.
Bonus:Passwortlose AWS-Webkonsolenanmeldung
Als kleinen Bonus für diejenigen unter Ihnen, die zu Ende gegangen sind, können Sie sich für jedes Profil wie folgt bei der AWS-Webkonsole anmelden:
aws-vault ls
aws-vault login --duration 8h default
Zusammenfassung
Mit zsh , aws-vault und AWS sts:AssumeRole
Funktion zusammen kann die Verwaltung mehrerer AWS-Konten und ihrer Anmeldeinformationen erheblich vereinfachen und sicherer machen.
Wenn Ihnen der Artikel gefällt, können Sie ihn gerne in der Welt verbreiten. Und wenn Sie Fragen, Vorschläge oder Kommentare haben, können Sie Disqus unten natürlich gerne verwenden.
Bleiben Sie dran!