
Ein Tresor zum sicheren Speichern und Abrufen von AWS-Anmeldedaten in Entwicklungsumgebungen
[!WARNING] Dieses Projekt wurde aufgegeben und erhält keine weiteren Updates mehr. Wenn du weiterhin Updates erhalten oder dazu beitragen möchtest, schau dir gerne den aktiven Fork an unter: https://github.com/ByteNess/aws-vault
AWS Vault ist ein Tool zum sicheren Speichern und Abrufen von AWS-Anmeldedaten in einer Entwicklungsumgebung.
AWS Vault speichert IAM-Anmeldedaten im sicheren Schlüsselspeicher deines Betriebssystems und generiert daraus temporäre Anmeldedaten, die deiner Shell und deinen Anwendungen bereitgestellt werden. Es ist als Ergänzung zu den AWS-CLI-Tools konzipiert und kennt deine Profile und Konfiguration in ~/.aws/config.
Weitere Details findest du im Ankündigungs-Blogbeitrag.
Du kannst AWS Vault installieren:
brew install aws-vaultport install aws-vaultchoco install aws-vaultscoop install aws-vaultbrew install aws-vaultpacman -S aws-vaultemerge --ask app-admin/aws-vault (zuerst Guru aktivieren)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>Konfiguration, Verwendung, Tipps und Tricks findest du in der Datei USAGE.md.
Die unterstützten Vaulting-Backends sind:
Verwende das --backend-Flag oder die Umgebungsvariable AWS_VAULT_BACKEND, um dies festzulegen.
# 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
aws-vault verwendet den STS-Dienst von Amazon, um über die API-Aufrufe GetSessionToken oder AssumeRole temporäre Anmeldedaten zu generieren. Diese laufen nach kurzer Zeit ab, wodurch das Risiko eines Leaks von Anmeldedaten verringert wird.
AWS Vault stellt die temporären Anmeldedaten dann auf eine von zwei Arten dem Unterprozess bereit
$ 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=%%%
Standardmäßig werden Umgebungsvariablen verwendet, aber du kannst dich mit dem --server-Flag beim exec-Befehl für den lokalen Instanz-Metadatenserver entscheiden.
Best Practice ist es, Rollen zur Delegierung von Berechtigungen zu erstellen. Aus Sicherheitsgründen solltest du außerdem verlangen, dass Benutzer einen Einmal-Schlüssel angeben, der von einem Multi-Faktor-Authentifizierungsgerät (MFA) generiert wurde.
Zuerst musst du die Benutzer und Rollen in IAM erstellen sowie ein MFA-Gerät einrichten. Anschließend kannst du IAM-Rollen einrichten, um MFA zu erzwingen.
Hier ist eine Beispielkonfiguration mit Rollen und 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
Das kannst du von aws-vault erwarten