Blog

Ein Tresor für den Zugriff auf alle

Sicherer AWS-Zugang mit mehreren Konten

Yev Dytyniuk

Yev Dytyniuk

Aktualisiert März 17, 2026
8 Minuten

Die Verwaltung des Zugriffs auf mehrere AWS-Konten gehört zum Alltag eines Cloud-Ingenieurs - und ist oft eine Quelle von Reibungsverlusten: kurzlebige Anmeldeinformationen, Rollenwechsel und Verkettung, Multi-Faktor-Authentifizierung oder Single-Sign-On. Die Liste ist nicht abschließend und variiert je nach Arbeitsabläufen.

Die Anzahl der Konten vervielfacht sich in dem Moment, in dem Sie eine vollwertige DTAP-Umgebung (Development/Test/Acceptance/Production) erhalten. Sie arbeiten an 3 DTAP-fähigen Projekten? Herzlichen Glückwunsch, Sie müssen sich um 9 AWS-Konten kümmern. Wie oft haben Sie sich dabei ertappt, dass Sie sich gefragt haben: "In welchem Konto bin ich jetzt?" und dann aws sts get-caller-identity aufgerufen haben, um eine schnelle Überprüfung vorzunehmen? Wenn Sie das ebenso wie ich ausgebremst hat, lesen Sie weiter. Ich erzähle Ihnen, wie Sie den Zugriff auf mehrere Konten verwalten können, ohne dass Ihnen graue Haare wachsen.

AWS CLI-Profile sind nicht genug

In der AWS CLI-Konfigurationsdatei können Sie mehrere Profile definieren, um zwischen Konten zu wechseln. Normalerweise haben Sie so etwas in Ihrer $HOME/.aws/config:

# $HOME/.aws/config

[default]
output = json
region = eu-west-1

[profile personal]
region = eu-west-1

# And so on

Ich werde die Konfiguration von statischen Zugriffsschlüsseln bewusst auslassen, da Sie diese bestenfalls nicht verwenden sollten, insbesondere in einer Unternehmensumgebung.

Wenn Sie sich auf AWS Identity Centre, den Nachfolger von AWS SSO, verlassen, haben Sie in der Regel einige der folgenden Konfigurationsblöcke:

# $HOME/.aws/config

[sso-session EvilCorp]
sso_start_url = https://evilcorp.awsapps.com/start/
sso_region = eu-west-1
sso_registration_scopes = sso:account:access

[profile evilcorp-dev]
sso_session = EvilCorp
sso_account_id = 112233445566
sso_role_name = Poweruser

[profile evilcorp-acc]
sso_session = EvilCorp
# ...

[profile evilcorp-prod]
sso_session = EvilCorp
# ...

Um ein Profil zu verwenden, übergeben Sie seinen Namen als --profile Argument für AWS CLI-Befehle:

# Development
$ aws s3 ls --profile evilcorp-dev

# Acceptance/UAT
$ aws s3 ls --profile evilcorp-acc

Funktioniert? Ja. Bequem? Sicher? Fragwürdig.

Wie groß ist die Wahrscheinlichkeit, dass Sie den Namen des Profils falsch eingeben? Oder, im Falle der automatischen Vervollständigung, [Tab] zu wenig oder zu oft drücken und die falsche Option wählen?

Ein weiterer Nachteil ist, dass alle Ihre Anmeldedaten jetzt in einem Korb liegen - bei SSO-fähigen Profilen werden die temporären Anmeldedaten auf der Festplatte gespeichert, und zwar unter $HOME/.aws/sso/cache/*.json:

$ cat ~/.aws/sso/cache/974...66f330.json | jq -r
{
  "startUrl": "https://evilcorp.awsapps.com/start/",
  "region": "eu-west-1",
  "accessToken": "...",
  "expiresAt": "2026-02-12T19:46:13Z",
  "clientId": "...",
  "clientSecret": "...",
  "registrationExpiresAt": "2026-05-13T18:45:59Z",
  "refreshToken": "..."
}

MFA mit bloßen Profilen wirkt wie ein nachträglicher Einfall und macht den Prozess noch umständlicher. Es muss einen besseren, bequemeren Weg geben.

Betreten Sie den aws-vault

aws-vault ist ein Tool, das viele der genannten Probleme lösen kann.

Erstens übernimmt es Ihre $HOME/.aws/config Datei, so dass Sie Ihre Profile nicht in ein anderes Tool migrieren müssen. Zweitens verwendet es anstelle von Dateien den Schlüsselbund Ihres Systems oder ein anderes Backend Ihrer Wahl, um die AWS-Zugangsdaten zu speichern:

  • macOS Schlüsselbund
  • Geheimdienst (Gnom Schlüsselanhänger, KWallet)
  • 1Passwort
  • und andere

Wenn Sie also statische Zugriffsschlüssel verwenden, ist dies ein besserer Weg, sie zu speichern als die gute alte $HOME/.aws/credentials Datei. Vergessen Sie jedoch nicht, weiterhin Rollen zu verwenden, vorzugsweise mit MFA. Und, ja, aws-vault unterstützt all diese Szenarien.

Integration des Identitätszentrums (SSO)

Die aws-vault wird Ihre SSO-gestützten Profile ohne zusätzliche Konfiguration übernehmen.

Um eine Liste der von aws-vault erkannten Profile zu prüfen, führen Sie den Befehl list aus:

$ aws-vault list
Profile                  Credentials              Sessions
=======                  ===========              ========
default                  -                        -
personal                 personal                 -
localstack               localstack               -
evilcorp-dev             -                        sso.GetRoleCredentials:-10m45s
evilcorp-acc             -                        -
evilcorp-prod            -                        -
-                        -                        oidc:https://evilcorp.awsapps.com/start/

Die Spalten sind:

  • Ihr AWS-Profilname.
  • Wenn das Profil einen statischen Zugriffsschlüssel verwendet, sehen Sie dessen Namen in der Spalte Credentials.
  • Informationen über eine aktive Profilsitzung.

In dem obigen Beispiel hat aws-vault vor fast 11 Minuten eine Rolle im Profil evilcopr-dev übernommen. Profile mit Bindestrichen anstelle von Namen und Sitzungen, die mit oidc: beginnen, sind Ihre konfigurierten SSO-Sitzungen ([sso-session] von $HOME/.aws/config).

aws-vault in Aktion

Die herkömmliche Art, einen Befehl auszuführen, unterscheidet sich kaum von AWS CLI:

$ aws s3 ls --profile evilcorp-dev
# VS
$ aws-vault exec evilcorp-dev -- aws s3 ls

Die -- bedeutet das Ende der aws-vault Optionen und aktiviert die automatische Vervollständigung der Shell für den AWS CLI-Befehl. Aber ich finde das lästig - das ganze Ding einzugeben, nur um einen Befehl auszuführen, dann wieder für einen anderen, und wieder.

Sie können also stattdessen eine neue Shell-Sitzung starten, indem Sie den Befehlsteil weglassen: aws-vault exec $PROFILE.

Wenn Sie ein SSO-basiertes Profil verwenden, wird Ihr Standardbrowser geöffnet, wenn Sie keine aktive SSO-Sitzung haben. Sobald Sie sich angemeldet haben, erhalten Sie über aws-vault einen Satz temporärer Anmeldedaten, die in eine Subshell eingefügt werden:

$ aws-vault exec evilcorp-dev
Opening the SSO authorization page in your default browser (use Ctrl-C to abort)
https://evil-sso.awsapps.com/start/#/device?user_code=ABCD-EFGH
Starting subshell /bin/zsh, use `exit` to exit the subshell
$ printenv | grep AWS
AWS_VAULT=evilcord-dev
AWS_REGION=eu-west-1
AWS_DEFAULT_REGION=eu-west-1
AWS_ACCESS_KEY_ID=...
AWS_SECRET_ACCESS_KEY=...
AWS_SESSION_TOKEN=...
AWS_CREDENTIAL_EXPIRATION=2026-02-25T22:30:17Z

Die Anmeldung bei der AWS-Konsole ist so einfach wie das Vertauschen des Befehls exec mit dem Befehl login: aws-vault login $PROFILE. Sie können $PROFILE weglassen, wenn Sie die Konsole für die aktuelle Sitzung öffnen möchten:

$ aws-vault exec evilcorp-acc
Starting subshell /bin/zsh, use `exit` to exit the subshell
$ aws-vault login

In Kombination mit der Multisession-Unterstützung der AWS-Konsole ist dies eine unglaubliche Verbesserung für meine Arbeitsabläufe.

Metadaten-Server

In Szenarien, in denen Sie temporäre Zugangsdaten für einen längeren Zeitraum benötigen, kann aws-vault einen Hintergrundserver laufen lassen, um den Metadaten-Endpunkt zu imitieren, den Sie in einer EC2-Instanz einer ECS-Aufgabe haben. Dieser Server wird weiterhin temporäre Zugangsdaten generieren, sobald die Anwendung diese anfordert. Wenn Sie zum Beispiel Ihre Infrastruktur mit Terraform verwalten, benötigen Sie die AWS-Anmeldedaten für die gesamte Dauer der Anwendungsphase.

Der Server ermöglicht auch die Verbindung einer lokalen Entwicklungsumgebung mit AWS-Diensten. Entwickeln Sie ein System mit mehreren Containern mit Docker Compose? Kein Problem, Ihre Container können temporäre Anmeldeinformationen von aws-vault abrufen, das auf dem Host läuft! Die Standard-Anmeldungskette des AWS SDK stellt automatisch eine Verbindung zum Server her, um Anmeldeinformationen abzurufen. Der Prozess ist ähnlich wie bei amazon-ecs-local-container-endpoints. Der Unterschied besteht darin, dass die Anmeldeinformationen über aws-vault aus dem Schlüsselbund bezogen werden.

Andere Anwendungsfälle

Sie können den Spieß auch umdrehen und aws-vault über die Konfiguration credential_process in Ihrer AWS-Konfigurationsdatei zu Ihrem "Master Credentials Vault" machen. Dies steht im Einklang mit dem AWS SDK und anderen Tools, die die Umgebungsvariable AWS_PROFILE erkennen:

# Master credentials added with `aws-vault add master-profile`
# ~/.aws/config
[profile master-profile]
credentials_process = aws-vault export --format=json --no-session master-profile

[profile my-role]
source_profile = master-profile
role_arn = ...

Nun können Sie entweder aws-vault als Vollstrecker verwenden:

aws-vault exec my-role aws s3 ls

Oder führen Sie den Befehl mit einer voreingestellten Umgebungsvariablen aus:

AWS_PROFILE=my-role aws s3 ls

Mit nur wenigen Zeilen können Sie Ihre aws-vault in einen MFA-Sitzungscache verwandeln:

# ~/.aws/config

[profile master-profile]
credential_process = aws-vault export --format=json --no-session master-profile
mfa_serial = arn:aws:iam::123456789012:mfa/johndoe

[profile my-role]
source_profile = master-profile
role_arn = ...
mfa_serial ... 

Oder sogar einen Cache für alternative Berechtigungsnachweisquellen:

# ~/.aws/config

[profile custom-cred-profile]
credential_process = custom-creds-cmd
# via aws-vault as cache
$ aws-vault exec custom-cred-profile aws s3 ls

# skip aws-vault, so, no cache
$ AWS_PROFILE=custom-cred-profile aws s3 ls

Ich bin sicher, dass Sie Ihr Rezept finden werden, nachdem Sie die Dokumentation überprüft haben.

Bonus

Ich starte in der Regel mehrere Sitzungen mit aws-vault exec. Sie können sich leicht verirren, wenn Sie versuchen, sich zu merken, welche Registerkarte oder welches Panel welchem Konto zugeordnet ist. Versuchen Sie, 2 oder 3 Konten mit einer angemessenen Anzahl von Befehlen zu verwenden...

Um mir selbst zu helfen, habe ich eine einfache Bash-Funktion geschrieben, die den aktuellen Sitzungsnamen in meiner zsh-Shell-Eingabeaufforderung anzeigt:

# ~/.zshrc

function aws_profile_info() {
    local _info=""
    local _profile="${AWS_VAULT:-$AWS_PROFILE}"
    if [[ "$_profile" != "" ]]; then
        _info="(%{$fg[yellow]%}\u2601%{$reset_color%} $_profile)"
    fi
    echo -e "$_info"
}

PROMPT='$(aws_profile_info)'
PROMPT+='[the rest of your PROMPT config]'

In dem Moment, in dem ich eine Sitzung beginne:

~ $ aws-vault exec evilcorp-dev
Opening the SSO authorization page in your default browser (use Ctrl-C to abort)
https://evilcorp.awsapps.com/start/#/device?user_code=ABCD-EFGH
Starting subshell /bin/zsh, use `exit` to exit the subshell
(☁ evilcorp-dev) ~ $

Meine Shell-Eingabeaufforderung wird mit einem aktiven AWS-Profil und einem kleinen Wolkensymbol auf der linken Seite eingeleitet. Praktisch, nicht wahr?

Einpacken

Ich möchte meine Routinen optimieren, ohne dabei den Überblick über die Automatisierung zu verlieren. aws-vault gibt mir dies mit einer Prise Bash-Scripting, um meine ZSH-Eingabeaufforderung aufzupeppen.

Ich habe verschiedene Tools verwendet, um den Zugriff auf meine AWS-Konten zu verwalten, aber ich habe nichts Produktiveres gefunden als aws-vault. Seien wir ehrlich, was gibt es Besseres, als Ihr Terminal hochzufahren und mit einem einzigen Befehl in das Konto zu gelangen? Dabei spielt es keine Rolle, ob Sie einen AWS CLI-Befehl ausführen oder durch die Konsole navigieren.

Probieren Sie es aus. Das Leben ist zu kurz, um es mit der Verwaltung von Anmeldeinformationen zu vergeuden :)

Foto von Brett Sayles.

Verfasst von

Yev Dytyniuk

Yev Dytyniuk

AWS Cloud Consultant/Engineer

A software/cloud engineer who has seen enough to go and fix things before the damage is done. I've built various web applications, integrated enterprise systems, run migrations, etc. I like simple, effective, and robust architectures and am always on the lookout for another interesting challenge: optimise a wonky database, turn an hour-long batch process into a blazingly fast event-based pipeline, or just talk about the quirks of another AWS service.

Contact

Let’s discuss how we can support your journey.