Wie verwende ich CodePipeline, um ein vom Dienst verwaltetes CloudFormation StackSet in einem delegierten Administratorkonto bereitzustellen?
Ich möchte AWS CodePipeline verwenden, um ein AWS CloudFormation StackSet für Zielorganisationseinheiten (OUs) in AWS-Organisationen bereitzustellen. Ich möchte dienstverwaltete Berechtigungen verwenden, um den Stack in einem delegierten Administratorkonto bereitzustellen.
Behebung
Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (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.
Voraussetzung: Aktiviere den vertrauenswürdigen Zugriff zwischen AWS CloudFormation StackSets und Organizations. Informationen zu Berechtigungen findest du unter Berechtigungen, die für den vertrauenswürdigen Zugriff erforderlich sind. Du musst ein Administratorbenutzer im Verwaltungskonto sein, um den vertrauenswürdigen Zugriff zu aktivieren.
Delegiertes Administratorkonto registrieren
Um ein Mitgliedskonto als Administratorkonto zu delegieren, führe den folgenden AWS-CLI-Befehl register-delegated-administrator aus:
aws organizations register-delegated-administrator \ --service-principal=member.org.stacksets.cloudformation.amazonaws.com \ --account-id="111122223333"
Hinweis: Ersetze 111122223333 durch deine AWS-Konto-ID.
Führe den folgenden CLI-Befehl list-delegated-administrators aus, um die Registrierung zu überprüfen:
aws organizations list-delegated-administrators \ --service-principal=member.org.stacksets.cloudformation.amazonaws.com
Pipeline einrichten
Um eine Pipeline zu erstellen, die CloudFormation-Aktionen ermöglicht, kannst du die Code-Pipeline-Konsole oder die AWS-CLI verwenden.
Konsole verwenden
Informationen zum Erstellen einer Pipeline mithilfe der CodePipeline-Konsole findest du unter Erstellen einer Pipeline aus statischen Vorlagen. Füge für Vorlage konfigurieren die folgende cp-template.yaml-Vorlage hinzu:
AWSTemplateFormatVersion: "2010-09-09" Parameters: TargetRegions: Type: String Resources: Bucket: Type: "AWS::S3::Bucket" DeletionPolicy: Retain Properties: VersioningConfiguration: Status: Enabled ServiceRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Principal: Service: - codepipeline.amazonaws.com Action: - sts:AssumeRole Policies: - PolicyName: CodePipelinePermissions PolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Action: - s3:GetObject - s3:GetObjectVersion - s3:GetBucketVersioning - s3:PutObject - s3:PutObjectAcl Resource: - !Sub arn:aws:s3:::${Bucket} - !Sub arn:aws:s3:::${Bucket}/* - Effect: Allow Action: - cloudformation:CreateStackSet - cloudformation:UpdateStackSet - cloudformation:DeleteStackSet - cloudformation:DescribeStackSet - cloudformation:DescribeStackSetOperation - cloudformation:ListStackInstances - cloudformation:CreateStackInstances Resource: "*" - Effect: Allow Action: - organizations:ListDelegatedAdministrators Resource: "*" Pipeline: Type: AWS::CodePipeline::Pipeline Properties: RoleArn: !GetAtt ServiceRole.Arn ArtifactStore: Type: S3 Location: !Ref Bucket Stages: - Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: AWS Provider: S3 Version: "1" Configuration: S3Bucket: !Ref Bucket S3ObjectKey: "source.zip" PollForSourceChanges: false OutputArtifacts: - Name: SourceArtifact - Name: Deploy Actions: - Name: ServiceManaged-SS RunOrder: "1" ActionTypeId: Category: Deploy Owner: AWS Provider: CloudFormationStackSet Version: "1" Configuration: PermissionModel: SERVICE_MANAGED CallAs: DELEGATED_ADMIN OrganizationsAutoDeployment: Enabled Regions: !Ref TargetRegions StackSetName: !Sub codepipeline-deployed-cfn-${AWS::AccountId}-stackset MaxConcurrentPercentage: "50" FailureTolerancePercentage: "100" ConcurrencyMode: SOFT_FAILURE_TOLERANCE Capabilities: CAPABILITY_NAMED_IAM,CAPABILITY_IAM,CAPABILITY_AUTO_EXPAND DeploymentTargets: "SourceArtifact::ou.txt" TemplatePath: "SourceArtifact::template.yaml" Parameters: "SourceArtifact::parameters.txt" InputArtifacts: - Name: SourceArtifact
Hinweis: Die AWS Identity and Access Management (IAM)-Servicerolle, die du für CallAs angegeben hast, muss über die Berechtigung organizations:ListDelegatedAdministrators verfügen.
AWS CLI verwenden
Informationen zur Verwendung der AWS-CLI zum Erstellen der Pipeline findest du unter Pipeline erstellen (CLI).
(Optional) Stapel erstellen
Wenn du keine Vorlage verwendest, um deine Pipeline zu erstellen, musst du in CloudFormation einen Stack für deine Pipeline erstellen.
Konsole verwenden
Informationen zum Erstellen eines Stacks mithilfe der CloudFormation-Konsole findest du unter Stapel erstellen. Füge im Abschnitt Parameter die AWS-Regionen hinzu, in denen die StackSet-Instances bereitgestellt werden. Füge beispielsweise aa-example-1, aa-example-2 in TargetRegions ein. Stelle sicher, dass die IAM-Servicerolle, die du für CallAs angegeben hast, über die Berechtigung organizations:ListDelegatedAdministrators verfügt.
Hinweis: Nachdem du den Stack erstellt hast, wird erwartet, dass die Pipeline fehlschlägt, weil du die ZIP-Quelldatei nicht hochgeladen hast. Du lädst die ZIP-Datei hoch, nachdem du die Quelldateien vorbereitet hast.
AWS CLI verwenden
Verwende denselben Dateipfad, den du für cp-template.yaml verwendet hast, und führe dann den folgenden create-stack-AWS-CLI-Befehl aus:
aws cloudformation create-stack \ --stack-name stack-name \ --capabilities CAPABILITY_NAMED_IAM \ --template-body file://cp-template.yaml \ --parameters ParameterKey=TargetRegions,ParameterValue=aa-example-1\\,aa-example-2
Hinweis: Ersetze stack-name durch den Namen deines Stacks, //./cp-template.yaml mit deinem Dateipfad und aa-example-1 sowie aa-example-2 mit deinen Regionen.
Quelldateien in deinen Amazon S3-Bucket hochladen
Quelldateien vorbereiten
Um Bereitstellungsziele zu definieren, erstelle eine TXT-Datei und nenne sie ou.txt. Füge der TXT-Datei den folgenden Code hinzu:
["ou-xrop-xxxxxxxx","ou-xrop-yyyyyyyy"]
Um die CloudFormation-Vorlagenparameter zu definieren, erstelle eine TXT-Datei und nenne sie parameters.txt. Füge der TXT-Datei den folgenden Code hinzu:
[ { "ParameterKey": "VersioningStatus", "ParameterValue": "Enabled" } ]
Um die StackSet-Vorlage zu erstellen, erstelle eine TXT-Datei und nenne sie template.yaml. Füge der TXT-Datei den folgenden Code hinzu:
AWSTemplateFormatVersion: 2010-09-09 Parameters: VersioningStatus: Type: String Default: Suspended AllowedValues: - Enabled - Suspended Resources: S3Bucket: Type: 'AWS::S3::Bucket' DeletionPolicy: Delete Properties: VersioningConfiguration: Status: !Ref VersioningStatus
Quelldateien bereitstellen
Komprimiere die drei Dateien in source.zip und lade dann die ZIP-Datei in das Stammverzeichnis des Amazon Simple Storage Service (Amazon S3)-Quell-Buckets hoch. Wenn die Pipeline fehlschlägt und der Fehler "Account used is not a delegated administrator" angezeigt wird, bestätige, dass du das Konto als delegierter Administrator registriert hast.
Ähnliche Informationen
Aktionsreferenz für die Bereitstellung von AWS CloudFormation StackSets
Wie behebe ich den Fehler , wenn ich den ListStackSets-Vorgang ausführe?"Account used is not a delegated administrator"
- Themen
- Management & Governance
- Sprache
- Deutsch

Relevanter Inhalt
AWS OFFICIALAktualisiert vor 2 Monaten