

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Déploiement de la Control Tower (CT)
<a name="cfctdeployment"></a>

Le guide Customizations for AWS Control Tower (CfCT) s'adresse aux administrateurs, aux DevOps professionnels, aux fournisseurs de logiciels indépendants, aux architectes d'infrastructures informatiques et aux intégrateurs de systèmes qui souhaitent personnaliser et étendre leurs environnements AWS Control Tower pour leur entreprise et leurs clients. Il fournit des informations sur la personnalisation et l'extension de l'environnement AWS Control Tower avec le package de personnalisation CfCT.

 **Temps de déploiement :** environ 30 minutes

## Conditions préalables
<a name="cfctprerequisites"></a>

Avant de déployer cette solution, assurez-vous qu'elle est destinée aux **administrateurs d'AWS Control Tower**.

Lorsque vous êtes prêt à configurer votre zone de landing zone à l'aide de la console AWS Control Tower APIs, ou suivez ces étapes :

Pour commencer à utiliser AWS Control Tower, consultez : [Getting Started with AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/getting-started-with-control-tower.html) 

Pour savoir comment personnaliser votre zone d'atterrissage, reportez-vous à : [Personnalisation de votre zone d'atterrissage](https://docs.aws.amazon.com/controltower/latest/userguide/customize-landing-zone.html) 

Pour lancer et déployer votre zone d'atterrissage, voir : [Guide de déploiement de la zone d'atterrissage](https://docs.aws.amazon.com/controltower/latest/userguide/deployment.html) 

## Vue d'ensemble du déploiement
<a name="cfctdeployment-overview"></a>

Suivez les étapes ci-dessous pour déployer cette solution sur AWS.

 [Étape 1 : créer et déployer un compartiment S3](#step-1-cfn) 

**Note**  
Configuration du compartiment S3 — pour ADMIN uniquement. Il s'agit d'une étape de configuration unique qui ne doit pas être répétée par les utilisateurs finaux. Les compartiments S3 stockent le package de déploiement, y compris le CloudFormation modèle AWS et le code Lambda requis pour l'exécution d'ASR. Ces ressources sont déployées à l'aide de CfCt ou StackSet.

**1. Configuration du compartiment S3**  
Configurez le compartiment S3 qui sera utilisé pour stocker et distribuer vos packages de déploiement.

**2. Configuration de l'environnement**  
Préparez les variables d'environnement, les informations d'identification et les outils nécessaires au processus de création et de déploiement.

**3. Configuration des politiques relatives aux compartiments S3**  
Définissez et appliquez les politiques de compartiment appropriées pour contrôler l'accès et les autorisations.

**4. Préparez le build**  
Compilez, empaquetez ou préparez de toute autre manière votre application ou vos actifs pour le déploiement.

**5. Déployer des packages sur S3**  
Téléchargez les artefacts de construction préparés dans le compartiment S3 désigné.

 [Étape 2 : déploiement de Stacks sur AWS Control Tower](#step-2-cfn) 

**1. Créer un manifeste de compilation pour les composants ASR**  
Définissez un manifeste de compilation répertoriant tous les composants ASR, leurs versions, leurs dépendances et leurs instructions de génération.

**2. Mettez à jour le CodePipeline**  
Modifiez la CodePipeline configuration AWS pour inclure les nouvelles étapes de construction, les nouveaux artefacts ou les nouvelles étapes nécessaires au déploiement des composants ASR.

## Étape 1 : Création et déploiement dans le compartiment S3
<a name="step-1-cfn"></a>

Les solutions AWS utilisent deux compartiments : un compartiment pour l'accès global aux modèles, accessible via HTTPS, et des compartiments régionaux pour accéder aux ressources de la région, comme le code Lambda.

**1. Configuration du compartiment S3**  
Choisissez un nom de compartiment unique, par exemple asr-staging. Définissez deux variables d'environnement sur votre terminal, l'une doit être le nom du bucket de base avec -reference comme suffixe, l'autre avec la région de déploiement prévue comme suffixe :

```
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. Configuration de l’environnement**  
Dans votre compte AWS, créez deux compartiments portant ces noms, par exemple asr-staging-reference et asr-staging-us-east -1. (Le compartiment de référence contiendra les CloudFormation modèles, le compartiment régional contiendra tous les autres actifs, comme le bundle de code Lambda.) Vos buckets doivent être chiffrés et interdire l'accès public

```
aws s3 mb s3://$TEMPLATE_BUCKET_NAME/
aws s3 mb s3://$ASSET_BUCKET_NAME/
```

**Note**  
Lorsque vous créez vos buckets, assurez-vous qu'ils ne sont pas accessibles au public. Utilisez des noms de compartiments aléatoires. Désactivez l'accès public. Utilisez le chiffrement KMS. Et vérifiez la propriété du bucket avant de le télécharger.

**3. Configuration de la politique des buckets S3**  
Mettez à jour la politique du compartiment S3 $TEMPLATE\_BUCKET\_NAME afin d'inclure des autorisations pour l'ID de compte d'exécution PutObject . Attribuez cette autorisation à un rôle IAM au sein du compte d'exécution autorisé à écrire dans le compartiment. Cette configuration vous permet d'éviter de créer le bucket dans le compte de gestion.

```
{
    "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"
                }
            }
        }
    ]
}
```

Modifiez la politique du compartiment S3 de l'actif pour inclure les autorisations. Attribuez cette autorisation à un rôle IAM au sein du compte d'exécution autorisé à écrire dans le compartiment. Répétez cette configuration pour chaque compartiment d'actifs régional (par exemple, asr-staging-us-east -1, asr-staging-eu-west -1, etc.), en autorisant les déploiements dans plusieurs régions sans avoir à créer les compartiments dans le compte de gestion.

**4. Préparation de la construction**
+ Prérequis :
  + AWS CLI v2
  + Python 3.11\+ avec pip
  + AWS CDK 2.171.1\+
  + Node.js 20\+ avec npm
  + Poetry v2 avec plugin pour exporter
+ Clonage de Git [https://github.com/aws-solutions/automated-security-response-on-aws.git](https://github.com/aws-solutions/automated-security-response-on-aws.git) 

Assurez-vous d'abord d'avoir exécuté npm install dans le dossier source.

Ensuite, depuis le dossier de déploiement de votre dépôt cloné, exécutez build-s3-dist.sh en transmettant le nom racine de votre bucket (par exemple mybucket) et la version que vous créez (par exemple v1.0.0). Nous vous recommandons d'utiliser une version semver basée sur la version téléchargée depuis GitHub (ex. GitHub: v1.0.0, votre build : 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. Déployer des packages sur 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
```

## Étape 2 : déploiement de Stacks sur AWS Control Tower
<a name="step-2-cfn"></a>

**1. Générer un manifeste pour les composants ASR**  
Après avoir déployé des artefacts ASR dans les compartiments S3, mettez à jour le [manifeste du pipeline](https://docs.aws.amazon.com/controltower/latest/userguide/cfcn-byo-customizations.html) Control Tower pour faire référence à la nouvelle version, puis déclenchez l'exécution du pipeline. Reportez-vous à : déploiement de la tour de [contrôle](https://docs.aws.amazon.com/controltower/latest/userguide/deployment.html) 

**Important**  
Pour garantir le déploiement correct de la solution ASR, consultez la documentation officielle d'AWS pour obtenir des informations détaillées sur la présentation des CloudFormation modèles et la description des paramètres. Liens d'information ci-dessous : [Guide de présentation des paramètres](https://docs.aws.amazon.com/solutions/latest/automated-security-response-on-aws/deployment.html) des [CloudFormation modèles](https://docs.aws.amazon.com/en_us/solutions/latest/automated-security-response-on-aws/aws-cloudformation-template.html) 

Le manifeste des composants ASR se présente comme suit :

```
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. Mise à jour du pipeline de code**  
Ajoutez un fichier manifeste à un fichier custom-control-tower-configuration .zip et exécutez un CodePipeline, voir : présentation [du pipeline de code](https://docs.aws.amazon.com/controltower/latest/userguide/cfct-codepipeline-overview.html) 