En utilisant AWS re:Post, vous acceptez les AWS re:Post Conditions d’utilisation

Comment puis-je personnaliser mon amorçage AWS CDK et déployer la pile CFNToolkit CloudFormation ?

Lecture de 6 minute(s)
0

Je souhaite personnaliser mon amorçage AWS Cloud Development Kit (AWS CDK) et déployer la pile CFN AWS CloudFormation.

Brève description

Pour utiliser AWS CDK, vous devez démarrer votre compte AWS. L'action d’amorçage crée les ressources requises par AWS CDK sur le compte. Vous pouvez personnaliser votre modèle d'amorçage pour implémenter les exigences de conformité et de sécurité en procédant comme suit :

  • Ajoutez des identifications aux ressources.
  • Ajoutez le chiffrement pour les compartiments Amazon Simple Storage Service (Amazon S3).
  • Utilisez des noms de compartiments S3 personnalisés.
  • Utilisez les compartiments S3 existants ou appliquez le principal le moins privilégié aux rôles AWS Identity and Access Management (IAM) générés par le modèle d’amorçage.

La commande cdk bootstrap crée une pile CloudFormation nommée CDKToolkit. Les ressources déployées dans la pile CloudFormation CDKToolkit proviennent du modèle.

Pour afficher votre modèle d’amorçage, exécutez la commande suivante :

cdk bootstrap --show-template > bootstrap-template.yml

Le modèle d’amorçage précédent contient les ressources suivantes :

  • Ressources telles que le compartiment S3
  • Créer une clé AWS KMS (Key Management Service)
  • Rôles IAM
  • Paramètre SSM pour la gestion des versions

Pour plus d'informations, consultez la page Modèle d’amorçage AWS CDK pour un amorçage personnalisé sur le site Web de GitHub.

Vous pouvez personnaliser votre modèle d’amorçage pour les cas d'utilisation suivants :

  • Utilisez AWS CDK pour déployer uniquement les ressources que vous utilisez.
  • Mettez à jour ou créez un qualificateur et un nom personnalisés pour un compartiment S3 afin de stocker les ressources de fichier d’application AWS CDK.
  • Utilisez un compartiment S3 existant pour stocker les ressources de fichier d’application AWS CDK.

Résolution

Pour personnaliser votre modèle d’amorçage, utilisez l'une des méthodes suivantes :

Utilisez AWS CDK pour déployer uniquement les ressources que vous utilisez

L’amorçage AWS CDK crée un rôle CloudFormationExecutionRole que CloudFormation endosse pour déployer votre pile. CloudFormation utilise ensuite ce rôle pour un déploiement depuis votre machine locale à l'aide de la commande cdk deploy ou pour un déploiement via les pipelines AWS CDK pour CI/CD.

Pour permettre la création de ressources avec AWS CDK, CloudFormationExecutionRole utilise la politique arn:aws:iam:aws:policy/AdministratorAccess qui accorde un accès complet pour effectuer toutes les actions. Notez que cette politique va à l'encontre du principe du moindre privilège. Pour restreindre cette politique, vous devez créer une nouvelle politique, puis démarrer AWS CDK avec la nouvelle politique personnalisée.

Remarque : Assurez-vous de passer en revue toutes les commandes et de remplacer toutes les instances de chaînes d’exemple par les valeurs requises.

  1. Créez une politique personnalisée dans IAM :

    aws iam create-policy \
      --policy-name cdkCFExecutionPolicy \
      --policy-document file://example-custom-Execution-Policy-name.json
  2. Utilisez la politique IAM nouvellement créée pour démarrer CDK AWS :

    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"
  3. (Facultatif) si le compte est déjà amorcé, ré-exécutez la commande cdk bootstrap avec la nouvelle politique personnalisée.

  4. (Facultatif) Mettez à jour votre politique comme l'exige l'application AWS CDK pour créer une nouvelle version de politique. Les nouvelles versions de politique peuvent être définies comme politique par défaut.

Remarque : Seules cinq versions de politique peuvent être enregistrées dans IAM. Supprimez les versions antérieures si nécessaire si vous mettez à jour votre politique.

Mettez à jour ou créez un qualificateur et un nom personnalisés pour un compartiment S3 afin de stocker les ressources de fichier d’application AWS CDK

  1. Transmettez des identifications supplémentaires au qualificateur et bootstrap-bucket-name pour amorcer le compte. Ces identifications créent ou mettent à jour la pile CDKToolkit CloudFormation avec de nouvelles valeurs pour les ressources.

    cdk bootstrap --template bootstrap-template.yml --qualifier <example-custom-qualifier-value> --bootstrap-bucket-name <example-custom-bucket-name> --profile <example-profile-name>
  2. Mettez à jour le fichier app.py avec les valeurs suivantes :

    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()

Remarque : Si la pile CDKToolkit ne parvient pas à se déployer en raison d'une ressource déjà existante, identifiez et supprimez d'abord la ressource si elle n'est pas nécessaire. Puis, effectuez à nouveau l’amorçage à partir de la pile CloudFormation.

Utiliser un compartiment S3 existant pour stocker les ressources de fichier d'application AWS CDK

Les applications AWS CDK utilisent le nom et l'emplacement du compartiment S3 contenus dans la section Pile CDKToolkit AWS CloudFormation > Sorties. Pour utiliser un compartiment S3 existant, vous devez modifier le fichier bootstrap-template.yml :

  1. Modifiez la valeur de Sorties pour BucketName et BucketDomainName avec les détails de votre compartiment S3 existant :

    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
  2. Ajoutez l'ARN du compartiment S3 existant dans les ressources DeploymentActionRole et FilePublishingRoleDefaultPolicy du fichier 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}
  3. Exécutez la commande cdk bootstrap. La pile CloudFormation CDKToolkit est créée ou mise à jour avec les modifications précédentes.

  4. Pour charger les ressources de fichier dans votre compartiment S3 existant au sein de votre projet, modifiez le synthétiseur de pile pour CDK. Incluez les éléments suivants dans votre fichier app.py :

    MyprojectStack(app, "MyprojectStack", synthesizer=cdk.DefaultStackSynthesizer(file_assets_bucket_name="<example-existing-bucket-name>"))

Remarque : Vous pouvez configurer et personnaliser des paramètres supplémentaires. Pour plus d'informations, consultez la section Personnalisation de l'amorçage.

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 6 mois