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.
Despliegue de la Torre de Control (CT)
La guía de personalizaciones para la Torre de Control de AWS (cFCT) está destinada a administradores, DevOps profesionales, proveedores de software independientes, arquitectos de infraestructuras de TI e integradores de sistemas que desean personalizar y ampliar sus entornos de torres de control de AWS para su empresa y sus clientes. Proporciona información sobre cómo personalizar y ampliar el entorno de AWS Control Tower con el paquete de personalización CfCT.
Tiempo de implementación: aproximadamente 30 minutos
Requisitos previos
Antes de implementar esta solución, asegúrese de que está destinada a los administradores de la Torre de Control de AWS.
Cuando esté listo para configurar su landing zone con la consola de AWS Control Tower o APIs siga estos pasos:
Para empezar a usar AWS Control Tower, consulte: Introducción a AWS Control Tower
Para obtener información sobre cómo personalizar tu zona de aterrizaje, consulta: Personalización de tu zona de aterrizaje
Para lanzar y desplegar tu zona de aterrizaje, consulta: Guía de despliegue de landing zone
Descripción general de la implementación
Siga los siguientes pasos para implementar esta solución en AWS.
Paso 1: Cree e implemente un bucket de S3
nota
Configuración del bucket de S3: solo para administradores. Este paso de configuración se realiza una sola vez y los usuarios finales no deben repetirlo. Los buckets de S3 almacenan el paquete de implementación, que incluye la CloudFormation plantilla de AWS y el código Lambda necesarios para la ejecución de ASR. Estos recursos se implementan mediante CfCt o. StackSet
1. Configure el bucket de S3
Configure el depósito de S3 que se utilizará para almacenar y servir los paquetes de despliegue.
2. Configuración del entorno de
Prepare las variables de entorno, las credenciales y las herramientas necesarias para el proceso de creación e implementación.
3. Configure las políticas de bucket de S3
Defina y aplique las políticas de bucket adecuadas para controlar el acceso y los permisos.
4. Prepare la compilación
Compila, empaquete o prepara de otro modo la aplicación o los activos para su implementación.
5. Implemente paquetes en S3
Cargue los artefactos de construcción preparados en el depósito de S3 designado.
Paso 2: Apila la implementación en la Torre de Control de AWS
1. Cree un manifiesto de compilación para los componentes de ASR
Defina un manifiesto de compilación que enumere todos los componentes de ASR, sus versiones, dependencias e instrucciones de compilación.
2. Actualice el CodePipeline
Modifique la CodePipeline configuración de AWS para incluir los nuevos pasos de compilación, artefactos o etapas necesarios para implementar los componentes de ASR.
Paso 1: Cree e implemente en un bucket de S3
Las soluciones de AWS utilizan dos grupos: un grupo para el acceso global a las plantillas, al que se accede a través de HTTPS, y grupos regionales para el acceso a los activos de la región, como el código Lambda.
1. Configure el bucket de S3
Elija un nombre de bucket único, por ejemplo, asr-staging. Defina dos variables de entorno en su terminal: una debe ser el nombre del bucket base con -reference como sufijo y la otra con la región de despliegue prevista como sufijo:
export BASE_BUCKET_NAME=asr-staging-$(date +%s) export TEMPLATE_BUCKET_NAME=$BASE_BUCKET_NAME-reference export REGION=us-east-1 export ASSET_BUCKET_NAME=$BASE_BUCKET_NAME-$REGION
2. Configuración del entorno
En su cuenta de AWS, cree dos buckets con estos nombres, por ejemplo, asr-staging-reference y asr-staging-us-east -1. (El grupo de referencia contendrá las CloudFormation plantillas, el grupo regional contendrá todos los demás activos, como el paquete de código lambda). Sus depósitos deben estar cifrados y no permitir el acceso público
aws s3 mb s3://$TEMPLATE_BUCKET_NAME/ aws s3 mb s3://$ASSET_BUCKET_NAME/
nota
Al crear tus depósitos, asegúrate de que no sean de acceso público. Usa nombres de cubos aleatorios. Deshabilita el acceso público. Utilice el cifrado KMS. Y compruebe la propiedad del bucket antes de subirlo.
3. Configuración de la política de cubos de S3
Actualice la política de bucket de S3 $TEMPLATE_BUCKET_NAME para incluir los permisos para el ID de la cuenta de ejecución. PutObject Asigne este permiso a una función de IAM dentro de la cuenta de ejecución que esté autorizada a escribir en el bucket. Esta configuración le permite evitar crear el depósito en la cuenta de administración.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::<template bucket name>/*", "arn:aws:s3:::<template bucket name>" ], "Condition": { "StringEquals": { "aws:PrincipalOrgID": "<org id>" } } }, { "Effect": "Allow", "Principal": "*", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::<template bucket name>/*", "arn:aws:s3:::<template bucket name>" ], "Condition": { "ArnLike": { "aws:PrincipalArn": "arn:aws:iam::<execute_account_id>:role/<iam_role_name>" } } } ] }
Modifique la política de depósitos de S3 de los activos para incluir los permisos. Asigne este permiso a una función de IAM dentro de la cuenta de ejecución que esté autorizada a escribir en el bucket. Repita esta configuración para cada grupo de activos regional (por ejemplo, asr-staging-us-east -1, asr-staging-eu-west -1, etc.), lo que permitirá realizar despliegues en varias regiones sin necesidad de crear los grupos en la cuenta de administración.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::<asset bucket name>-<region>/*", "arn:aws:s3:::<asset bucket name>-<region>" ], "Condition": { "StringEquals": { "aws:PrincipalOrgID": "<org id>" } } }, { "Effect": "Allow", "Principal": "*", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::<asset bucket name>-<region>/*", "arn:aws:s3:::<asset bucket name>-<region>" ], "Condition": { "ArnLike": { "aws:PrincipalArn": "arn:aws:iam::<execute_account_id>:role/<iam_role_name>" } } } ] }
4. Preparación de la compilación
-
Requisitos previos:
-
Versión 2 de AWS CLI
-
Python 3.11+ con pip
-
AWS CDK 2.171.1 O SUPERIOR
-
Node.js 20+ con npm
-
Poetry v2 con complemento para exportar
-
-
Clon de Git https://github.com/aws-solutions/automated-security-response-on-aws.git
Primero asegúrate de haber ejecutado npm install en la carpeta de origen.
A continuación, desde la carpeta de despliegue del repositorio clonado, ejecuta build-s3-dist.sh y pasa el nombre raíz del depósito (por ejemplo, mybucket) y la versión que estás creando (por ejemplo, la versión 1.0.0). Recomendamos usar una versión de semver basada en la versión descargada (p. ej. GitHub GitHub: v1.0.0, tu compilación: v1.0.0.mybuild)
chmod +x build-s3-dist.sh export SOLUTION_NAME=automated-security-response-on-aws export SOLUTION_VERSION=v1.0.0.mybuild ./build-s3-dist.sh -b $BASE_BUCKET_NAME -v $SOLUTION_VERSION
5. Implemente paquetes en S3
cd deployment aws s3 cp global-s3-assets/ s3://$TEMPLATE_BUCKET_NAME/$SOLUTION_NAME/$SOLUTION_VERSION/ --recursive --acl bucket-owner-full-control aws s3 cp regional-s3-assets/ s3://$ASSET_BUCKET_NAME/$SOLUTION_NAME/$SOLUTION_VERSION/ --recursive --acl bucket-owner-full-control
Paso 2: Apila la implementación en la Torre de Control de AWS
1. Cree un manifiesto para los componentes de ASR
Después de implementar los artefactos de ASR en los buckets de S3, actualice el manifiesto de la canalización de la Torre de Control para que haga referencia a la nueva versión y, a continuación, active la ejecución de la canalización, consulte: implementación de la torre de control
importante
Para garantizar la implementación correcta de la solución ASR, consulte la documentación oficial de AWS para obtener información detallada sobre la descripción general de las CloudFormation plantillas y los parámetros. Los enlaces de información figuran a continuación: Guía general de los parámetros de las CloudFormation plantillas
El manifiesto de los componentes de ASR tiene el siguiente aspecto:
region: us-east-1 #<HOME_REGION_NAME> version: 2021-03-15 # Control Tower Custom CloudFormation Resources resources: - name: <ADMIN STACK NAME> resource_file: s3://<ADMIN TEMPLATE BUCKET path> parameters: - parameter_key: UseCloudWatchMetricsAlarms parameter_value: "yes" - parameter_key: TicketGenFunctionName parameter_value: "" - parameter_key: LoadSCAdminStack parameter_value: "yes" - parameter_key: LoadCIS120AdminStack parameter_value: "no" - parameter_key: TargetAccountIDsStrategy parameter_value: "INCLUDE" - parameter_key: LoadCIS300AdminStack parameter_value: "no" - parameter_key: UseCloudWatchMetrics parameter_value: "yes" - parameter_key: LoadNIST80053AdminStack parameter_value: "no" - parameter_key: LoadCIS140AdminStack parameter_value: "no" - parameter_key: ReuseOrchestratorLogGroup parameter_value: "yes" - parameter_key: LoadPCI321AdminStack parameter_value: "no" - parameter_key: RemediationFailureAlarmThreshold parameter_value: "5" - parameter_key: LoadAFSBPAdminStack parameter_value: "no" - parameter_key: TargetAccountIDs parameter_value: "ALL" - parameter_key: EnableEnhancedCloudWatchMetrics parameter_value: "no" deploy_method: stack_set deployment_targets: accounts: # :type: list - <ACCOUNT_NAME> # and/or - <ACCOUNT_NUMBER> regions: - <REGION_NAME> - name: <ROLE MEMBER STACK NAME> resource_file: s3://<ROLE MEMBER TEMPLATE BUCKET path> parameters: - parameter_key: SecHubAdminAccount parameter_value: <ADMIN_ACCOUNT_NAME> - parameter_key: Namespace parameter_value: <NAMESPACE> deploy_method: stack_set deployment_targets: organizational_units: - <ORG UNIT> - name: <MEMBER STACK NAME> resource_file: s3://<MEMBER TEMPLATE BUCKET path> parameters: - parameter_key: SecHubAdminAccount parameter_value: <ADMIN_ACCOUNT_NAME> - parameter_key: LoadCIS120MemberStack parameter_value: "no" - parameter_key: LoadNIST80053MemberStack parameter_value: "no" - parameter_key: Namespace parameter_value: <NAMESPACE> - parameter_key: CreateS3BucketForRedshiftAuditLogging parameter_value: "no" - parameter_key: LoadAFSBPMemberStack parameter_value: "no" - parameter_key: LoadSCMemberStack parameter_value: "yes" - parameter_key: LoadPCI321MemberStack parameter_value: "no" - parameter_key: LoadCIS140MemberStack parameter_value: "no" - parameter_key: EnableCloudTrailForASRActionLog parameter_value: "no" - parameter_key: LogGroupName parameter_value: <LOG_GROUP_NAME> - parameter_key: LoadCIS300MemberStack parameter_value: "no" deploy_method: stack_set deployment_targets: accounts: # :type: list - <ACCOUNT_NAME> # and/or - <ACCOUNT_NUMBER> organizational_units: - <ORG UNIT> regions: # :type: list - <REGION_NAME>
2. Actualización de la canalización de códigos
Agregue un archivo de manifiesto a un custom-control-tower-configuration archivo.zip y ejecute un CodePipeline, consulte: descripción general de la canalización de códigos