GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So verwenden Sie aws-vault für den sicheren Zugriff auf mehrere AWS-Konten

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


Linux
  1. So erstellen Sie mehrere Benutzerkonten in Linux

  2. So verwenden Sie SSH-Tunneling für den Zugriff auf eingeschränkte Server

  3. So verwenden Sie AWS CLI zum Verwalten von Amazon S3

  4. So verwenden Sie mehrere Node.js-Versionen mit NVM

  5. Wie verwende ich die Pfadoption von Unison mit mehreren Pfaden?

So verwenden Sie Cloudformation zum Erstellen von SQS-Warteschlangen auf AWS

So verwenden Sie mehrere Skype-Konten gleichzeitig unter Linux

So verwenden Sie aws-vault für den sicheren Zugriff auf mehrere AWS-Konten

Zugriff auf und Verwendung von Patchman in Plesk

Wie greife ich in cPanel auf Hostinger-E-Mail-Konten zu?

Wie lösche ich die Anmeldeinformationen in AWS Configure?