Wie stelle ich mithilfe von CodePipeline und einer vorgefertigten ACL Artefakte in Amazon S3 in einem anderen AWS-Konto bereit?

Lesedauer: 5 Minute
0

Ich möchte Artefakte in einem Amazon Simple Storage Service (Amazon S3) -Bucket in einem anderen Konto bereitstellen. Gibt es eine Möglichkeit, dies mithilfe von AWS CodePipeline mit einem Amazon S3-Bereitstellungsaktionsanbieter und einer vorgefertigten Access Control List (ACL) zu tun?

Behebung

Hinweis: Das folgende Beispielverfahren setzt Folgendes voraus:

  • Sie haben zwei AWS-Konten: Ein Entwicklungskonto und ein Produktionskonto.
  • Der Eingabe-Bucket im Entwicklungskonto heißt codepipeline-input-bucket (mit aktivierter Versionierung).
  • Der Standardartefact-Bucket im Entwicklungskonto heißt codepipeline-us-east-1-0123456789.
  • Der Ausgabe-Bucket im Produktionskonto wird codepipeline-output-bucket.
  • Sie stellen Artefakte aus dem Entwicklungskonto in einen S3-Bucket im Produktionskonto bereit.
  • Sie verwenden eine vorgefertigte ACL, um dem Bucket-Besitzer im Produktionskonto Zugriff auf die Objekte zu gewähren, die dem Entwicklungskonto gehören.
    Hinweis: Informationen zur Bereitstellung von Artefakten und zum Festlegen des Produktionskontos als Objekteigentümer finden Sie unter Wie stelle ich mithilfe von CodePipeline Artefakte in Amazon S3 in einem anderen Konto bereit?

Erstellen Sie eine CodePipeline im Entwicklungskonto

1.    Öffnen Sie die CodePipeline-Konsole. Wählen Sie dann Create pipeline.

2.    Geben Sie unter Pipeline-Name einen Namen für Ihre Pipeline ein. Zum Beispiel: crossaccountdeploy.

Hinweis: Das Textfeld Rollenname wird automatisch mit dem Dienstrollennamen AWSCodePipelineServiceRole-us-east-1-crossaccountdeploy gefüllt. Sie können auch eine andere, bestehende Servicerolle wählen.

3.    Erweitern Sie den Abschnitt Erweiterte Einstellungen.

4.    Wählen Sie für den Artefaktspeicher die Option Standardspeicherort.
Hinweis: Sie können Benutzerdefinierter Standort auswählen, wenn dies für Ihren Anwendungsfall erforderlich ist.

5.    Wählen Sie für den **Verschlüsselungsschlüssel **die Option Standardschlüssel von AWS.

6.    Wählen Sie Next (Weiter).

7.    Wählen Sie auf der Seite Quellphase hinzufügen für Quellanbieter die Option Amazon S3.

8.    Geben Sie für Bucket den Namen Ihres 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.    Geben Sie für den S3-Objektschlüssel sample-website.zip ein.

Wichtig: Um eine AWS-Beispielwebsite anstelle Ihrer eigenen Website zu verwenden, sehen Sie sich das Tutorial an: Erstellen Sie eine Pipeline, die Amazon S3 als Bereitstellungsanbieter verwendet. Suchen Sie dann in den Voraussetzungen von **1 nach „Beispiel für eine statische Website“: Stellen Sie statische Website-Dateien im Amazon **S3-Abschnitt bereit.

10.    Wählen Sie für Optionen zur Änderungserkennung die Option Amazon CloudWatch Events (empfohlen).

11.    Wählen Sie Next (Weiter).

12.    Wählen Sie auf der Seite Build-Phase hinzufügen die Option Build-Phase Überspringen. Wählen Sie dann Überspringen.

13.    Wählen Sie auf der Seite Bereitstellungsphase hinzufügen für Bereitstellungsanbieter die Option Amazon S3.

14.    Wählen Sie für Region die AWS-Region aus, in der sich Ihr S3-Ausgabe-Bucket befindet. Zum Beispiel: USA Ost (Nord-Virginia).

15.    Geben Sie für Bucket den Namen Ihres S3-Buckets für die Produktionsausgabe ein. Zum Beispiel: codepipeline-output-bucket.

16.    Aktivieren Sie das Kontrollkästchen Datei vor der Bereitstellung extrahieren.
Hinweis: Geben Sie bei Bedarf einen Pfad für den Bereitstellungspfad ein.

17.    Erweitern Sie Zusätzliche Konfiguration.

18.    Wählen Sie für Canned ACL die Option bucket-owner-full-control.
Hinweis: Die bucket-owner-full-control gewährt dem Bucket-Besitzer im Produktionskonto vollen Zugriff auf die Objekte, die dem Entwicklungskonto gehören und bereitgestellt werden. Weitere Informationen finden Sie unter Canned ACL.

19.    Wählen Sie Weiter.

20.    Wählen Sie 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 Laden Sie die Beispielwebsite in den Eingabe-Bucket dieses Artikels hoch, wird beschrieben, wie dieser Fehler behoben werden kann.

Konfigurieren Sie eine CodePipeline-Servicerolle mit einer AWS-Richtlinie für Identity and Access Management (IAM), die S3-Zugriff für den Output-Bucket des Produktionskontos hinzufügt

1.    Öffnen Sie die IAM-Konsole im Entwicklungskonto.

2.    Wählen Sie im Navigationsbereich Metrics. Wählen Sie Richtlinie erstellen.

3.    Wählen Sie die Registerkarte JSON. Geben Sie dann die folgende Richtlinie in den JSON-Editor ein:

Wichtig: Ersetzen Sie codepipeline-output-bucket durch den Namen Ihres S3-Buckets für die Produktionsausgabe.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": "arn:aws:s3:::codepipeline-output-bucket/*"
    },
    {
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::codepipeline-output-bucket"
    }
  ]
}

4.    Wählen Sie Richtlinie überprüfen.

5.    Geben Sie unter Name einen Namen für die Richtlinie ein. Zum Beispiel: prodbucketaccess.

6.    Wählen Sie Richtlinie erstellen.

7.    Wählen Sie im Navigationsbereich Rollen.

8.    Wählen Sie aus der Rollenliste AWSCodePipelineServiceRole-us-east-1-crossaccountdeploy. Dies ist die CodePipeline-Servicerolle.
Hinweis: Sie können Ihre eigene Servicerolle verwenden, falls dies für Ihren Anwendungsfall erforderlich ist.

9.    Wählen Sie Richtlinien anhängen.

10.    Wählen Sie die Richtlinie aus, die Sie erstellt haben (prodbucketaccess). Wählen Sie dann Richtlinie anhängen, um CodePipeline Zugriff auf den S3-Bucket für die Produktionsausgabe zu gewähren.

Konfigurieren Sie den Output-Bucket im Produktionskonto, um den Zugriff vom Entwicklungskonto aus zu ermöglichen

1.    Öffnen Sie die Amazon S3-Konsole im Produktionskonto.

2.    Wählen Sie in der Liste mit den Bucket-Namen Ihren S3-Bucket für die Produktionsausgabe. Zum Beispiel: codepipeline-output-bucket.

3.    Wählen Sie Berechtigungen. Wählen Sie Bucket-Richtlinie.

4.    Geben Sie im Texteditor die folgende Richtlinie ein und wählen Sie dann Speichern aus:

Wichtig: Ersetzen Sie dev-account-id durch die AWS-Konto-ID Ihrer Entwicklungsumgebung. Ersetzen Sie codepipeline-output-bucket durch den Namen Ihres S3-Buckets für die Produktionsausgabe.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::dev-account-id:root"
      },
      "Action": "s3:Put*",
      "Resource": "arn:aws:s3:::codepipeline-output-bucket/*"
    },
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::dev-account-id:root"
      },
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::codepipeline-output-bucket"
    }
  ]
}

Laden Sie die Beispielwebsite in den Eingabe-Bucket hoch

1.    Öffnen Sie die Amazon S3-Konsole im Entwicklungskonto.

2.    Wählen Sie in der Liste der Bucket-Namen Ihren S3-Bucket für die Entwicklungseingabe. Zum Beispiel: codepipeline-input-bucket.

3.    Wählen Sie Upload. Wählen Sie dann Dateien hinzufügen.

4.    Wählen Sie die heruntergeladene Datei sample-website.zip.

5.    Wählen Sie 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 Standardartefact-Bucket des Entwicklungskontos (codepipeline-us-east-1-0123456789).
  • In der Bereitstellungsaktion verwendet die CodePipeline-Dienstrolle (AWSCodePipelineServiceRole-us-east-1-crossaccountdeploy) ihren Zugriff für die Bereitstellung im S3-Bucket der Produktionsausgabe (codepipeline-output-bucket). Die Deploy-Aktion wendet auch die vordefinierte ACL bucket-owner-full-control.

Hinweis: Das Entwicklungskonto ist der Besitzer der extrahierten Objekte im S3-Bucket für die Produktionsausgabe (codepipeline-output-bucket). Der Bucket-Besitzer im Produktionskonto hat auch vollen Zugriff auf die bereitgestellten Artefakte.


AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr