Inicie su entorno para usarlo con AWS CDK - AWS Cloud Development Kit (AWS CDK) v2

Esta es la guía para AWS CDK desarrolladores de la versión 2. La versión anterior del CDK v1 entró en mantenimiento el 1 de junio de 2022 y dejó de ofrecer soporte el 1 de junio de 2023.

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Inicie su entorno para usarlo con AWS CDK

Inicie su AWS entorno para prepararlo para las implementaciones de pilas. AWS Cloud Development Kit (AWS CDK)

Cómo arrancar su entorno

Puede utilizar la interfaz de línea de AWS CDK comandos (AWS CDK CLI) o la herramienta de AWS CloudFormation implementación que prefiera para arrancar su entorno.

Utilice el CDK CLI

Puede usar el CLI cdk bootstrap comando CDK para arrancar su entorno. Este es el método que recomendamos si no necesita realizar modificaciones importantes en el arranque.

Arranca desde cualquier directorio de trabajo

Para arrancar desde cualquier directorio de trabajo, proporcione el entorno de arranque como argumento de línea de comandos. A continuación, se muestra un ejemplo:

$ cdk bootstrap aws://123456789012/us-east-1

Al proporcionar un argumento, el aws:// prefijo es opcional. Lo siguiente es válido:

$ cdk bootstrap 123456789012/us-east-1

Para iniciar varios entornos al mismo tiempo, proporcione varios argumentos:

$ cdk bootstrap aws://123456789012/us-east-1 aws://123456789012/us-east-2
Arranque desde el directorio principal de un proyecto de CDK

Puede ejecutarlo cdk bootstrap desde el directorio principal de un proyecto de CDK que contenga un archivo. cdk.json Si no proporciona un entorno como argumento, la CDK CLI obtendrá la información del entorno de las fuentes predeterminadas, como sus credentials archivos config AND o cualquier información del entorno especificada para su pila de CDK.

Al arrancar desde el directorio principal de un proyecto de CDK, los entornos proporcionados a partir de los argumentos de la línea de comandos tienen prioridad sobre otras fuentes.

Para arrancar un entorno que esté especificado en sus credentials archivos config and, utilice la opción: --profile

$ cdk bootstrap --profile prod

Para obtener más información sobre el cdk bootstrap comando y las opciones compatibles, consultecdk bootstrap.

Utilice cualquier AWS CloudFormation herramienta

Puede copiar la plantilla de arranque del GitHubrepositorio aws-cdk u obtener la plantilla con el comando. cdk bootstrap --show-template A continuación, utilice cualquier AWS CloudFormation herramienta para implementar la plantilla en su entorno.

Con este método, puede usar AWS CloudFormation StackSets o AWS Control Tower. También puede utilizar la AWS CloudFormation consola o el AWS Command Line Interface (AWS CLI). Puede realizar modificaciones en la plantilla antes de implementarla. Este método puede ser más flexible y adecuado para despliegues a gran escala.

A continuación, se muestra un ejemplo del uso de la --show-template opción para recuperar y guardar la plantilla de arranque en su máquina local:

macOS/Linux
$ cdk bootstrap --show-template > bootstrap-template.yaml
Windows

En Windows, PowerShell debe usarse para conservar la codificación de la plantilla.

powershell "cdk bootstrap --show-template | Out-File -encoding utf8 bootstrap-template.yaml"

Para implementar esta plantilla mediante el CDKCLI, puede ejecutar lo siguiente:

$ cdk bootstrap --template bootstrap-template.yaml

El siguiente es un ejemplo del uso de AWS CLI para implementar la plantilla:

macOS/Linux
aws cloudformation create-stack \ --stack-name CDKToolkit \ --template-body file://path/to/bootstrap-template.yaml \ --capabilities CAPABILITY_NAMED_IAM \ --region us-west-1
Windows
aws cloudformation create-stack ^ --stack-name CDKToolkit ^ --template-body file://path/to/bootstrap-template.yaml ^ --capabilities CAPABILITY_NAMED_IAM ^ --region us-west-1

Para obtener información sobre cómo iniciar varios entornos, consulte Cómo iniciar varios entornos Cuentas de AWS para su uso CloudFormation StackSets en el blog de operaciones y AWS CDK CloudFormation StackSets migraciones en la nube de AWS.

¿Cuándo iniciar su entorno

Debe arrancar cada entorno antes de implementarlo en el entorno. Si intenta implementar una pila de CDK en un entorno que no se haya iniciado, aparecerá un error como el siguiente:

$ cdk deploy ✨ Synthesis time: 2.02s ❌ Deployment failed: Error: BootstrapExampleStack: SSM parameter /cdk-bootstrap/hnb659fds/version not found. Has the environment been bootstrapped? Please run 'cdk bootstrap' (see https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html)

Está bien iniciar un entorno más de una vez. Si un entorno ya se ha iniciado, la pila de arranque se actualizará si es necesario. De lo contrario, no pasará nada.

Actualiza tu pila de bootstrap

Periódicamente, el equipo de CDK actualizará la plantilla de bootstrap a una nueva versión. Cuando esto suceda, le recomendamos que actualice su pila de bootstrap. Si no ha personalizado el proceso de arranque, puede actualizar su pila de arranque siguiendo los mismos pasos que siguió para arrancar su entorno originalmente. Para obtener más información, consulte Historial de versiones de la plantilla Bootstrap.

Personalice el arranque

Si la plantilla de arranque predeterminada no se ajusta a sus necesidades, puede personalizar la transferencia de recursos a su entorno de las siguientes maneras:

  • Utilice las opciones de línea de comandos con el cdk bootstrap comando: este método es el mejor para realizar cambios pequeños y específicos que se admiten mediante las opciones de la línea de comandos.

  • Modifique la plantilla de arranque predeterminada e impleméntela: este método es el mejor para realizar cambios complejos o si desea tener un control total sobre la configuración de los recursos aprovisionados durante el arranque.

Para obtener más información sobre la personalización del arranque, consulte. Personaliza el AWS CDK bootstrapping

Puesta en marcha con CDK Pipelines

Si utilizas CDK Pipelines para realizar la implementación en el entorno de otra cuenta y recibes un mensaje como el siguiente:

Policy contains a statement with one or more invalid principals

Este mensaje de error significa que las funciones de IAM adecuadas no existen en el otro entorno. La causa más probable es que el entorno no se haya iniciado. Inicie el entorno e inténtelo de nuevo.

Proteja su pila de bootstrap para que no se elimine

Si se elimina una pila de bootstrap, también se eliminarán los AWS recursos que se aprovisionaron originalmente en el entorno para respaldar las implementaciones de CDK. Esto hará que la canalización deje de funcionar. Si esto sucede, no existe una solución general para la recuperación.

Una vez iniciado el entorno, no elimine ni vuelva a crear la pila de arranque del entorno. En su lugar, intente actualizar la pila de arranque a una nueva versión ejecutando el comando de nuevo. cdk bootstrap

Para evitar que se elimine accidentalmente la pila de bootstrap, le recomendamos que proporcione la --termination-protection opción junto con el cdk bootstrap comando para habilitar la protección de terminación. Puede activar la protección de terminación en pilas de bootstrap nuevas o existentes. Para obtener instrucciones sobre cómo habilitar la protección de terminación, consulte Habilitar la protección de terminación para la pila de arranque.

Historial de versiones de la plantilla Bootstrap

La plantilla bootstrap está versionada y evoluciona con el tiempo consigo misma. AWS CDK Si proporciona su propia plantilla de bootstrap, manténgala actualizada con la plantilla canónica predeterminada. Quieres asegurarte de que tu plantilla siga funcionando con todas las funciones de CDK.

nota

Las versiones anteriores de la plantilla de arranque creaban un entorno AWS KMS key en cada entorno de arranque de forma predeterminada. Para evitar que se le cobre por la clave KMS, reinicie estos entornos utilizando. --no-bootstrap-customer-key El valor predeterminado actual es no tener una clave KMS, lo que ayuda a evitar estos cargos.

Esta sección contiene una lista de los cambios realizados en cada versión.

Versión de plantilla AWS CDK versión Cambios
1 1.40.0 Versión inicial de la plantilla con depósito, clave, repositorio y funciones.
2 1.45.0 Divida la función de publicación de activos en funciones independientes de publicación de archivos e imágenes.
3 1.46.0 Añada la opción de FileAssetKeyArn exportación para poder añadir permisos de descifrado a los consumidores de activos.
4 1.61.0 AWS KMS los permisos ahora están implícitos a través de Amazon S3 y ya no son necesariosFileAsetKeyArn. Agregue CdkBootstrapVersion el parámetro SSM para que la versión de la pila de arranque se pueda verificar sin conocer el nombre de la pila.
5 1.87.0 El rol de despliegue puede leer el parámetro SSM.
6 1.108.0 Añada una función de búsqueda independiente de la función de despliegue.
6 1.109.0 Adjunte una aws-cdk:bootstrap-role etiqueta a las funciones de despliegue, publicación de archivos y publicación de imágenes.
7 1.110.0 La función de despliegue ya no puede leer directamente los buckets de la cuenta de destino. (Sin embargo, este rol es, en efecto, el de administrador y, de todos modos, siempre puede usar sus AWS CloudFormation permisos para hacer que el bucket sea legible).
8 1.114.0 La función de búsqueda tiene permisos completos de solo lectura para el entorno de destino y también tiene una aws-cdk:bootstrap-role etiqueta.
9 2.1.0 Corrige el rechazo de las cargas de activos de Amazon S3 por parte del SCP de cifrado al que se hace referencia comúnmente.
10 2.4.0 Amazon ECR ahora ScanOnPush está activado de forma predeterminada.
11 2.18.0 Añade una política que permite a Lambda extraer datos de los repositorios de Amazon ECR para sobrevivir al reinicio.
12 2.20.0 Añade soporte para experimentoscdk import.
13 2.25.0 Hace que las imágenes de los contenedores de los repositorios Amazon ECR creados por bootstrap sean inmutables.
14 2.34.0 Desactiva de forma predeterminada el escaneo de imágenes de Amazon ECR en el nivel del repositorio para permitir el arranque de regiones que no admiten el escaneo de imágenes.
15. 2.60,0 Las claves KMS no se pueden etiquetar.
16 2.69,0 Aborda que Security Hub encuentra KMS.2.
17 2.72.0 Aborda la búsqueda de ECR.3 por parte de Security Hub.
18 2.80,0 Se han revertido los cambios realizados en la versión 16, ya que no funcionan en todas las particiones y no se recomiendan.
19 2.106.1 Se han revertido los cambios realizados en la versión 18, en los que se eliminaba la AccessControl propiedad de la plantilla. (#27964)
20 2.119.0 Añada ssm:GetParameters una acción a la función de AWS CloudFormation implementación de IAM. Para obtener más información, consulte #28336.

Actualice una plantilla de bootstrap antigua a una moderna

La AWS CDK versión 1 admitía dos plantillas de arranque, la antigua y la moderna. CDK v2 solo admite la plantilla moderna. Como referencia, estas son las diferencias de alto nivel entre estas dos plantillas.

Característica Legacy (solo en la versión 1) Moderno (v1 y v2)
Implementaciones entre cuentas No permitido Permitida
AWS CloudFormation Permisos Se implementa con los permisos del usuario actual (determinados por el AWS perfil, las variables de entorno, etc.) Se despliega con los permisos especificados cuando se aprovisionó la pila de arranque (por ejemplo, mediante el uso) --trust
Control de versiones Solo hay disponible una versión de la pila de bootstrap La pila de Bootstrap está versionada; se pueden agregar nuevos recursos en futuras versiones y las AWS CDK aplicaciones pueden requerir una versión mínima
Recursos * Bucket de Amazon S3 Bucket de Amazon S3
AWS KMS key
Roles de IAM
Repositorio Amazon ECR
Parámetro SSM para el control de versiones
Denominación de recursos Generado automáticamente Determinista
Cifrado por cubos Clave predeterminada AWS clave gestionada de forma predeterminada. Se puede personalizar para utilizar una clave gestionada por el cliente.

* Agregaremos recursos adicionales a la plantilla de bootstrap según sea necesario.

Un entorno que se inició con la plantilla anterior debe actualizarse para utilizar la plantilla moderna de CDK v2 mediante el reinicio. Vuelva a implementar todas las AWS CDK aplicaciones del entorno al menos una vez antes de eliminar el bucket antiguo.

Abordar las conclusiones de Security Hub

Si lo está utilizando AWS Security Hub, es posible que vea los resultados de algunos de los recursos creados por el proceso de AWS CDK arranque. Los resultados de Security Hub le ayudan a encontrar configuraciones de recursos que debe comprobar para garantizar su precisión y seguridad. Hemos revisado estas configuraciones de recursos específicas con AWS Security y estamos seguros de que no constituyen un problema de seguridad.

[KMS.2] Los directores de IAM no deberían tener políticas integradas de IAM que permitan realizar acciones de descifrado en todas las claves de KMS

La función de despliegue (DeploymentActionRole) otorga permiso para leer datos cifrados, lo cual es necesario para las implementaciones entre cuentas con CDK Pipelines. Las políticas de esta función no otorgan permisos a todos los datos. Solo concede permiso para leer datos cifrados de Amazon S3 y AWS KMS solo cuando esos recursos lo permiten a través de su política de bucket o clave.

A continuación, se incluye un fragmento de estas dos afirmaciones sobre la función de despliegue de la plantilla de arranque:

DeploymentActionRole: Type: AWS::IAM::Role Properties: ... Policies: - PolicyDocument: Statement: ... - Sid: PipelineCrossAccountArtifactsBucket Effect: Allow Action: - s3:GetObject* - s3:GetBucket* - s3:List* - s3:Abort* - s3:DeleteObject* - s3:PutObject* Resource: "*" Condition: StringNotEquals: s3:ResourceAccount: Ref: AWS::AccountId - Sid: PipelineCrossAccountArtifactsKey Effect: Allow Action: - kms:Decrypt - kms:DescribeKey - kms:Encrypt - kms:ReEncrypt* - kms:GenerateDataKey* Resource: "*" Condition: StringEquals: kms:ViaService: Fn::Sub: s3.${AWS::Region}.amazonaws.com ...

¿Por qué Security Hub marca esto?

Las políticas contienen una Condition cláusula Resource: * combinada con una. Security Hub marca el * comodín. Este comodín se utiliza porque, en el momento en que se inicia la cuenta, la AWS KMS clave creada por CDK Pipelines para CodePipeline el depósito de artefactos aún no existe y, por lo tanto, ARN no puede hacer referencia a ella en la plantilla de arranque. Además, Security Hub no tiene en cuenta la Condition cláusula al levantar esta bandera. Esto Condition se limita Resource: * a las solicitudes realizadas desde Cuenta de AWS la misma AWS KMS clave. Estas solicitudes deben provenir de Amazon S3 junto con Región de AWS la AWS KMS clave.

¿Debo corregir este hallazgo?

Mientras no hayas modificado la AWS KMS clave de tu plantilla de bootstrap para que sea demasiado permisiva, la función de despliegue no permitirá más acceso del que necesita. Por lo tanto, no es necesario corregir este hallazgo.

¿Qué sucede si quiero corregir este hallazgo?

La forma de solucionar este problema dependerá de si utilizará o no CDK Pipelines para despliegues entre cuentas.

Para corregir el Security Hub: buscar y usar CDK Pipelines para despliegues entre cuentas
  1. Si aún no lo ha hecho, implemente la pila bootstrap de CDK mediante el comando. cdk bootstrap

  2. Si aún no lo ha hecho, cree e implemente su CDK. Pipeline Para ver instrucciones, consulte Integración y entrega continuas (CI/CD) mediante CDK Pipelines.

  3. Obtén el AWS KMS ARN clave del depósito de CodePipeline artefactos. Este recurso se crea durante la creación de la canalización.

  4. Obtenga una copia de la plantilla de arranque de CDK para modificarla. A continuación se muestra un ejemplo en el que se utiliza: AWS CDK CLI

    $ cdk bootstrap --show-template > bootstrap-template.yaml
  5. Modifique la plantilla sustituyendo Resource: * la PipelineCrossAccountArtifactsKey declaración por su valor de ARN.

  6. Implemente la plantilla para actualizar su pila de bootstrap. El siguiente es un ejemplo del uso del CLI CDK:

    $ cdk bootstrap aws://account-id/region --template bootstrap-template.yaml
Para solucionar el problema de Security Hub si no utilizas CDK Pipelines para despliegues entre cuentas
  1. Obtenga una copia de la plantilla bootstrap del CDK para modificarla. El siguiente es un ejemplo del uso del CDK: CLI

    $ cdk bootstrap --show-template > bootstrap-template.yaml
  2. Elimine las PipelineCrossAccountArtifactsKey sentencias PipelineCrossAccountArtifactsBucket y de la plantilla.

  3. Implemente la plantilla para actualizar su pila de bootstrap. El siguiente es un ejemplo del uso del CLI CDK:

    $ cdk bootstrap aws://account-id/region --template bootstrap-template.yaml

Consideraciones

Dado que el arranque aprovisiona los recursos de su entorno, puede incurrir en AWS cargos si esos recursos se utilizan con el. AWS CDK