Configure los constructos con Esquemas de CDK - AWS Kit Cloud Development Kit (AWS CDK) v2

Esta es la guía para desarrolladores de AWS CDK v2. La primera versión del CDK pasó a la etapa de mantenimiento el 1.° de junio de 2022 y no cuenta con soporte desde 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.

Configure los constructos con Esquemas de CDK

Utilice los Esquemas de AWS CDK para estandarizar y distribuir las configuraciones de los constructos de nivel 2 en toda su organización. Con los Esquemas, puede asegurarse de que los recursos de AWS se configuren de manera coherente de acuerdo con los estándares y las prácticas recomendadas de su organización. Por ejemplo, puede habilitar automáticamente el cifrado para todos los buckets de Amazon S3, aplicar configuraciones de registro específicas a todas las funciones de AWS Lambda o hacer cumplir las reglas de seguridad estándar para todos los grupos de seguridad.

Los esquemas se basan en la inyección de propiedades, un mecanismo introducido en la versión 2.196.0 del AWS CDK que permite modificar las propiedades del constructo en el momento de la instancia. Un esquema es un conjunto de inyectores de propiedades, en el que cada inyector de propiedades especifica la configuración óptima para un constructo de nivel 2 específico. El esquema representa las prácticas recomendadas generales para su organización.

Los esquemas no son un mecanismo de cumplimiento. Si es necesario, los desarrolladores aún pueden anular los valores predeterminados. Para una aplicación estricta del cumplimiento, considere la posibilidad de utilizar AWS CloudFormation Guard, política de control de servicio o aspectos de CDK además de los esquemas.

Para obtener información detallada sobre la implementación, consulte RFC sobre inyección de propiedades.

Componentes clave de los esquemas

Los esquemas son conjuntos de inyectores de propiedades que aplican las propiedades predeterminadas a los constructos cuando se crean instancias. Un inyector de propiedades es un componente que implementa la interfaz IPropertyInjector, que intercepta la creación del constructo y modifica o añade propiedades antes de que se cree el constructo.

  • iPropertyInjector: un IPropertyInjector define una forma de inyectar propiedades adicionales que no están especificadas en los accesorios. Es específico de un constructo de nivel 2 y funciona a partir de las propiedades de ese constructo.

  • PropertyInjectors: PropertyInjectors son un conjunto de inyectores conectados al árbol de constructos. Los inyectores se pueden conectar a cualquier constructo, pero en la práctica esperamos que la mayoría de ellos estén adjuntos a App, Stage, o Stack.

Casos de uso comunes para los esquemas

Puede usar los esquemas de CDK para estandarizar muchos aspectos de sus recursos de AWS. A continuación, se indican algunos casos de uso comunes:

Estándares de seguridad
  • Asegúrese de que todos los buckets de Amazon S3 tengan habilitado el cifrado del lado del servidor.

  • Configure todos los grupos de seguridad para bloquear de forma predeterminada el acceso público.

  • Aplique permisos de AWS Identity and Access Management (IAM) con privilegios mínimos a las funciones de AWS Lambda.

  • Aplique el SSL a todas las comunicaciones de red.

Excelencia operativa
  • Configure el registro estandarizado para todas las funciones de AWS Lambda.

  • Aplique en todos los recursos estrategias de etiquetado coherentes.

  • Configure los umbrales predeterminados de supervisión y alerta.

  • Implemente políticas estándar de retención para los registros y las copias de seguridad.

Optimización de costos
  • Configure los tamaños de las instancias adecuados en función del entorno.

  • Aplique políticas de escalado automático con los valores predeterminados de la organización.

  • Establezca reglas de ciclo de vida para los buckets de Amazon S3 a fin de realizar la transición de los objetos a clases de almacenamiento más rentables.

  • Configure el rendimiento aprovisionado predeterminado para las bases de datos.

Requisitos de conformidad
  • Implemente los ajustes de cifrado necesarios para los datos regulados.

  • Aplique las políticas de copia de seguridad necesarias para cumplir con los requisitos de retención de datos.

  • Configure los ajustes de Amazon VPC predeterminados que cumplan con los requisitos de seguridad.

  • Asegúrese de que los recursos tengan las etiquetas requeridas para la asignación de costos.

Productividad de los desarrolladores
  • Proporcione valores predeterminados razonables que reduzcan la necesidad de código reutilizable.

  • Cree clases de pilas específicas para cada organización con inyectores integrados.

  • Comparta las prácticas recomendadas entre los equipos mediante inyectores reutilizables.

  • Simplifique la incorporación mediante el cifrado de los conocimientos organizativos en código.

Introducción a los esquemas

A continuación, se muestra un ejemplo sencillo de cómo crear y usar un inyector de propiedades:

Primero, cree un inyector de propiedades para los buckets de Amazon S3:

import { IPropertyInjector, InjectionContext } from 'aws-cdk-lib'; import { Bucket, BucketProps, BlockPublicAccess } from 'aws-cdk-lib/aws-s3'; export class SecureBucketDefaults implements IPropertyInjector { public readonly constructUniqueId: string; constructor() { this.constructUniqueId = Bucket.PROPERTY_INJECTION_ID; } public inject(originalProps: BucketProps, _context: InjectionContext): BucketProps { return { // Set security defaults blockPublicAccess: BlockPublicAccess.BLOCK_ALL, enforceSSL: true, // Include original props to allow overrides ...originalProps, }; } }

Luego, utilice el inyector en su aplicación de CDK:

import { App, Stack } from 'aws-cdk-lib'; import { Bucket } from 'aws-cdk-lib/aws-s3'; import { SecureBucketDefaults } from './secure-bucket-defaults'; // Attach injectors when creating the App const app = new App({ propertyInjectors: [new SecureBucketDefaults()] }); const stack = new Stack(app, 'MyStack'); // This bucket automatically gets the default properties const myBucket = new Bucket(stack, 'MyBucket');

También puede utilizar el método PropertyInjectors.of():

import { App, Stack, PropertyInjectors } from 'aws-cdk-lib'; import { SecureBucketDefaults } from './secure-bucket-defaults'; const app = new App(); PropertyInjectors.of(app).add(new SecureBucketDefaults()); const stack = new Stack(app, 'MyStack'); const myBucket = new Bucket(stack, 'MyBucket');

Prácticas recomendadas

  • Coloque las propiedades predeterminadas antes de …​originalProps para permitir las anulaciones.

  • Coloque las propiedades forzadas después de …​originalProps para evitar anulaciones.

  • Use una marca de omisión al crear recursos para evitar la recursión infinita. Para ver un ejemplo, consulte ¿Qué ocurre cuando necesita crear un accessLogBucket para un Bucket? en RFC sobre inyección de propiedades.

  • Agregue el registro para la depuración.

  • Utilice el contexto de CDK para habilitar/deshabilitar los inyectores para las pruebas.

Para obtener información más detallada sobre la inyección de propiedades, incluidos los detalles de implementación, consejos para la solución de problemas e información de referencia, consulte RFC sobre inyección de propiedades.