Adjunte automáticamente una política administrada de AWS para Systems Manager a los perfiles de instancia de EC2 mediante Cloud Custodian y AWS CDK - 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.

Adjunte automáticamente una política administrada de AWS para Systems Manager a los perfiles de instancia de EC2 mediante Cloud Custodian y AWS CDK

Creado por Ali Asfour (AWS) y Aaron Lennon (AWS)

Entorno: PoC o piloto

Tecnologías: desarrollo y pruebas de software DevOps; gestión y gobierno; seguridad, identidad y cumplimiento; infraestructura

Carga de trabajo: código abierto

Servicios de AWS: Amazon SNS; Amazon SQS; CodeBuild AWS; AWS; CodePipeline AWS Systems Manager; AWS CodeCommit

Resumen

Puede integrar instancias de Amazon Elastic Compute Cloud (Amazon EC2) con AWS Systems Manager para automatizar las tareas operativas y proporcionar más visibilidad y control. Para integrarse con Systems Manager, las instancias EC2 deben tener instalado AWS Systems Manager Agent (SSM Agent) y una política de AmazonSSMManagedInstanceCore AWS Identity and Access Management (IAM) adjunta a sus perfiles de instancia. 

Sin embargo, si quiere asegurarse de que todos los perfiles de instancias de EC2 incorporan la política AmazonSSMManagedInstanceCore, puede enfrentarse a dificultades al actualizar las nuevas instancias de EC2 que no tienen perfiles de instancia o las instancias de EC2 que tienen un perfil de instancia pero no tienen la política AmazonSSMManagedInstanceCore. También puede resultar difícil añadir esta política en varias cuentas de Amazon Web Services (AWS) y regiones de AWS.

Este patrón ayuda a resolver estos desafíos mediante la implementación de tres políticas de Cloud Custodian en sus cuentas de AWS:

  • La primera política de Cloud Custodian comprueba las instancias de EC2 existentes que tienen un perfil de instancia pero que no cuentan con la política AmazonSSMManagedInstanceCore. A continuación, se adjunta la política AmazonSSMManagedInstanceCore

  • La segunda política de Cloud Custodian comprueba las instancias de EC2 existentes sin un perfil de instancia y añade un perfil de instancia predeterminado que tiene la política AmazonSSMManagedInstanceCore adjunta.

  • La tercera política de Cloud Custodian crea funciones de AWS Lambda en sus cuentas para supervisar la creación de instancias y perfiles de instancias de EC2. Esto garantiza que la política AmazonSSMManagedInstanceCore se adjunte automáticamente cuando se cree una instancia de EC2.

Este patrón utiliza DevOps las herramientas de AWS para lograr una implementación continua y a escala de las políticas de Cloud Custodian en un entorno de varias cuentas, sin aprovisionar un entorno informático independiente. 

Requisitos previos y limitaciones

Requisitos previos 

  • Dos o más cuentas de AWS activas. Una cuenta es la cuenta de seguridad y las demás son cuentas de miembros.

  • Permisos para aprovisionar recursos de AWS en la cuenta de seguridad. Este patrón utiliza permisos de administrador, pero usted debe conceder los permisos de acuerdo con los requisitos y las políticas de su organización.

  • Capacidad para asumir un rol de IAM desde la cuenta de seguridad hasta las cuentas de los miembros y crear los roles de IAM necesarios. Para obtener más información al respecto, consulte Delegar el acceso entre cuentas de AWS utilizando roles de IAM en la documentación de IAM.

  • Interfaz de la línea de comandos de AWS (AWS CLI) instalada y configurada. Para realizar pruebas, puede configurar la AWS CLI mediante el comando aws configure o configurando variables de entorno. Importante: esto no se recomienda para entornos de producción y recomendamos que a esta cuenta solo se le conceda el acceso con privilegios mínimos. Para obtener más información al respecto, consulte Conceder privilegios mínimos en la documentación de IAM.

  • El archivo devops-cdk-cloudcustodian.zip (adjunto), descargado en su equipo local.

  • Familiaridad con Python.

  • Las herramientas necesarias (Node.js, AWS Cloud Development Kit (AWS CDK) y Git), instaladas y configuradas. Puede usar el archivo install-prerequisites.sh incluido en el archivo devops-cdk-cloudcustodian.zip para instalar estas herramientas. Asegúrese de ejecutar este archivo con privilegios de administrador. 

Limitaciones

  • Si bien este patrón se puede utilizar en un entorno de producción, asegúrese de que todos los roles y las políticas de IAM cumplan con los requisitos y las políticas de su organización. 

Versiones de paquetes

  • Cloud Custodian, versión 0.9 o posterior

  • TypeScript versión 3.9.7 o posterior

  • Node.js versión 14.15.4 y posteriores

  • npm versión 7.6.1 o posterior

  • AWS CDK, versión 1.96.0 o posterior

Arquitectura

En el diagrama, se muestra el siguiente flujo de trabajo:

  1. Las políticas de Cloud Custodian se envían a un CodeCommit repositorio de AWS en la cuenta de seguridad. Una regla de Amazon CloudWatch Events inicia automáticamente la CodePipeline canalización de AWS.

  2. La canalización obtiene el código más reciente CodeCommit y lo envía a la parte de integración continua de la canalización de integración continua y entrega continua (CI/CD) gestionada por AWS. CodeBuild

  3. CodeBuild realiza todas las DevSecOps acciones, incluida la validación de la sintaxis de las políticas de Cloud Custodian, y ejecuta estas políticas en --dryrun modo automático para comprobar qué recursos están identificados.

  4. Si no hay errores, la siguiente tarea avisa al administrador para que revise los cambios y apruebe la implementación en las cuentas de los miembros.

Pila de tecnología

  • AWS CDK

  • CodeBuild

  • CodeCommit

  • CodePipeline

  • IAM

  • Cloud Custodian 

Automatizar y escalar

El módulo AWS CDK Pipelines proporciona una canalización de CI/CD que se utiliza CodePipeline para organizar la creación y las pruebas del código fuente CodeBuild, además de la implementación de recursos de AWS con pilas de AWS. CloudFormation Puede usar este patrón para todas las cuentas de miembros y regiones de su organización. También puede ampliar la pila Roles creation para implementar otros roles de IAM en sus cuentas de miembros. 

Herramientas

  • El AWS Cloud Development Kit (AWS CDK) es un marco de desarrollo de software para definir la infraestructura de nube en el código y aprovisionarla a través de AWS. CloudFormation

  • La Interfaz de la línea de comandos de AWS (AWS CLI) es una herramienta de código abierto que le permite interactuar con los servicios de AWS mediante comandos en su shell de línea de comandos.

  • AWS CodeBuild es un servicio de compilación en la nube totalmente gestionado.

  • AWS CodeCommit es un servicio de control de versiones que puede utilizar para almacenar y gestionar activos de forma privada.

  • AWS CodePipeline es un servicio de entrega continua que puede utilizar para modelar, visualizar y automatizar los pasos necesarios para lanzar el software.

  • AWS Identity and Access Management (IAM) es un servicio web que le ayuda a controlar de forma segura el acceso a los recursos de AWS.

  • Cloud Custodian es una herramienta que unifica las decenas de herramientas y scripts que la mayoría de las organizaciones utilizan para administrar sus cuentas de nube pública en una sola herramienta de código abierto.

  • Node.js es un JavaScript motor de ejecución basado en el JavaScript motor V8 de Google Chrome.

Código

Para obtener una lista detallada de los módulos, las funciones de la cuenta, los archivos y los comandos de implementación que se utilizan en este patrón, consulte el archivo README en el archivo devops-cdk-cloudcustodian.zip (adjunto).

Epics

TareaDescripciónHabilidades requeridas

Configura el CodeCommit repositorio.

  1. Arranque el archivo devops-cdk-cloudcustodian.zip (adjunto) en el directorio de trabajo en su equipo local.

  2. Inicie sesión en la consola de administración de AWS de su cuenta de seguridad, abra la CodeCommit consola y, a continuación, cree un devops-cdk-cloudcustodian repositorio nuevo.

  3. Diríjase al directorio del proyecto y configure el CodeCommit repositorio como origen, confirme los cambios y, a continuación, envíelos a la rama de origen ejecutando los siguientes comandos:

  • cd devops-cdk-cloudcustodian 

  • git init --initial-branch=main

  • git add . git commit -m 'initial commit' 

  • git remote add origin https://git-codecommit.us-east-1.amazonaws.com/v1/devops-cdk-cloudcustodian 

  • git push origin main

Para obtener más información al respecto, consulte Creación de un CodeCommit repositorio en la CodeCommit documentación de AWS.

Desarrollador

Instalar las herramientas necesarias.

Utilice el archivo install-prerequisites.sh para instalar todas las herramientas necesarias en Amazon Linux. Esto no incluye la AWS CLI porque viene preinstalada.

Para obtener más información al respecto, consulte la sección Requisitos previos de Introducción a AWS CDK en la documentación de AWS CDK.

Desarrollador

Instalar los paquetes de AWS CDK obligatorios.

  1. Configure su entorno virtual ejecutando el siguiente comando en la CLI de AWS: $ python3 -m venv .env

  2. Active su entorno virtual ejecutando el siguiente comando: $ source .env/bin/activate

  3. Después de activar el entorno virtual, instale las dependencias necesarias mediante la ejecución del siguiente comando: $ pip install -r requirements.txt

  4. Para añadir dependencias adicionales (por ejemplo, otras bibliotecas de AWS CDK), agréguelas al archivo requirements.txt y ejecute el siguiente comando: pip install -r requirements.txt

AWD CDK requiere los siguientes paquetes y se incluyen en el archivo requirements.txt:

  • aws-cdk.aws-cloudwatch

  • aws-cdk.aws-codebuild

  • aws-cdk.aws-codecommit

  • aws-cdk.aws-codedeploy

  • aws-cdk.aws-codepipeline

  • aws-cdk.aws-codepipeline-actions

  • aws-cdk.aws-events

  • aws-cdk.aws-events-targets

  • aws-cdk.aws-iam

  • aws-cdk.aws-logs

  • aws-cdk.aws-s3

  • aws-cdk.aws-sns

  • aws-cdk.aws-sns-subscriptions

  • aws-cdk.aws-sqs

  • aws-cdk.core

Desarrollador
TareaDescripciónHabilidades requeridas

Actualice las variables requeridas.

Abra el vars.py archivo en la carpeta raíz del CodeCommit repositorio y actualice las siguientes variables:

  •  Actualice var_deploy_region = ‘us-east-1’ con la región de AWS en la que desea implementar la canalización.

  •  Actualízalo var_codecommit_repo_name = “cdk-cloudcustodian” con el nombre de tu CodeCommit repositorio.

  •  Actualiza var_codecommit_branch_name = “main” con el nombre de la CodeCommit sucursal.

  •  Actualice var_adminEmail=notifyadmin@email.com’ con la dirección de correo electrónico del administrador que aprueba los cambios.

  • Actualice var_slackWebHookUrl = https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX con el webhook de Slack que se utiliza para enviar notificaciones a Cloud Custodian cuando se realizan cambios.

  •  Actualice var_orgId = ‘o-yyyyyyyyyy’ con el ID de su organización.

  • Actualice security_account = ‘123456789011’ con el ID de cuenta de AWS para la cuenta en la que se implementa la canalización.

  • Actualice member_accounts = [‘111111111111’,’111111111112’,’111111111113’] con las cuentas de los miembros en las que desee iniciar la pila de AWS CDK e implementar los roles de IAM necesarios.

  • Configure cdk_bootstrap_member_accounts = True como True si desea que la canalización inicie automáticamente AWS CDK en sus cuentas de miembros.  Si se configura como True, esto también requiere el nombre de un rol de IAM existente en las cuentas de los miembros que se pueda asumir desde la cuenta de seguridad. Este rol de IAM también debe tener los permisos necesarios para arrancar AWS CDK.

  • Actualice cdk_bootstrap_role = ‘AWSControlTowerExecution’ con el rol de IAM existente en las cuentas de los miembros que se pueden asumir desde la cuenta de seguridad. Este rol también debe tener permiso para arrancar AWS CDK. Nota: Esto sólo se aplica si cdk_bootstrap_member_accounts está configurado en True .

Desarrollador

Actualice el archivo account.yml con la información de la cuenta del miembro.

Para ejecutar la herramienta Cloud Custodian de c7n-org en varias cuentas, debe colocar el archivo de configuración accounts.yml en la raíz del repositorio. A continuación, se muestra un ejemplo de archivo de configuración de Cloud Custodian para AWS.

accounts: - account_id: '123123123123' name: account-1 regions: - us-east-1 - us-west-2 role: arn:aws:iam::123123123123:role/CloudCustodian vars: charge_code: xyz tags: - type:prod - division:some division - partition:us - scope:pci
Desarrollador
TareaDescripciónHabilidades requeridas

Arranque la cuenta de seguridad.

Arranque deploy_account con la aplicación cloudcustodian_stack ejecutando el siguiente comando:

cdk bootstrap -a 'python3 cloudcustodian/cloudcustodian_stack.py
Desarrollador

Opción 1: arrancar automáticamente las cuentas de los miembros.

Si la variable cdk_bootstrap_member_accounts está establecida en True en el archivo vars.py, la canalización arranca automáticamente las cuentas especificadas en la variable member_accounts.

Si es necesario, puede actualizar *cdk_bootstrap_role* con un rol de IAM que pueda asumir desde la cuenta de seguridad y que tenga los permisos necesarios para arrancar la AWS CDK.

La canalización arranca automáticamente las cuentas nuevas que se agreguen a la variable member_accounts  para poder implementar los roles necesarios.

Desarrollador

Opción 2: Inicie manualmente el proceso de arranque de las cuentas de los miembros.

Aunque no se recomienda utilizar este enfoque, puede establecer el valor de cdk_bootstrap_member_accounts y False, y realizar este paso manualmente ejecutando el siguiente comando:

$ cdk bootstrap -a 'python3 cloudcustodian/member_account_roles_stack.py' \ --trust {security_account_id} \ --context assume-role-credentials:writeIamRoleName={role_name} \ --context assume-role-credentials:readIamRoleName={role_name} \ --mode=ForWriting \ --context bootstrap=true \ --cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess

Importante: asegúrese de actualizar los valores {security_account_id} y {role_name} con el nombre de un rol de IAM que pueda asumir desde la cuenta de seguridad y que tenga los permisos necesarios para iniciar el proceso de arranque de AWS CDK.

También puede utilizar otros enfoques para impulsar las cuentas de los miembros, por ejemplo, con AWS CloudFormation. Para obtener más información al respecto, consulte Proceso de arranque en la documentación de AWS CDK.

Desarrollador
TareaDescripciónHabilidades requeridas

Cree los roles de IAM en las cuentas de los miembros.

Ejecute el siguiente comando para implementar la pila member_account_roles_stack y crear los roles de IAM en las cuentas de miembros:

cdk deploy --all -a 'python3 cloudcustodian/member_account_roles_stack.py' --require-approval never
Desarrollador

Implemente la pila de canalizaciones de Cloud Custodian.

Ejecute el siguiente comando para crear la canalización cloudcustodian_stack.py de Cloud Custodian que se implementa en la cuenta de seguridad:

cdk deploy -a 'python3 cloudcustodian/cloudcustodian_stack.py'
Desarrollador

Recursos relacionados

Conexiones

Para acceder al contenido adicional asociado a este documento, descomprima el archivo: attachment.zip