

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)
<a name="cfctdeployment"></a>

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
<a name="cfctprerequisites"></a>

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](https://docs.aws.amazon.com/controltower/latest/userguide/getting-started-with-control-tower.html) 

Para obtener información sobre cómo personalizar tu zona de aterrizaje, consulta: [Personalización de tu zona de aterrizaje](https://docs.aws.amazon.com/controltower/latest/userguide/customize-landing-zone.html) 

Para lanzar y desplegar tu zona de aterrizaje, consulta: [Guía de despliegue de landing zone](https://docs.aws.amazon.com/controltower/latest/userguide/deployment.html) 

## Descripción general del despliegue
<a name="cfctdeployment-overview"></a>

Siga los siguientes pasos para implementar esta solución en AWS.

 [Paso 1: Cree e implemente un bucket de S3](#step-1-cfn) 

**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](#step-2-cfn) 

**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
<a name="step-1-cfn"></a>

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::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.

**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](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
<a name="step-2-cfn"></a>

**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](https://docs.aws.amazon.com/controltower/latest/userguide/cfcn-byo-customizations.html) 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](https://docs.aws.amazon.com/controltower/latest/userguide/deployment.html) 

**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](https://docs.aws.amazon.com/solutions/latest/automated-security-response-on-aws/deployment.html) de las [CloudFormation plantillas](https://docs.aws.amazon.com/en_us/solutions/latest/automated-security-response-on-aws/aws-cloudformation-template.html) 

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: ShouldDeployWebUI
        parameter_value: "yes"
      - parameter_key: AdminUserEmail
        parameter_value: "<YOUR EMAIL ADDRESS>"
      - parameter_key: LoadSCAdminStack
        parameter_value: "yes"
      - parameter_key: LoadCIS120AdminStack
        parameter_value: "no"
      - 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: 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](https://docs.aws.amazon.com/controltower/latest/userguide/cfct-codepipeline-overview.html) 