Prácticas recomendadas de seguridad de AWS 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.

Prácticas recomendadas de seguridad de AWS CDK

El AWS Cloud Development Kit (AWS CDK) es una herramienta poderosa que los desarrolladores pueden usar para configurar servicios de AWS y aprovisionar infraestructura en AWS. Con cualquier herramienta que proporcione este tipo de control y capacidades, las organizaciones deberán establecer políticas y prácticas para garantizar que la herramienta se utilice de forma segura y protegida. Por ejemplo, es posible que las organizaciones quieran restringir el acceso de los desarrolladores a servicios específicos para asegurarse de que no pueden alterar las medidas de cumplimiento o control de costos configuradas en la cuenta.

A menudo, puede haber una tensión entre la seguridad y la productividad, y cada organización debe establecer el equilibrio adecuado para sí misma. En este tema se proporcionan las prácticas recomendadas de seguridad para el AWS CDK que puede tener en cuenta a la hora de crear e implementar sus propias políticas de seguridad. Las siguientes prácticas recomendadas son directrices generales y no constituyen una solución de seguridad completa. Puesto que es posible que estas prácticas recomendadas no sean adecuadas o suficientes para el entorno, considérelas como consideraciones útiles en lugar de como normas.

Seguimiento de las prácticas recomendadas de seguridad de IAM

AWS Identity and Access Management (IAM) es un servicio web que lo ayuda a controlar de forma segura el acceso a los recursos de AWS. Organismos, individuos y el AWS CDK utilizan IAM para administrar los permisos que determinan las acciones que se pueden realizar en los recursos de AWS. Cuando utilice IAM, siga las prácticas recomendadas de seguridad. Consulte las prácticas recomendadas de seguridad y los casos de uso de AWS Identity and Access Management en la Guía del usuario de IAM para obtener más información.

Administración de los permisos para el AWS CDK

Si utiliza el AWS CDK en toda su organización para desarrollar y administrar su infraestructura, tendrá que tener en cuenta los siguientes escenarios en los que la administración de los permisos será importante:

  • Permisos para las implementaciones de AWS CDK: estos permisos determinan quién puede realizar cambios en sus recursos de AWS y qué cambios puede realizar.

  • Permisos entre recursos: son los permisos que permiten las interacciones entre los recursos de AWS que se crean y administran con el AWS CDK.

Administración de permisos para las implementaciones de AWS CDK

Los desarrolladores utilizan el AWS CDK para definir la infraestructura de forma local en sus máquinas de desarrollo. Esta infraestructura se implementa en los entornos de AWS mediante implementaciones que normalmente implican el uso de la interfaz de la línea de comandos de AWS CDK (la CLI de AWS CDK). Con las implementaciones, es posible que desee controlar los cambios que los desarrolladores pueden realizar en los entornos. Por ejemplo, puede que tenga un recurso de Amazon Virtual Private Cloud (Amazon VPC) que no desee que los desarrolladores modifiquen.

De forma predeterminada, la CLI de CDK utiliza una combinación de las credenciales de seguridad del actor y los roles de IAM que se crean durante el arranque para recibir permisos para las implementaciones. Las credenciales de seguridad del actor se utilizan primero para la autenticación y, a continuación, se asume que los roles de IAM realizan diversas acciones durante la implementación, como utilizar el servicio de AWS CloudFormation para crear recursos. Para obtener más información sobre cómo funcionan las implementaciones de CDK, incluidos los roles de IAM que se utilizan, consulte Implementar aplicaciones de AWS CDK.

Para restringir quién puede realizar las implementaciones y las acciones que se pueden realizar durante la implementación, tenga en cuenta lo siguiente:

  • Las credenciales de seguridad del actor son el primer conjunto de credenciales que se utiliza para autenticarse en AWS. A partir de aquí, los permisos utilizados para realizar acciones durante la implementación se otorgan a los roles de IAM que se asumen durante el flujo de trabajo de la implementación. Puede restringir quién puede realizar las implementaciones si limita quién puede asumir estos roles. También puede restringir las acciones que se pueden realizar durante la implementación mediante la sustitución de estos roles de IAM por los suyos propios.

  • Los permisos para realizar las implementaciones se otorgan a DeploymentActionRole. Puede controlar los permisos de quién puede realizar las implementaciones si limita quién puede asumir este rol. Al usar un rol para las implementaciones, puede realizar implementaciones entre cuentas, ya que el rol se puede asumir por identidades de AWS en una cuenta distinta. De forma predeterminada, todas las identidades de la misma cuenta de AWS con la instrucción de política AssumeRole adecuada pueden asumir este rol.

  • Los permisos para crear y modificar recursos a través de AWS CloudFormation se otorgan a CloudFormationExecutionRole. Este rol también requiere permiso para leer los recursos de arranque. Usted controla los permisos que tienen las implementaciones de CDK mediante una política administrada para el CloudFormationExecutionRole y, de forma opcional, con la configuración de un límite de permisos. De forma predeterminada, este rol tiene permisos de AdministratorAccess sin límite de permisos.

  • Los permisos para interactuar con los recursos de arranque se otorgan al FilePublishingRole y ImagePublishingRole. El actor que realiza las implementaciones debe tener permiso para asumir estos roles. De forma predeterminada, todas las identidades de la misma cuenta de AWS con la instrucción de política AssumeRole adecuada pueden asumir este rol.

  • Los permisos para acceder a los recursos de arranque y realizar búsquedas se otorgan al LookupRole. El actor que realiza las implementaciones debe tener permiso para asumir este rol. De forma predeterminada, este rol tiene acceso de readOnly a los recursos de arranque. De forma predeterminada, todas las identidades de la misma cuenta de AWS con la instrucción de política AssumeRole adecuada pueden asumir este rol.

Para configurar las identidades de IAM en su cuenta de AWS con el permiso para asumir estos roles, agregue a las identidades una política con la siguiente instrucción:

{ "Version": "2012-10-17", "Statement": [{ "Sid": "AssumeCDKRoles", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "*", "Condition": { "StringEquals": { "iam:ResourceTag/aws-cdk:bootstrap-role": [ "image-publishing", "file-publishing", "deploy", "lookup" ] } } }] }

Modificación de los permisos de los roles asumidos durante la implementación

Al modificar los permisos de los roles asumidos durante la implementación, puede administrar las acciones que se pueden realizar durante la implementación. Para modificar los permisos, debe crear sus propios roles de IAM y especificarlos al arrancar el entorno. Al personalizar el arranque, tendrá que personalizar la síntesis. Para obtener instrucciones generales, consulte Personalización del arranque de AWS CDK.

Modificación de las credenciales y los roles de seguridad utilizadas durante la implementación

Los roles y los recursos de arranque que se utilizan durante las implementaciones vienen determinados por el sintetizador de pilas de CDK que utilice. Para modificar este comportamiento, puede personalizar la síntesis. Consulte Configurar y realizar la síntesis de pilas de CDK para obtener más información.

Consideraciones para otorgar el acceso con privilegio mínimo

Conceder el acceso con privilegio mínimo es una práctica recomendada de seguridad que le sugerimos que tenga en cuenta al desarrollar su estrategia de seguridad. Para obtener más información, consulte SEC03-BP02 Concesión de acceso con privilegio mínimo en la AWS Guía de Well-Architected Framework.

A menudo, conceder el acceso con privilegio mínimo implica restringir las políticas de IAM al acceso mínimo necesario para realizar una tarea determinada. Si se intenta conceder el acceso con privilegio mínimo mediante permisos detallados con CDK mediante este enfoque, se pueden ver afectadas las implementaciones de CDK y hacer que tenga que crear permisos con un alcance más amplio de lo que se desearía. A continuación, se indican algunos aspectos que se deben tener en cuenta a la hora de utilizar este enfoque:

  • Determinar una lista exhaustiva de permisos que permitan a los desarrolladores utilizar el AWS CDK para aprovisionar la infraestructura a través de CloudFormation es difícil y complejo.

  • Si desea ser más preciso, es posible que los permisos sean demasiado largos como para caber en la longitud máxima de los documentos de política de IAM.

  • Proporcionar un conjunto de permisos incompleto puede afectar gravemente a la productividad y las implementaciones de los desarrolladores.

Con CDK, las implementaciones se realizan mediante CloudFormation. CloudFormation inicia un conjunto de llamadas a la API de AWS en orden utilizando los permisos que se proporcionan. Los permisos necesarios en cada momento dependen de muchos factores:

  • Los servicios de AWS que se modifican. Específicamente, los recursos y propiedades que se utilizan y cambian.

  • El estado actual de la pila de CloudFormation.

  • Los problemas que pueden surgir durante las implementaciones, y si se necesitan reversiones, requerirán permisos de Delete además de Create.

Cuando los permisos proporcionados estén incompletos, será necesaria una intervención manual. A continuación, se muestran algunos ejemplos:

  • Si descubre que los permisos están incompletos durante la restauración, tendrá que detener la implementación y dedicar un tiempo a analizar y aprovisionar los nuevos permisos antes de continuar.

  • Si la implementación se revierte y faltan los permisos para aplicarla, es posible que la pila de CloudFormation quede en un estado en el que será necesario realizar mucho trabajo manual para recuperarla.

Dado que este enfoque puede generar complicaciones y limitar gravemente la productividad de los desarrolladores, no lo recomendamos. En su lugar, recomendamos implementar barreras de protección y evitar la derivación.

Implementación de barreras de protección y prevención de la derivación

Puede implementar barreras de protección, normas de cumplimiento, auditorías y supervisión mediante el uso de servicios como AWS Control Tower, AWS Config, AWS CloudTrail, AWS Security Hub, entre otros. Con este enfoque, otorga permiso a los desarrolladores para que hagan cualquier cosa, excepto para alterar los mecanismos de validación existentes. Los desarrolladores tienen la libertad de implementar cambios con rapidez, siempre y cuando se ajusten a la política. Este es el enfoque que recomendamos cuando se utiliza el AWS CDK. Para obtener más información sobre las barreras de protección, consulte Controls en la Management and Governance Cloud Environment Guide.

También recomendamos utilizar límites de permisos o políticas de control de servicios (SCP) como una forma de implementar barreras de protección. Para obtener más información sobre la implementación de límites de permisos con el AWS CDK, consulte Crear y aplicar límites de permisos para el AWS CDK.

Si utiliza algún mecanismo de control de conformidad, configúrelo durante la fase de arranque. Asegúrese de que el CloudFormationExecutionRole o las identidades accesibles para los desarrolladores tengan políticas o límites de permisos adjuntos que impidan derivar los mecanismos que haya establecido. Las políticas adecuadas dependen de los mecanismos específicos que utilice.

Administración de los permisos entre recursos aprovisionados por el AWS CDK

La forma de administrar los permisos entre los recursos aprovisionados por el AWS CDK depende de si permite que CDK cree roles y políticas.

Si utiliza constructos de nivel 2 de la Biblioteca de constructos de AWS para definir su infraestructura, puede utilizar los métodos grant proporcionados para aprovisionar permisos entre los recursos. Con los métodos grant, usted especifica el tipo de acceso que desea entre los recursos y el AWS CDK aprovisiona los roles de IAM con privilegio mínimo para lograr su objetivo. Este enfoque cumple con los requisitos de seguridad de la mayoría de las organizaciones y, al mismo tiempo, es eficiente para los desarrolladores. Para obtener más información sobre, consulte Definir permisos para constructos de nivel 2 con el AWS CDK.

Si desea evitar esta característica mediante la sustitución de los roles generados de forma automática por otros creados de forma manual, tenga en cuenta lo siguiente:

  • Sus roles de IAM deberán crearse de forma manual, lo que ralentizará el desarrollo de las aplicaciones.

  • Cuando los roles de IAM deben crearse y administrarse de forma manual, las personas suelen combinar varios roles lógicos en un solo rol para facilitar su administración. Esto va en contra del principio del privilegio mínimo.

  • Dado que estos roles deberán crearse antes de la implementación, los recursos a los que se debe hacer referencia aún no existirán. Por lo tanto, tendrá que utilizar comodines, lo que va en contra del principio de privilegio mínimo.

  • Una solución habitual al uso de comodines consiste en exigir que todos los recursos tengan un nombre predecible. Sin embargo, esto interfiere con la capacidad de CloudFormation de reemplazar los recursos cuando es necesario y puede ralentizar o bloquear el desarrollo. Por esto, le recomendamos que permita a CloudFormation crear nombres únicos de recursos para usted.

  • Será imposible realizar una entrega continua, ya que las acciones manuales deben realizarse antes de cada implementación.

Cuando las organizaciones quieren impedir que CDK cree roles, por lo general, lo hacen para impedir que los desarrolladores puedan crear roles de IAM. Lo que preocupa es que, al conceder a los desarrolladores permiso para crear roles de IAM con el AWS CDK, podrían aumentar sus propios privilegios. Para evitarlo, recomendamos utilizar límites de permisos o políticas de control de servicios (SCP). Con los límites de permisos, puede establecer límites para lo que los desarrolladores y CDK pueden hacer. Para obtener más información sobre el uso de los límites de permisos con CDK, consulte Crear y aplicar límites de permisos para el AWS CDK.