Come posso utilizzare CodePipeline per distribuire uno StackSet CloudFormation gestito dal servizio in un account amministratore delegato?
Desidero utilizzare AWS CodePipeline per distribuire uno StackSet AWS CloudFormation che utilizzi come destinazioni unità organizzative (UO) in AWS Organizations. Desidero utilizzare le autorizzazioni gestite dal servizio per distribuire lo stack in un account amministratore delegato.
Risoluzione
Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.
Prerequisito: attiva l'accesso attendibile tra AWS CloudFormation StackSets e Organizations. Per le autorizzazioni, consulta Autorizzazioni necessarie per abilitare l'accesso attendibile. Devi essere un utente amministratore nell'account di gestione per abilitare l'accesso attendibile.
Registra l'account amministratore delegato
Per delegare un account membro come account amministratore, esegui questo comando AWS CLI register-delegated-administrator:
aws organizations register-delegated-administrator \ --service-principal=member.org.stacksets.cloudformation.amazonaws.com \ --account-id="111122223333"
Nota: sostituisci 111122223333 con l'ID del tuo account.
Per verificare la registrazione, esegui questo comando CLI list-delegated-administrators:
aws organizations list-delegated-administrators \ --service-principal=member.org.stacksets.cloudformation.amazonaws.com
Configura la pipeline
Per creare una pipeline che consenta le operazioni di CloudFormation, puoi utilizzare la console Codepipeline o AWS CLI.
Utilizza la console
Per creare una pipeline utilizzando la console CodePipeline, consulta Crea una pipeline da modelli statici. Per Configure template (Configura modello), aggiungi questo modello cp-template.yaml:
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
Nota: il ruolo di servizio AWS Identity and Access Management (AWS IAM) specificato per CallAs deve avere l'autorizzazione organizations:ListDelegatedAdministrators.
Utilizza AWS CLI
Per creare la pipeline utilizzando AWS CLI, consulta Creazione di una pipeline (CLI).
(Facoltativo) Crea uno stack
Se non utilizzi un modello per creare la pipeline, devi creare uno stack in CloudFormation per la pipeline.
Utilizza la console
Per creare uno stack utilizzando la console CloudFormation, consulta Creazione di uno stack. Nella sezione Parametri, aggiungi le Regioni AWS in cui vengono distribuite le istanze StackSet. Ad esempio, includi aa-example-1, aa-example-2 in TargetRegions. Assicurati che il ruolo di servizio IAM specificato per CallAs abbia l'autorizzazione organizations:ListDelegatedAdministrators.
Nota: dopo aver creato lo stack, è normale che la pipeline generi un errore perché non hai caricato il file .zip di origine. Il file .zip viene caricato dopo aver preparato i file di origine.
Utilizza AWS CLI
Utilizza lo stesso percorso di file che hai usato per cp-template.yaml, quindi esegui questo comando AWS CLI create-stack:
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
Nota: sostituisci stack-name con il nome del tuo stack, //./cp-template.yaml con il percorso del tuo file e aa-example-1 e aa-example-2 con le tue Regioni.
Carica i file di origine nel bucket Amazon S3
Prepara i file di origine
Per definire le destinazioni della distribuzione, create un file .txt denominato ou.txt. Aggiungi il seguente codice al file .txt:
["ou-xrop-xxxxxxxx","ou-xrop-yyyyyyyy"]
Per definire i parametri del modello CloudFormation, crea un file .txt denominato parameters.txt. Aggiungi il seguente codice al file .txt:
[ { "ParameterKey": "VersioningStatus", "ParameterValue": "Enabled" } ]
Per creare il modello StackSet, crea un file .txt denominato template.yaml. Aggiungi il seguente codice al file .txt:
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
Distribuisci i file di origine
Comprimi i tre file in source.zip, quindi carica il file .zip nella directory principale del bucket Amazon Simple Storage Service (Amazon S3) di origine. Se la pipeline dà esito negativo e ricevi l'errore "Account used is not a delegated administrator", verifica di aver registrato l'account come amministratore delegato.
Informazioni correlate
Riferimento alle operazioni di distribuzione di AWS CloudFormation StackSets
How do I resolve the error when I run the ListStackSets operation?"Account used is not a delegated administrator" (Come posso risolvere l'errore "Account used is not a delegated administrator" quando eseguo l'operazione ListStackSets?)
- Argomenti
- Management & Governance
- Lingua
- Italiano
