New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
Wie stelle ich mithilfe von CodePipeline Artefakte für Amazon S3 in einem anderen AWS-Konto bereit?
Ich möchte Artefakte in einem Amazon Simple Storage Service (Amazon S3)-Bucket in einem anderen Konto bereitstellen. Ich möchte auch das Zielkonto als Objekteigentümer festlegen, indem ich AWS CodePipeline mit einem Amazon S3-Anbieter für Bereitstellungsaktionen verwende.
Behebung
Hinweis: Das folgende Beispielverfahren setzt Folgendes voraus:
- Du hast zwei Konten: ein Entwicklungskonto und ein Produktionskonto.
- Der Eingabe-Bucket im Entwicklungskonto heißt codepipeline-input-bucket (mit aktivierter Versionsverwaltung).
- Der Standardartefact-Bucket im Entwicklungskonto heißt codepipeline-us-east-1-0123456789.
- Der Ausgabe-Bucket im Produktionskonto heißt codepipeline-output-bucket.
- Du stellst Artefakte aus dem Entwicklungskonto in einen S3-Bucket im Produktionskonto bereit.
- Du übernimmst eine kontoübergreifende Rolle, die im Produktionskonto erstellt wurde, um die Artefakte bereitzustellen. Die Rolle macht das Produktionskonto zum Objekteigentümer und nicht zum Entwicklungskonto. Um dem Bucket-Eigentümer im Produktionskonto Zugriff auf die Objekte zu gewähren, die dem Entwicklungskonto gehören, lies folgenden Artikel: Wie stelle ich mithilfe von CodePipeline und einer vordefinierten ACL Artefakte in Amazon S3 in einem anderen AWS-Konto bereit?
Einen AWS-KMS-Schlüssel zur Verwendung mit CodePipeline im Entwicklungskonto erstellen
Wichtig: Du musst den vom Kunden verwalteten Schlüssel von AWS Key Management Service (AWS KMS) für kontoübergreifende Bereitstellungen verwenden. Wenn der Schlüssel nicht konfiguriert ist, verschlüsselt CodePipeline die Objekte mit der Standardverschlüsselung, die von der Rolle im Zielkonto nicht entschlüsselt werden kann.
1. Öffne die AWS KMS-Konsole im Entwicklungskonto.
2. Wähle im Navigationsbereich Vom Kunden verwaltete Schlüssel.
3. Wähle Schlüssel erstellen.
4. Wähle als Schlüsseltyp die Option Symmetrischer Schlüssel.
5. Erweitere Erweiterte Optionen.
6. Wähle für Key Material Origin die Option KMS. Wähle dann Weiter.
7. Gib für Alias den Alias deines Schlüssels ein. Zum Beispiel: s3deploykey.
8. Wähle Weiter. Die Seite „Wichtige Administratorberechtigungen definieren wird geöffnet.
9. Wähle im Abschnitt Schlüsseladministratoren einen AWS Identity and Access Management (IAM, Identitäts- und Zugriffsmanagement)-Benutzer oder eine IAM-Rolle als deinen Schlüsseladministrator.
- Wähle Weiter aus. Die Seite Schlüsselverwendungsberechtigungen definieren wird geöffnet.
11. Wähle im Abschnitt Andere AWS-Konten die Option Weiteres AWS-Konto hinzufügen.
12. Füge in dem daraufhin angezeigten Textfeld die Konto-ID des Produktionskontos hinzu. Wähle dann Weiter.
Hinweis: Du kannst im Abschnitt Dieses Konto auch eine bestehende Servicerolle auswählen. Wenn du eine bestehende Servicerolle auswählst, überspringe die Schritte im Abschnitt Aktualisierung der KMS-Nutzungsrichtlinie im Entwicklungskonto.
13. Überprüfe die wichtigsten Richtlinien. Wähle dann Fertigstellen.
Erstelle eine CodePipeline im Entwicklungskonto
1. Öffne die CodePipeline-Konsole. Wähle dann Create pipeline.
2. Gib unter Pipeline-Name einen Namen für deine Pipeline ein. Zum Beispiel: crossaccountdeploy.
Hinweis: Das Textfeld Rollenname wird automatisch mit dem Dienstrollennamen AWSCodePipelineServiceRole-us-east-1-crossaccountdeploy gefüllt. Du kannst auch eine andere, bestehende Servicerolle mit Zugriff auf den KMS-Schlüssel wählen.
3. Erweitere den Abschnitt Erweiterte Einstellungen.
4. Wähle für den Artefaktspeicher die Option Standardspeicherort.
Hinweis: Du kannst Benutzerdefinierter Standort auswählen, wenn dies für deinen Anwendungsfall erforderlich ist.
5. Wähle als Verschlüsselungsschlüssel die Option Kundenverwalteter Schlüssel.
6. Wähle für den vom Kunden verwalteten KMS-Schlüssel den Alias deines Schlüssels aus der Liste aus (in diesem Beispiel s3deploykey). Wähle dann Weiter. Die Seite Quellstufe hinzufügen wird geöffnet.
7. Wähle als Quellenanbieter Amazon S3.
8. Gib für Bucket den Namen deines S3-Buckets für die Entwicklungseingabe ein. Zum Beispiel: codepipeline-input-bucket.
Wichtig: Für den Eingabe-Bucket muss die Versionierung aktiviert sein, um mit CodePipeline zu arbeiten.
9. Gib für den S3-Objektschlüssel sample-website.zip ein.
Wichtig: Informationen zur Verwendung einer AWS-Beispielwebsite anstelle deiner eigenen Website findest du im Tutorial: Erstelle eine Pipeline, die Amazon S3 als Bereitstellungsanbieter verwendet. Suche dann in den Voraussetzungen von **1 nach „Beispiel für eine statische Website“: Stelle statische Website-Dateien im Amazon **S3-Abschnitt bereit.
10. Wähle unter Erkennungsoptionen ändern Amazon CloudWatch Events (empfohlen). Wähle dann Weiter.
11. Wähle auf der Seite Build-Phase hinzufügen die Option Build-Phase überspringen. Wähle dann Überspringen.
12. Wähle auf der Seite Bereitstellungsphase hinzufügen für Bereitstellungsanbieter die Option Amazon S3.
13. Wähle für Region die AWS-Region aus, in der sich dein S3-Bucket für die Produktionsausgabe befindet. Zum Beispiel: USA Ost (Nord-Virginia).
Wichtig: Wenn sich die Region des Production-Output-Buckets von der Region deiner Pipeline unterscheidet, musst du außerdem Folgendes überprüfen:
- Du verwendest einen AWS KMS-Schlüssel für mehrere Regionen mit mehreren Replikaten.
- Deine Pipeline verfügt über Artefaktlager in beiden Regionen.
14. Gib für Bucket den Namen deines S3-Buckets für die Produktionsausgabe ein. Zum Beispiel: codepipeline-output-bucket.
15. Aktiviere das Kontrollkästchen Datei vor der Bereitstellung extrahieren.
Hinweis: Gib bei Bedarf einen Pfad für den Bereitstellungspfad ein.
16. Wähle Weiter.
17. Wähle Pipeline erstellen. Die Pipeline läuft, aber die Quellphase schlägt fehl. Der folgende Fehler wird angezeigt: „Das Objekt mit dem Schlüssel 'sample-website.zip' existiert nicht.“
Im Abschnitt Die Beispielwebsite in den Eingabe-Bucket dieses Artikels hochladen, wird beschrieben, wie dieser Fehler behoben werden kann.
Aktualisiere die KMS-Nutzungsrichtlinie im Entwicklungskonto
Wichtig: Überspringe diesen Abschnitt, wenn du eine bestehende CodePipeline-Servicerolle verwendest.
1. Öffne die AWS KMS-Konsole im Entwicklungskonto.
2. Wähle den Alias deines Schlüssels aus (s3deploykey, für dieses Beispiel).
3. Wähle im Abschnitt Hauptbenutzer die Option Hinzufügen.
4. Gib in das Suchfeld die Servicerolle AWSCodePipelineServiceRole-us-east-1-crossaccountdeploy ein.
5. Wähle Hinzufügen.
Konfiguriere eine kontenübergreifende Rolle im Produktionskonto
Erstelle eine IAM-Richtlinie für die Rolle, die Amazon S3-Berechtigungen für deinen S3-Bucket für die Produktionsausgabe gewährt
1. Öffne die IAM-Konsole im Produktionskonto.
2. Wähle im Navigationsbereich Metrics. Wähle Richtlinie erstellen.
3. Wähle die Registerkarte JSON. Gib dann die folgende Richtlinie in den JSON-Editor ein:
Wichtig: Ersetze codepipeline-output-bucket durch den Namen deines S3-Buckets für die Produktionsausgabe.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:Put*" ], "Resource": [ "arn:aws:s3:::codepipeline-output-bucket/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::codepipeline-output-bucket" ] } ] }
4. Wähle Richtlinie überprüfen.
5. Gib unter Name einen Namen für die Richtlinie ein. Zum Beispiel: outputbucketdeployaccess.
6. Wähle Richtlinie erstellen.
Erstelle eine IAM-Richtlinie für die Rolle, die die erforderlichen KMS-Berechtigungen gewährt
1. Wähle in der IAM-Konsole Create Policy.
2. Wähle die Registerkarte JSON. Gib dann die folgende Richtlinie in den JSON-Editor ein:
Hinweis: Ersetze den ARN des KMS-Schlüssels, den du erstellt hast. Ersetze codepipeline-us-east-1-0123456789 durch den Namen des Artefakt-Buckets im Entwicklungskonto.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:DescribeKey", "kms:GenerateDataKey*", "kms:Encrypt", "kms:ReEncrypt*", "kms:Decrypt" ], "Resource": [ "arn:aws:kms:us-east-1:<dev-account-id>:key/<key id>" ] }, { "Effect": "Allow", "Action": [ "s3:Get*" ], "Resource": [ "arn:aws:s3:::codepipeline-us-east-1-0123456789/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::codepipeline-us-east-1-0123456789" ] } ] }
3. Wähle Richtlinie überprüfen.
4. Gib unter Name einen Namen für die Richtlinie ein. Zum Beispiel: devkmss3access.
5. Wähle Richtlinie erstellen.
Erstelle eine kontenübergreifende Rolle, die das Entwicklungskonto übernehmen kann, um die Artefakte bereitzustellen
1. Öffne die IAM-Konsole im Produktionskonto.
2. Wähle im Navigationsbereich Rollen. Wähle dann Rolle erstellen.
3. Wähle ein anderes AWS-Konto.
4. Gib als Konto-ID die AWS-Konto-ID des Entwicklungskontos ein.
5. Wähle Weiter: Berechtigungen.
6. Wähle in der Liste der Richtlinien outputbucketdeployaccess und devkmss3access.
7.Wähle Weiter: Schlagworte.
8. (Optional) Füge Schlagworte hinzu und wähle dann Weiter: Bewertung.
9. Gib als Rollenname prods3role ein.
10. Wähle Rolle erstellen.
11. Wähle aus der Liste der Rollen die Option prods3role.
12. Wähle die Vertrauensbeziehung. Wähle dann Vertrauensbeziehung bearbeiten.
13. Gib im Editor für Richtliniendokumente die folgende Richtlinie ein:
Wichtig: Ersetze dev-account-id durch die AWS-Konto-ID deines Entwicklungskontos. Ersetze AWSCodePipelineServiceRole-us-east-1-crossaccountdeploy durch den Namen der Servicerolle für deine Pipeline.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::<dev-account-id>:role/service-role/AWSCodePipelineServiceRole-us-east-1-crossaccountdeploy" ] }, "Action": "sts:AssumeRole", "Condition": {} } ] }
14. Wähle Trust Policy aktualisieren.
Aktualisiere die Bucket-Richtlinie für den CodePipeline-Artefakt-Bucket im Entwicklungskonto
1. Öffne die Amazon S3-Konsole im Entwicklungskonto.
2. Wähle in der Liste der Bucket-Namen den Namen deines Artefakt-Buckets in deinem Entwicklungskonto aus (in diesem Beispiel codepipeline-us-east-1-0123456789).
3. Wähle Berechtigungen. Wähle Bucket-Richtlinie.
4. Aktualisiere deine bestehende Richtlinie im Texteditor, sodass sie die folgenden Richtlinienerklärungen enthält:
Wichtig: Um die korrekte JSON-Formatierung einzuhalten, füge nach den vorhandenen Anweisungen ein Komma hinzu. Ersetze ** die account-id** durch die AWS-Konto-ID deines Produktionskontos. Ersetze codepipeline-us-east-1-0123456789 durch den Namen deines Artefakt-Buckets.
{ "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<prod-account-id>:root" }, "Action": [ "s3:Get*", "s3:Put*" ], "Resource": "arn:aws:s3:::codepipeline-us-east-1-0123456789/*" }, { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<prod-account-id>:root" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::codepipeline-us-east-1-0123456789" }
5. Wähle Speichern.
Füge deiner CodePipeline-Servicerolle im Entwicklungskonto eine Richtlinie hinzu, die es ihr ermöglicht, die von dir erstellte kontoübergreifende Rolle anzunehmen
1. Öffne die IAM-Konsole im Entwicklungskonto.
2. Wähle im Navigationsbereich Metrics. Wähle Richtlinie erstellen.
3. Wähle die Registerkarte JSON. Gib dann die folgende Richtlinie in den JSON-Editor ein:
Wichtig: Ersetze die prod-account-id durch die AWS-Konto-ID deines Produktionskontos.
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": [ "arn:aws:iam::<prod-account-id>:role/prods3role" ] } }
4. Wähle Richtlinie überprüfen.
5. Gib als Name assumeprods3role ein.
6. Wähle Richtlinie erstellen.
7. Wähle im Navigationsbereich Rollen. Wähle dann den Namen der Servicerolle für deine Pipeline aus (in diesem Beispiel AWSCodePipelineServiceRole-US-East-1-CrossAccountDeploy).
8. Wähle Richtlinien anhängen. Wähle dann assumeprods3role.
9. Wähle Richtlinie anhängen.
Aktualisiere deine Pipeline, um die kontoübergreifende Rolle im Entwicklungskonto zu verwenden
Hinweis: Wenn du beim Ausführen von Befehlen der AWS Command Line Interface (AWS CLI) Fehler erhältst, stelle sicher, dass du die neueste AWS CLI-Version verwendest.
1. Rufe die Pipeline-Definition als Datei mit dem Namen codepipeline.jsonab, indem du den folgenden AWS-CLI-Befehl ausführst:
Wichtig: Ersetze crossaccountdeploy durch den Namen deiner Pipeline.
aws codepipeline get-pipeline --name crossaccountdeploy > codepipeline.json
2. Füge den ARN der kontoübergreifenden IAM-Rolle (roleARN) zum Abschnitt „Bereitstellungsaktion“ der Datei codepipeline.json hinzu. Weitere Informationen findest du in der CodePipeline-Pipeline-Strukturreferenz im CodePipeline-Benutzerhandbuch.
Beispiel für kontoübergreifendes IAM RoleLearn
"roleArn": "arn:aws:iam::your-prod-account id:role/prods3role",
Beispiel für eine Bereitstellungsaktion, die eine kontoübergreifende IAM-Rolle (ARN) beinhaltet
Wichtig: Ersetze die Benutzer-Konto-ID durch die AWS-Konto-ID deines Produktionskontos.
{ "name": "Deploy", "actions": [ { "name": "Deploy", "actionTypeId": { "category": "Deploy", "owner": "AWS", "provider": "S3", "version": "1" }, "runOrder": 1, "configuration": { "BucketName": "codepipeline-output-bucket", "Extract": "true" }, "outputArtifacts": [], "inputArtifacts": [ { "name": "SourceArtifact" } ], "roleArn": "arn:aws:iam::<prod-account-id>:role/prods3role", "region": "us-east-1", "namespace": "DeployVariables" } ] }
3. Entferne den Metadatenbereich am Ende der Datei codepipeline.json.
Wichtig: Stelle sicher, dass du auch das Komma vor dem Metadatenabschnitt entfernst.
Beispiel für einen Abschnitt mit Metadaten
"metadata": { "pipelineArn": "arn:aws:codepipeline:us-east-1:<dev-account-id>:crossaccountdeploy", "created": 1587527378.629, "updated": 1587534327.983 }
4. Aktualisiere die Pipeline, indem du den folgenden Befehl ausführst:
aws codepipeline update-pipeline --cli-input-json file://codepipeline.json
Lade die Beispielwebsite in den Eingabe-Bucket hoch
1. Öffne die Amazon S3-Konsole im Entwicklungskonto.
2. Wähle in der Liste der Bucket-Namen deinen S3-Bucket für die Entwicklungseingabe. Zum Beispiel: codepipeline-input-bucket.
3. Wähle Upload. Wähle dann Dateien hinzufügen.
4. Wähle die Datei sample-website.zip aus, die du zuvor heruntergeladen hast.
5. Wähle Upload, um die Pipeline auszuführen. Wenn die Pipeline läuft, passiert Folgendes:
- Die Quellaktion wählt die Datei sample-website.zip aus dem S3-Bucket für die Entwicklungseingabe (codepipeline-input-bucket). Anschließend platziert die Quellaktion die Zip-Datei als Quellartefakt im Artefakt-Bucket des Entwicklungskontos (codepipeline-us-east-1-0123456789).
- In der Bereitstellungsaktion übernimmt die CodePipeline-Dienstrolle (AWSCodePipelineServiceRole-us-east-1-crossaccountdeploy) die kontenübergreifende Rolle (prods3role) im Produktionskonto.
- CodePipeline verwendet die kontoübergreifende Rolle (prods3role), um auf den KMS-Schlüssel und den Artefakt-Bucket im Entwicklungskonto zuzugreifen. Anschließend stellt CodePipeline die extrahierten Dateien für den S3-Bucket für die Produktionsausgabe (codepipeline-output-bucket) im Produktionskonto bereit.
Hinweis: Das Produktionskonto ist der Besitzer der extrahierten Objekte im S3-Bucket für die Produktionsausgabe (codepipeline-output-bucket).

Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 3 Monaten
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 3 Monaten