Ich möchte AWS CodeBuild verwenden, um Befehle der AWS Command Line Interface (AWS CLI) über AWS-Konten hinweg auszuführen.
Lösung
Hinweis: Wenn du beim Ausführen von AWS CLI-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.
Die folgende Lösung konfiguriert ein CodeBuild-Projekt in Konto A für die Ausführung von AWS-CLI-Befehlen in Konto B.
Voraussetzung: Erstelle ein Build-Projekt in Konto A.
Eine IAM-Rolle in Konto B erstellen, um die AWS-CLI-Befehle auszuführen
Gehe wie folgt vor:
- Öffne in Konto B die AWS Identity and Access Management (IAM)-Konsole.
- Wähle im Navigationsbereich Rollen und dann Rolle erstellen.
- Wähle den Rollentyp AWS-Konto aus.
- Wähle im Abschnitt Ein AWS-Konto die Option Ein anderes AWS-Konto aus.
- Gib für **Konto-ID ** die Konto-ID von Konto A ein.
- Wähle Weiter aus.
- Wähle die Richtlinie mit Berechtigungen zum Ausführen von AWS-CLI-Befehlen in Konto B aus.
- Wähle Weiter aus.
- Gib im Feld Rollenname einen Namen für die Rolle ein.
- Wähle Rolle erstellen aus.
- Notiere dir die Amazon-Ressourcennummer (ARN) der IAM-Rolle.
Füge an die CodeBuild-Servicerolle eine IAM-Richtlinie an, um die Rolle zu übernehmen
Gehe wie folgt vor:
- Öffne in Konto A die CodeBuild-Konsole.
- Wähle im Navigationsbereich die Option Build-Projekte aus.
- Wähle das Build-Projekt aus, das die kontoübergreifenden Aktionen ausführt.
- Wähle im CodeBuild-Projekt die Registerkarte Projektdetails.
- Wähle im Abschnitt Umgebung die Servicerollen-ARN aus.
- Wähle im neuen IAM-Konsolenfenster Berechtigungen hinzufügen und dann Inline-Richtlinie hinzufügen aus.
- Gib in der JSON-Registerkarte die folgende Richtlinie ein:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowCrossAccountAccess",
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "ACCOUNT_B_ROLE_ARN"
}
]
}
Hinweis: Ersetze ACCOUNT_B_ROLE_ARN durch die ARN der IAM-Rolle.
- Wähle Weiter aus.
- Gib im Feld Richtlinienname einen Namen für die Richtlinie ein.
- Wähle Richtlinie erstellen aus.
Ändern von buildspec des CodeBuild-Projekts
Wenn sich die buildspec-Datei im CodeBuild-Projekt befindet, gehe wie folgt vor:
- Öffne die CodeBuild-Konsole.
- Wähle im Navigationsbereich die Option Build-Projekte aus.
- Wähle das Build-Projekt und dann Bearbeiten aus.
- Füge im Abschnitt Buildspec den AWS-CLI-Befehl assume-role und die kontoübergreifenden Befehle in der folgenden Reihenfolge hinzu:
- CREDS=$(aws sts assume-role \
--role-arn $ACCOUNT_B_ROLE_ARN \
--role-session-name "session")
- export AWS_ACCESS_KEY_ID=$(echo $CREDS | jq -r '.Credentials.AccessKeyId')
- export AWS_SECRET_ACCESS_KEY=$(echo $CREDS | jq -r '.Credentials.SecretAccessKey')
- export AWS_SESSION_TOKEN=$(echo $CREDS | jq -r '.Credentials.SessionToken')
Hinweis: Ersetze ACCOUNT_B_ROLE_ARN durch die ARN der IAM-Rolle. Wenn sich die buildspec-Datei in deinem Quellcode befindet, füge den AWS-CLI-Befehl assume-role vor den kontoübergreifenden Befehlen in der buildspec-Datei hinzu.
- Wähle Projekt aktualisieren.
Um einen AWS-CLI-Befehl in Konto B auszuführen, führe den CLI-Befehl nach den Befehlen assume-role und export aus.
Um zu den vorherigen CodeBuild-Servicerollenberechtigungen zurückzukehren, führe die folgenden unset-Befehle aus:
- unset AWS_ACCESS_KEY_ID
- unset AWS_SECRET_ACCESS_KEY
- unset AWS_SESSION_TOKEN