Como personalizo meu bootstrap do AWS CDK e implanto a pilha CFNToolkit do CloudFormation?
Quero personalizar meu bootstrap do AWS Cloud Development Kit (AWS CDK) e implantar a pilha CFN do AWS CloudFormation.
Breve descrição
Para usar o AWS CDK, você deve executar um bootstrap na sua conta da AWS. A ação de bootstrap cria os recursos exigidos pelo AWS CDK na conta. É possível personalizar seu modelo de bootstrap para implementar requisitos de conformidade e segurança com as seguintes ações:
- Adicione tags aos recursos.
- Adicione criptografia para buckets do Amazon Simple Storage Service (Amazon S3).
- Use nomes de bucket personalizados do S3.
- Use buckets do S3 existentes ou aplique a entidade principal de privilégio mínimo nos perfis do AWS Identity and Access Management (AWS IAM) gerados pelo modelo de bootstrap.
O comando cdk bootstrap cria uma pilha do CloudFormation com o nome CDKToolkit. Os recursos implantados na pilha CDKToolkit do CloudFormation vêm do modelo.
Para mostrar seu modelo de bootstrap, execute o seguinte comando:
cdk bootstrap --show-template > bootstrap-template.yml
O modelo de bootstrap anterior tem os seguintes recursos:
- Recursos como o bucket do S3
- Chave do AWS Key Management Service (AWS KMS)
- Perfis do IAM
- Parâmetro SSM para versionamento
Para obter mais informações, consulte o AWS CDK Bootstrap Template for Custom Bootstrapping [Modelo de bootstrap do AWS CDK para processo de bootstrap personalizado] no site do GitHub.
É possível personalizar seu modelo de bootstrap para os seguintes casos de uso:
- Use o AWS CDK para implantar somente os recursos que você usa.
- Atualize ou crie um qualificador e um nome personalizados para um bucket do S3 para armazenar ativos de arquivos da aplicação AWS CDK.
- Use um bucket do S3 existente para armazenar ativos de arquivos da aplicação AWS CDK.
Resolução
Para personalizar seu modelo de bootstrap, use um dos seguintes métodos:
Use o AWS CDK para implantar somente os recursos que você usa
O bootstrap do AWS CDK cria um perfil CloudFormationExecutionRole que o CloudFormation assume para implantar sua pilha. Em seguida, o CloudFormation usa esse perfil para implantar a partir de sua máquina local com o comando cdk deploy ou para implantar por meio de CDK pipelines do AWS para CI/CD.
Para permitir que recursos sejam criados com o AWS CDK, o CloudFormationExecutionRole tem a política arn:aws:iam:aws:policy/AdministratorAccess que concede acesso total para realizar todas as ações. Observe que essa política vai contra o princípio do privilégio mínimo. Para restringir essa política, você deve criar uma nova política e, em seguida, executar um bootstrap no AWS CDK com a nova política personalizada.
Observação: Certifique-se de revisar todos os comandos e substituir todas as instâncias de strings de exemplo pelos valores necessários.
-
Crie uma política personalizada no IAM:
aws iam create-policy \ --policy-name cdkCFExecutionPolicy \ --policy-document file://example-custom-Execution-Policy-name.json -
Use a política do IAM recém-criada para executar um bootstrap no AWS CDK:
ACCOUNT_ID=$(aws sts get-caller-identity --query "Account" --output text) cdk bootstrap aws://$ACCOUNT_ID/example-Region \ --cloudformation-execution-policies "arn:aws:iam::$ACCOUNT_ID:policy/example-custom-Execution-Policy-name" -
(Opcional) se a conta já estiver inicializada, execute novamente o comando cdk bootstrap com a nova política personalizada.
-
(Opcional) Atualize sua política conforme exigido pela aplicação AWS CDK e crie uma nova versão da política. Novas versões da política podem ser definidas como a política padrão.
Observação: Somente cinco versões da política podem ser salvas no IAM. Exclua as versões anteriores conforme necessário se você atualizar sua política.
Atualize ou crie um qualificador e um nome personalizados para um bucket do S3 para armazenar ativos de arquivos da aplicação AWS CDK
-
Passe sinalizadores extras para qualificador e bootstrap-bucket-name para inicializar a conta. Esses sinalizadores criam ou atualizam a pilha CDKToolkit CloudFormation com novos valores para os recursos.
cdk bootstrap --template bootstrap-template.yml --qualifier <example-custom-qualifier-value> --bootstrap-bucket-name <example-custom-bucket-name> --profile <example-profile-name> -
Atualize o arquivo app.py com os seguintes valores:
import os import aws_cdk as cdk from myproject.myproject_stack import MyprojectStack app = cdk.App() MyprojectStack(app, "MyprojectStack", synthesizer=cdk.DefaultStackSynthesizer(qualifier="<example-custom-qualifier-value>", file_assets_bucket_name="<example-custom-bucket-name>")) app.synth()
Observação: Se a pilha CDKToolkit falhar na implantação devido a um recurso que já existe, primeiro identifique e exclua o recurso se ele não for necessário. Em seguida, execute o bootstrap a partir da pilha do CloudFormation novamente.
Use um bucket do S3 existente para armazenar ativos de arquivos da aplicação AWS CDK
As aplicações do AWS CDK usam o nome e a localização do bucket do S3 na seção Pilha CDKToolkit AWS CloudFormation > Saídas. Para usar um bucket do S3 existente, você deve modificar o bootstrap-template.yml:
-
Modifique o valor de Saídas para BucketName e BucketDomainName pelos detalhes do seu bucket do S3 existente:
Outputs: BucketName: Description: The name of S3 bucket owned by the CDK toolkit stack Value: <example-existing-bucket-name> BucketDomainName: Description: The domain name of the S3 bucket owned by the CDK toolkit stack Value: <example-existing-bucket-name>.s3.<example-Region>.amazonaws.com -
Adicione o ARN do bucket do S3 existente nos recursos DeploymentActionRole e FilePublishingRoleDefaultPolicy do bootstrap-template.yml:
Resources: DeploymentActionRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Statement: - Action: sts:AssumeRole Effect: Allow Principal: AWS: Ref: AWS::AccountId - Fn::If: - HasTrustedAccounts - Action: sts:AssumeRole Effect: Allow Principal: AWS: Ref: TrustedAccounts - Ref: AWS::NoValue Policies: - PolicyDocument: Statement: - Sid: CliStagingBucket Effect: Allow Action: - s3:GetObject* - s3:GetBucket* - s3:List* Resource: - Fn::Sub: ${StagingBucket.Arn} - Fn::Sub: ${StagingBucket.Arn}/* - arn:aws:s3:::<example-existing-bucket-name> - arn:aws:s3:::<example-existing-bucket-name>/ Version: "example-version" PolicyName: default RoleName: Fn::Sub: cdk-${Qualifier}-deploy-role-${AWS::AccountId}-${AWS::Region} Tags: - Key: aws-cdk:bootstrap-role Value: deploy FilePublishingRoleDefaultPolicy: Type: AWS::IAM::Policy Properties: PolicyDocument: Statement: - Action: - s3:GetObject* - s3:GetBucket* - s3:GetEncryptionConfiguration - s3:List* - s3:DeleteObject* - s3:PutObject* - s3:Abort* Resource: - Fn::Sub: ${StagingBucket.Arn} - Fn::Sub: ${StagingBucket.Arn}/* - arn:aws:s3:::<example-existing-bucket-name>/ - arn:aws:s3:::<example-existing-bucket-name> Effect: Allow - Action: - kms:Decrypt - kms:DescribeKey - kms:Encrypt - kms:ReEncrypt* - kms:GenerateDataKey* Effect: Allow Resource: Fn::If: - CreateNewKey - Fn::Sub: ${FileAssetsBucketEncryptionKey.Arn} - Fn::Sub: arn:${AWS::Partition}:kms:${AWS::Region}:${AWS::AccountId}:key/${FileAssetsBucketKmsKeyId} Version: "example-version" Roles: - Ref: FilePublishingRole PolicyName: Fn::Sub: cdk-${Qualifier}-file-publishing-role-default-policy-${AWS::AccountId}-${AWS::Region} -
Execute o comando cdk bootstrap. A pilha CDKToolkit do CloudFormation é criada ou atualizada com as alterações anteriores.
-
Para fazer o upload dos ativos do arquivo para seu bucket do S3 existente em seu projeto, edite o sintetizador de pilha para CDK. Inclua o seguinte em seu arquivo app.py:
MyprojectStack(app, "MyprojectStack", synthesizer=cdk.DefaultStackSynthesizer(file_assets_bucket_name="<example-existing-bucket-name>"))
Observação: É possível configurar e personalizar parâmetros extras. Para obter mais informações, consulte Personalizando o processo de bootstrap.
- Idioma
- Português
Vídeos relacionados


Conteúdo relevante
- Resposta aceitafeita há 10 meses