Sicherer AWS-Kontenübergreifender Zugriff mit IAM-Rollen
December 14, 2018
Die Gewährung von Zugriff auf Ihre AWS-Ressourcen für Dritte (z.B. externe Dienstleister, Partner oder andere Ihrer eigenen AWS-Konten) sollte niemals über die Weitergabe von langlebigen IAM-Benutzerzugangsdaten erfolgen. Der sichere und von AWS empfohlene Mechanismus hierfür ist der kontenübergreifende Zugriff (Cross-Account Access) mittels IAM-Rollen.
Diese Anleitung beschreibt den Prozess zur Einrichtung einer solchen Vertrauensstellung.
Konzept: Wie funktioniert Cross-Account Access?
Der Prozess involviert zwei AWS-Konten:
- Ihr Konto (das Vertrauenskonto): Das Konto, das die Ressourcen besitzt.
- Das Drittkonto (das vertrauende Konto): Das Konto, dem Zugriff gewährt werden soll.
Sie erstellen in Ihrem Konto eine IAM-Rolle, die zwei Policys definiert:
- Trust Policy (Vertrauensrichtlinie): Legt fest, wer (welches andere AWS-Konto) diese Rolle annehmen darf.
- Permissions Policy (Berechtigungsrichtlinie): Legt fest, was die Rolle tun darf, nachdem sie angenommen wurde (z.B. Lesezugriff auf S3).
Ein Prinzipal (z.B. ein IAM-Benutzer) aus dem Drittkonto ruft dann die sts:AssumeRole-Aktion auf, um temporäre Sicherheitsanmeldeinformationen für diese Rolle zu erhalten und auf die erlaubten Ressourcen zuzugreifen.
Schritt 1: IAM-Rolle in Ihrem Konto erstellen
- Navigieren Sie zur IAM Console > Roles und klicken Sie auf Create role.
- Wählen Sie als "Trusted entity type" die Option AWS account.
- Wählen Sie Another AWS account und geben Sie die 12-stellige Account ID des Drittkontos ein.
- (Optional, aber empfohlen) Aktivieren Sie Require external ID, um das Confused-Deputy-Problem zu verhindern. Die
ExternalIdist ein geheimer String, den nur Sie und der Drittanbieter kennen. - Klicken Sie auf Next.
Trust Policy (Beispiel)
Die resultierende Vertrauensrichtlinie sieht wie folgt aus:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:root"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "EINE_EINZIGARTIGE_ID_123"
}
}
}
]
}
Principal: Gibt an, dass das gesamte Drittkonto (111122223333) vertrauenswürdig ist.Action: Erlaubt explizit die Annahme der Rolle.Condition: Erzwingt, dass dieExternalIdbeim Annehmen der Rolle korrekt angegeben wird.
Permissions Policy
Im nächsten Schritt fügen Sie der Rolle eine oder mehrere Berechtigungsrichtlinien hinzu. Wählen Sie hierbei stets das Prinzip der geringsten Rechte (Principle of Least Privilege). Weisen Sie nur die Berechtigungen zu, die absolut notwendig sind (z.B. AmazonS3ReadOnlyAccess anstelle von AdministratorAccess).
Geben Sie der Rolle einen Namen (z.B. PartnerReadOnlyRole) und speichern Sie sie. Notieren Sie den Role ARN.
Schritt 2: Annahme der Rolle im Drittkonto konfigurieren
Ein IAM-Benutzer oder eine Rolle im Drittkonto benötigt nun die Berechtigung, die von Ihnen erstellte Rolle anzunehmen.
Fügen Sie dem entsprechenden IAM-Prinzipal die folgende Inline- oder verwaltete Policy hinzu:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::DEINE_ACCOUNT_ID:role/DEIN_ROLLENNAME"
}
]
}
Ersetzen Sie DEINE_ACCOUNT_ID und DEIN_ROLLENNAME durch den ARN der in Schritt 1 erstellten Rolle.
Zugriffsmethoden
Über die AWS Management Console (Switch Role)
Sie können einen direkten Link zur Verfügung stellen, der den "Switch Role"-Prozess in der AWS-Konsole erleichtert:
https://signin.aws.amazon.com/switchrole?account=DEINE_ACCOUNT_ID&roleName=DEIN_ROLLENNAME&displayName=Anzeigename
account: Ihre 12-stellige Account-ID.roleName: Der Name Ihrer IAM-Rolle.displayName: Ein benutzerfreundlicher Name, der in der Konsole angezeigt wird.
Hinweis: Der Rollenwechsel über die Konsole ist nur für IAM-Benutzer, nicht für den Root-Benutzer, möglich.
Über die AWS CLI
Programmatischer Zugriff erfolgt über den sts assume-role-Befehl:
aws sts assume-role \
--role-arn "arn:aws:iam::DEINE_ACCOUNT_ID:role/DEIN_ROLLENNAME" \
--role-session-name "partner-session-01" \
--external-id "EINE_EINZIGARTIGE_ID_123"
Die Antwort enthält temporäre Anmeldeinformationen (AccessKeyId, SecretAccessKey, SessionToken), die dann für weitere API-Aufrufe verwendet werden können.
Fazit
Die Verwendung von IAM-Rollen für kontenübergreifenden Zugriff ist eine sichere und skalierbare Methode, um Dritten kontrollierten Zugang zu Ihren AWS-Ressourcen zu gewähren. Sie vermeidet die Weitergabe langlebiger Anmeldeinformationen und ermöglicht eine präzise Steuerung der Berechtigungen.