Tutorial: AWS Cross-Account-Zugriff Schritt für Schritt einrichten
In Multi-Account-Umgebungen auf AWS ist es Best Practice, Ressourcen über Kontogrenzen hinweg sicher zu teilen, anstatt IAM-Benutzer in jedem einzelnen Konto neu anzulegen. Die sicherste Methode hierfür ist die Verwendung von IAM-Rollen (AssumeRole).
Dieses Tutorial zeigt dir, wie du Benutzern aus Konto A (Quell-Konto) Zugriff auf Ressourcen in Konto B (Ziel-Konto) gewährst.
Das Beispielszenario
- Konto A (Quell-Konto / z. B. Identity/Dev): Konto-ID
111111111111– Hier befindet sich dein IAM-Benutzer. - Konto B (Ziel-Konto / z. B. Production): Konto-ID
222222222222– Hier liegen die Ressourcen (z. B. ein S3-Bucket), auf die zugegriffen werden soll. - Ziel: Der Benutzer aus Konto A soll temporär eine Rolle in Konto B annehmen, um dort Aktionen auszuführen.
Schritt 1: Rolle im Ziel-Konto (Konto B) erstellen
Zuerst definierst du im Ziel-Konto, wer Zugriff erhält und was diese Person tun darf.
- Logge dich in die AWS-Konsole von Konto B (222222222222) ein.
- Navigiere zu IAM > Roles (Rollen) und klicke auf Create role (Rolle erstellen).
- Wähle als Trusted Entity Type (Vertrauenswürdiger Entitätstyp): AWS account.
- Wähle Another AWS account und trage die ID von Konto A ein:
111111111111. - (Optional, aber empfohlen für Drittanbieter): Aktiviere bei Bedarf die Option "Require MFA".
- Klicke auf Next.
- Berechtigungen zuweisen: Wähle die Berechtigungen aus, die der Benutzer in Konto B haben soll (z. B. die Richtlinie
AmazonS3ReadOnlyAccess). - Klicke auf Next.
- Gib der Rolle einen Namen, z. B.
CrossAccount-S3-ReadRole. - Klicke auf Create role.
- Wichtig: Öffne die neu erstellte Rolle und kopiere die Role ARN. Sie sieht so aus:
arn:aws:iam::222222222222:role/CrossAccount-S3-ReadRole
Schritt 2: Berechtigung im Quell-Konto (Konto A) vergeben
Jetzt musst du dem Benutzer (oder der Gruppe) in Konto A erlauben, die Rolle in Konto B anzunehmen (sts:AssumeRole).
- Logge dich in die AWS-Konsole von Konto A (111111111111) ein.
- Navigiere zu IAM > Policies (Richtlinien) > Create policy (Richtlinie erstellen).
- Wechsle in den JSON-Editor und füge folgende Richtlinie ein (ersetze die ARN durch die aus Schritt 1):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::222222222222:role/CrossAccount-S3-ReadRole"
}
]
}
- Klicke auf Next, nenne die Policy z. B.
Allow-Assume-Role-KontoBund erstelle sie. - Policy zuweisen:
- Gehe zu Users (Benutzer) oder User groups (Benutzergruppen).
- Wähle den Benutzer aus, der den Zugriff benötigt.
- Klicke auf Add permissions (Berechtigungen hinzufügen) > Attach policies directly.
- Wähle die neu erstellte Richtlinie
Allow-Assume-Role-KontoBaus und speichere.
Schritt 3: Den Zugriff testen
Es gibt zwei Wege, den Zugriff zu nutzen: über die AWS Management Console oder über die AWS CLI.
Variante A: Über die AWS Console (Switch Role)
- Melde dich als Benutzer in Konto A an.
- Klicke oben rechts auf deinen Benutzernamen / deine Konto-ID.
- Klicke auf Switch role (Rolle wechseln).
- Fülle die Felder aus:
- Account:
222222222222(ID von Konto B) - Role:
CrossAccount-S3-ReadRole - Display Name: Ein beliebiger Anzeigename (z. B.
Prod-S3-Read)
- Account:
- Klicke auf Switch Role.
Oben rechts siehst du nun den neuen Anzeigenamen. Du arbeitest jetzt mit den Rechten der Rolle in Konto B. Über denselben Menüpunkt kannst du jederzeit zurückwechseln ("Switch back").
Variante B: Über die AWS CLI
Du kannst das Profil in deiner lokalen Konfigurationsdatei eintragen (~/.aws/config):
[profile account-a]
aws_access_key_id = DEIN_KEY_AUS_KONTO_A
aws_secret_access_key = DEIN_SECRET_AUS_KONTO_A
region = eu-central-1
[profile account-b-cross]
role_arn = arn:aws:iam::222222222222:role/CrossAccount-S3-ReadRole
source_profile = account-a
region = eu-central-1
Führe nun einen CLI-Befehl mit dem neuen Profil aus:
aws s3 ls --profile account-b-cross
Die AWS CLI übernimmt das Abrufen der temporären Zugangsdaten (STS-Token) automatisch im Hintergrund.
Sicherheits-Best-Practices
- Principle of Least Privilege: Vergib in der Ziel-Rolle nur exakt die Rechte, die wirklich benötigt werden, niemals standardmäßig
AdministratorAccess. - MFA erzwingen: Für privilegierte Rollen sollte in der Vertrauensstellung (Trust Relationship) der Rolle die Bedingung
aws:MultiFactorAuthPresent: "true"hinterlegt werden. - External ID nutzen: Wenn du Drittanbietern (SaaS-Diensten) Zugriff auf dein Konto via Cross-Account gewähren musst, nutze zwingend eine
ExternalIdin der Trust Policy, um das "Confused-Deputy-Problem" zu verhindern.