Como uso o CodePipeline para implantar um CloudFormation StackSet gerenciado por serviços em uma conta de administrador delegado?
Quero usar o AWS CodePipeline para implantar um AWS CloudFormation StackSet para direcionar unidades organizacionais (UOs) no AWS Organizations. Quero usar permissões gerenciadas pelo serviço para implantar a pilha em uma conta de administrador delegado.
Resolução
Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Pré-requisito: ative o acesso confiável entre AWS CloudFormation StackSets e o Organizations. Para obter permissões, consulte Permissions required to enable trusted access (Permissões necessárias para ativar o acesso confiável). Você deve ser um usuário administrador na conta gerencial para ativar o acesso confiável.
Registrar a conta de administrador delegado
Para delegar uma conta de membro como conta de administrador, execute o seguinte comando register-delegated-administrator da AWS CLI:
aws organizations register-delegated-administrator \ --service-principal=member.org.stacksets.cloudformation.amazonaws.com \ --account-id="111122223333"
Observação: substitua 111122223333 pelo ID da sua conta.
Para verificar o registro, execute o seguinte comando list-delegated-administrators da CLI:
aws organizations list-delegated-administrators \ --service-principal=member.org.stacksets.cloudformation.amazonaws.com
Configurar o pipeline
Para criar um pipeline que permita ações do CloudFormation, é possível usar o console do Codepipeline ou a AWS CLI.
Usar o console
Para usar o console do CodePipeline para criar um pipeline, consulte Create a pipeline from static templates (Criar um pipeline a partir de modelos estáticos). Em Configurar modelo, adicione o seguinte modelo 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
Observação: o perfil de serviço do AWS Identity and Access Management (AWS IAM) que você especificou para CallAs deve ter a permissão organizations:ListDelegatedAdministrators.
Usar a AWS CLI
Para usar a AWS CLI para criar o pipeline, consulte Criar um pipeline (CLI).
(Opcional) Criar uma pilha
Se você não usar um modelo para criar seu pipeline, deverá criar uma pilha no CloudFormation para seu pipeline.
Usar o console
Para usar o console do CloudFormation para criar uma pilha, consulte Criar uma pilha. Na seção Parâmetros, adicione as regiões AWS nas quais as instâncias do StackSet são implantadas. Por exemplo, inclua aa-example-1, aa-example-2 em TargetRegions. Certifique-se de que o perfil de serviço do IAM que você especificou para CallAs tenha a permissão organizations:ListDelegatedAdministrators.
Observação: depois de criar a pilha, espera-se que o pipeline falhe porque você não fez o upload do arquivo .zip de origem. Carregue o arquivo .zip depois de preparar os arquivos de origem.
Usar a AWS CLI
Use o mesmo caminho de arquivo usado para cp-template.yaml e, em seguida, execute o seguinte comando create-stack da AWS CLI:
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
Observação: substitua stack-name pelo nome da sua pilha, //./cp-template.yaml pelo seu caminho de arquivo e aa-example-1 e aa-example-2 pelas suas regiões.
Fazer upload de arquivos de origem no bucket do Amazon S3
Preparar os arquivos de origem
Para definir destinos de implantação, crie um arquivo .txt e nomeie-o como ou.txt. Adicione o código a seguir ao arquivo.txt:
["ou-xrop-xxxxxxxx","ou-xrop-yyyyyyyy"]
Para definir os parâmetros do modelo do CloudFormation, crie um arquivo .txt e nomeie-o como parameters.txt. Adicione o código a seguir ao arquivo.txt:
[ { "ParameterKey": "VersioningStatus", "ParameterValue": "Enabled" } ]
Para criar o modelo do StackSet, crie um arquivo .txt e nomeie-o como template.yaml. Adicione o código a seguir ao arquivo.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
Implantar os arquivos de origem
Comprima os três arquivos em source.zip e, em seguida, faça o upload do arquivo .zip no diretório raiz do bucket de origem do Amazon Simple Storage Service (Amazon S3). Se o pipeline falhar e você receber o erro "Account used is not a delegated administrator", confirme que registrou a conta como administrador delegado.
Informações relacionadas
AWS CloudFormation StackSets deploy action reference (Referência de ação de implantação do AWS CloudFormation StackSets)
Como resolvo o erro ao executar a operação ListStackSets?"Account used is not a delegated administrator"
- Tópicos
- Management & Governance
- Idioma
- Português

Conteúdo relevante
- feita há um mês
- feita há 2 meses
- feita há 7 meses