Personalice los nombres de los roles predeterminados mediante AWS CDK aspectos y trampillas de escape - Recomendaciones de AWS

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.

Personalice los nombres de los roles predeterminados mediante AWS CDK aspectos y trampillas de escape

Creado por SANDEEP SINGH (AWS) y James Jacob () AWS

Repositorio de código: cdk-aspects-override-example

Entorno: producción

Tecnologías: infraestructura DevOps; gestión y gobierno

AWSservicios: AWS CDK AWS CloudFormation; AWS Lambda

Resumen

Este patrón demuestra cómo personalizar los nombres predeterminados de los roles que crean las AWS Cloud Development Kit (AWS CDK) construcciones. La personalización de los nombres de los roles suele ser necesaria si la organización tiene restricciones específicas basadas en las convenciones de nomenclatura. Por ejemplo, su organización puede establecer AWS Identity and Access Management (IAM) límites de permisos o políticas de control de servicios (SCPs) que requieran un prefijo específico en los nombres de los roles. En esos casos, es posible que los nombres de los roles predeterminados generados por AWS CDK las construcciones no cumplan con estas convenciones y sea necesario modificarlos. Este patrón aborda esos requisitos mediante el uso de trampillas de escape y aspectos de. AWS CDK Utiliza las trampillas de escape para definir los nombres de los roles personalizados y Aspects para aplicar un nombre personalizado a todos los roles, a fin de garantizar el cumplimiento de las políticas y restricciones de la organización.

Requisitos previos y limitaciones

Requisitos previos 

Limitaciones

  • Los aspectos filtran los recursos en función de los tipos de recursos, por lo que todos los roles comparten el mismo prefijo. Si necesita prefijos de función diferentes para funciones distintas, es necesario aplicar filtros adicionales en función de otras propiedades. Por ejemplo, para asignar distintos prefijos a los roles que están asociados a AWS Lambda funciones, puede filtrar por atributos o etiquetas de rol específicos y aplicar un prefijo para los roles relacionados con Lambda y un prefijo diferente para los demás roles.

  • IAMLos nombres de los roles tienen una longitud máxima de 64 caracteres, por lo que los nombres de los roles modificados deben recortarse para cumplir con esta restricción.

  • Algunos Servicios de AWS no están disponibles en todos Regiones de AWS. Para ver la disponibilidad por región, consulta Servicios de AWS por región. Para ver puntos de enlace específicos, consulta la página de puntos de enlace y cuotas del servicio y elige el enlace del servicio.

Arquitectura

Pila de tecnología de destino

  • AWS CDK

  • AWS CloudFormation

Arquitectura de destino

Arquitectura para usar trampillas de escape y aspectos para personalizar los nombres de las funciones AWS CDK asignadas.
  • Una AWS CDK aplicación consta de una o más AWS CloudFormation pilas, que se sintetizan e implementan para administrar los recursos. AWS

  • Para modificar una propiedad de un recurso AWS CDK administrado que no esté expuesta por una construcción de capa 2 (L2), se utiliza una vía de escape para anular las CloudFormation propiedades subyacentes (en este caso, el nombre de la función) y un aspecto para aplicar la función a todos los recursos de la AWS CDK aplicación durante el proceso de síntesis de la pila. AWS CDK

Herramientas

Servicios de AWS

  • AWS Cloud Development Kit (AWS CDK)es un marco de desarrollo de software que le ayuda a definir y aprovisionar la Nube de AWS infraestructura en el código.

  • AWS CDK La interfaz de línea de comandos (AWS CDK CLI) (también conocida como kit de AWS CDK herramientas) es un kit de desarrollo en la nube de línea de comandos que le ayuda a interactuar con su AWS CDK aplicación. El CLI cdk comando es la herramienta principal para interactuar con la AWS CDK aplicación. Ejecuta tu aplicación, consulta el modelo de aplicación que has definido y produce e implementa las CloudFormation plantillas generadas por el. AWS CDK

  • AWS CloudFormationle ayuda a configurar AWS los recursos, aprovisionarlos de forma rápida y coherente y administrarlos a lo largo de su ciclo de vida en todas Cuentas de AWS las regiones.

Repositorio de código

El código fuente y las plantillas de este patrón están disponibles en el repositorio GitHub CDKAspects Override.

Prácticas recomendadas

Consulte las mejores prácticas para usar el AWS CDK in TypeScript para crear proyectos de IaC en el sitio web de la Guía AWS prescriptiva.

Epics

TareaDescripciónHabilidades requeridas

Instale el AWS CDK CLI.

Para instalar el AWS CDK CLI globalmente, ejecute el comando:

npm install -g aws-cdk
AWS DevOps

Verificar la versión.

Ejecute el comando:

cdk --version

Confirme que está utilizando la versión 2 de AWS CDK CLI.

AWS DevOps

Inicie el AWS CDK entorno.

Antes de implementar las AWS CloudFormation plantillas, prepare la cuenta Región de AWS que desea usar. Ejecute el comando:

cdk bootstrap <account>/<Region>

Para obtener más información, consulte el proceso de AWS CDK arranque en la documentación. AWS

AWS DevOps
TareaDescripciónHabilidades requeridas

Configure el proyecto.

  1. Clona el GitHub repositorio de este patrón en tu ordenador local:

    git clone https://github.com/aws-samples/cdk-aspects-override
  2. Navegue hasta el directorio del proyecto en su computadora local.

  3. Instale las dependencias del proyecto:

    npm ci
AWS DevOps

Implemente pilas con los nombres de los roles predeterminados asignados por. AWS CDK

Implemente dos CloudFormation pilas (ExampleStack1yExampleStack2) que contengan las funciones de Lambda y sus funciones asociadas:

npm run deploy:ExampleAppWithoutAspects

El código no transfiere de forma explícita las propiedades de los roles, por lo que los nombres de los roles los construirá el. AWS CDK

Para ver un ejemplo de salida, consulte la sección de información adicional.

AWS DevOps

Implemente pilas con aspectos.

En este paso, se aplica un aspecto que impone una convención de nombres de funciones añadiendo un prefijo a todas las IAM funciones que se despliegan en el proyecto. AWS CDK El aspecto se define en el lib/aspects.ts archivo. El aspecto utiliza una trampilla de escape para anular el nombre de la función añadiendo un prefijo. El aspecto se aplica a las pilas del archivo. bin/app-with-aspects.ts El prefijo del nombre de la función utilizado en este ejemplo es. dev-unicorn

  1. Edite el archivo bin/app-with-aspects.ts.

  2. En el archivo, actualice la variable ROLE_NAME_PREFIX con el prefijodev-unicorn:

    const app = new cdk.App(); // Define a prefix for the role names const ROLE_NAME_PREFIX = 'dev-unicorn'; // Instantiate the RoleNamingConventionAspect with the desired prefix const roleNamingConventionAspect = new RoleNamingConventionAspect(ROLE_NAME_PREFIX);
  3. Implemente la AWS CDK aplicación con los siguientes aspectos:

    npm run deploy:ExampleAppWithAspects

Para ver un ejemplo de salida, consulte la sección de información adicional.

AWS DevOps
TareaDescripciónHabilidades requeridas

Elimina tus AWS CloudFormation pilas.

Cuando termine de usar este patrón, ejecute el siguiente comando para limpiar los recursos y evitar incurrir en costos adicionales:

cdk destroy --all -f && cdk --app npx ts-node bin/app-with-aspects.ts' destroy --all -f
AWS DevOps

Resolución de problemas

ProblemaSolución

Tiene problemas al utilizar el AWS CDK.

Consulte Solución de AWS CDK problemas comunes en la AWS CDK documentación.

Recursos relacionados

Información adicional

Nombres de rol creados por AWS CloudFormation sin aspectos

Outputs: ExampleStack1WithoutAspects.Function1RoleName = example-stack1-without-as-Function1LambdaFunctionSe-y7FYTY6FXJXA ExampleStack1WithoutAspects.Function2RoleName = example-stack1-without-as-Function2LambdaFunctionSe-dDZV4rkWqWnI ... Outputs: ExampleStack2WithoutAspects.Function3RoleName = example-stack2-without-as-Function3LambdaFunctionSe-ygMv49iTyMq0

Nombres de rol creados por AWS CloudFormation With Aspects

Outputs: ExampleStack1WithAspects.Function1RoleName = dev-unicorn-Function1LambdaFunctionServiceRole783660DC ExampleStack1WithAspects.Function2RoleName = dev-unicorn-Function2LambdaFunctionServiceRole2C391181 ... Outputs: ExampleStack2WithAspects.Function3RoleName = dev-unicorn-Function3LambdaFunctionServiceRole4CAA721C