

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éployez et gérez AWS Control Tower les contrôles en utilisant AWS CDK et CloudFormation
<a name="deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation"></a>

*Iker Reina Fuente et Ivan Girardi, Amazon Web Services*

## Résumé
<a name="deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation-summary"></a>

Ce modèle décrit comment utiliser, AWS Cloud Development Kit (AWS CDK) implémenter AWS CloudFormation et administrer des AWS Control Tower contrôles préventifs, détectifs et proactifs sous forme d'infrastructure sous forme de code (IaC). Un [contrôle](https://docs.aws.amazon.com/controltower/latest/controlreference/controls.html) (également appelé *garde-corps*) est une règle de haut niveau qui fournit une gouvernance continue de votre environnement global AWS Control Tower . Par exemple, vous pouvez utiliser des contrôles pour exiger la journalisation de votre compte, Comptes AWS puis configurer des notifications automatiques si des événements spécifiques liés à la sécurité se produisent.

AWS Control Tower vous aide à mettre en œuvre des contrôles préventifs, détectifs et proactifs qui régissent vos AWS ressources et surveillent la conformité sur plusieurs sites Comptes AWS. Chaque contrôle applique une seule règle. Dans ce modèle, vous utilisez un modèle IaC fourni pour spécifier les contrôles que vous souhaitez déployer dans votre environnement.

AWS Control Tower les contrôles s'appliquent à l'ensemble d'une [unité organisationnelle (UO)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#organizationalunit), et le contrôle affecte chaque unité Compte AWS au sein de l'UO. Par conséquent, lorsque les utilisateurs effectuent une action sur n'importe quel compte de votre zone de landing zone, cette action est soumise aux contrôles qui régissent l'unité d'organisation.

La mise en œuvre de AWS Control Tower contrôles permet d'établir une base de sécurité solide pour votre zone AWS d'atterrissage. En utilisant ce modèle pour déployer les commandes sous forme d'iAC via CloudFormation et AWS CDK, vous pouvez standardiser les commandes dans votre zone d'atterrissage et les déployer et les gérer plus efficacement. Cette solution utilise [cdk\_nag](https://github.com/cdklabs/cdk-nag#readme) pour scanner l'application pendant le AWS CDK déploiement. Cet outil vérifie que l'application est conforme aux AWS meilleures pratiques.

Pour déployer AWS Control Tower des contrôles sous forme d'iAc, vous pouvez également utiliser HashiCorp Terraform au lieu de. AWS CDK Pour plus d'informations, voir [Déployer et gérer les AWS Control Tower contrôles à l'aide de Terraform](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/deploy-and-manage-aws-control-tower-controls-by-using-terraform.html).

**Public visé**

Ce modèle est recommandé aux utilisateurs expérimentés avec AWS Control Tower, CloudFormation AWS CDK, et AWS Organizations.

## Conditions préalables et limitations
<a name="deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation-prereqs"></a>

**Conditions préalables**
+  Comptes AWS Gestion active en tant qu'organisation AWS Organizations et en tant que zone AWS Control Tower d'atterrissage. Pour obtenir des instructions, consultez la section [Mise en route](https://docs.aws.amazon.com/controltower/latest/userguide/getting-started-with-control-tower.html) dans la AWS Control Tower documentation.
+ AWS Command Line Interface (AWS CLI), [installé](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) et [configuré](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html).
+ Gestionnaire de packages de nœuds (npm), [installé et configuré](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) pour le AWS CDK.
+ [Prérequis](https://docs.aws.amazon.com/cdk/v2/guide/work-with.html#work-with-prerequisites) pour. AWS CDK
+ Autorisations permettant d'assumer un rôle Gestion des identités et des accès AWS (IAM) existant dans un compte de déploiement.
+ Autorisations permettant d'assumer un rôle IAM dans le compte de gestion de l'organisation qui peut être utilisé pour démarrer. AWS CDK Le rôle doit disposer des autorisations nécessaires pour modifier et déployer CloudFormation des ressources. Pour plus d'informations, consultez [Bootstrapping](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html#bootstrapping-howto) dans la AWS CDK documentation.
+ Autorisations permettant de créer des rôles et des politiques IAM dans le compte de gestion de l'organisation. Pour plus d'informations, consultez la section [Autorisations requises pour accéder aux ressources IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_permissions-required.html) dans la documentation IAM.

**Limites**
+ Ce modèle fournit des instructions pour déployer cette solution entre Comptes AWS un compte de déploiement et le compte de gestion de l'organisation. À des fins de test, vous pouvez déployer cette solution directement dans le compte de gestion, mais les instructions relatives à cette configuration ne sont pas explicitement fournies.
+ Pour les AWS Control Tower contrôles, ce modèle nécessite l'utilisation [d'identifiants globaux](https://docs.aws.amazon.com/controltower/latest/controlreference/all-global-identifiers.html) au format suivant :

  ```
  arn:<PARTITION>:controlcatalog:::control/<CONTROL_CATALOG_OPAQUE_ID>
  ```

  Les versions précédentes de ce modèle utilisaient des [identifiants régionaux](https://docs.aws.amazon.com/controltower/latest/controlreference/control-metadata-tables.html) qui ne sont plus pris en charge. Nous vous recommandons de passer des identifiants régionaux aux identifiants globaux. Les identifiants globaux vous aident à gérer les contrôles et à augmenter le nombre de contrôles que vous pouvez utiliser.
**Note**  
Dans la plupart des cas, la valeur de `<PARTITION>` est`aws`.

**Versions du produit**
+ AWS Control Tower version 3.2 ou ultérieure
+ Python version 3.9 ou ultérieure
+ npm version 8.9.0 ou ultérieure

## Architecture
<a name="deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation-architecture"></a>

Cette section fournit une présentation générale de cette solution et de l'architecture établie par l'exemple de code. Le schéma suivant montre les contrôles déployés sur les différents comptes de l'unité d'organisation.

![Schéma d'architecture des contrôles déployés sur tous les comptes AWS de l'unité organisationnelle.](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/7d0d5e37-58ac-4621-b6b0-cb8c1c767ab0/images/47264166-3294-4a53-b0a4-5911086d636f.png)


AWS Control Tower les contrôles sont classés en fonction de leur *comportement* et de leurs *instructions*.

Il existe trois principaux types de comportements de contrôle :

1. Les *contrôles préventifs* sont conçus pour empêcher les actions de se produire. Elles sont mises en œuvre avec des [politiques de contrôle des services (SCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) ou [des politiques de contrôle des ressources (RCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html) dans AWS Organizations. Le statut d'un contrôle préventif est soit **appliqué**, soit **non activé**. Les contrôles préventifs sont pris en charge dans tous les cas Régions AWS.

1. Les *contrôles Detective* sont conçus pour détecter des événements spécifiques lorsqu'ils se produisent et pour enregistrer l'action AWS CloudTrail. Elles sont mises en œuvre avec [AWS Config des règles](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config.html). Le statut d'un contrôle de détection est soit **clair**, soit **en violation**, soit **non activé**. Les contrôles Detective ne s'appliquent que dans ceux Régions AWS pris en charge par AWS Control Tower.

1. *Les contrôles proactifs* analysent les ressources qui seraient mises à disposition par votre entreprise AWS CloudFormation et vérifient si elles sont conformes aux politiques et aux objectifs de votre entreprise. Les ressources non conformes ne seront pas provisionnées. Ils sont implémentés avec des [AWS CloudFormation crochets](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/hooks.html). Le statut d'un contrôle proactif est **PASS**, **FAIL** ou **SKIP**.

Les *directives* de contrôle font référence à la pratique recommandée pour appliquer chaque contrôle à votre OUs. AWS Control Tower fournit trois catégories de conseils : *obligatoires*, *fortement recommandés* et *facultatifs*. Le guidage d'un contrôle est indépendant de son comportement. Pour plus d'informations, consultez la section [Contrôle du comportement et instructions](https://docs.aws.amazon.com/controltower/latest/userguide/controls.html#control-behavior).

## Outils
<a name="deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation-tools"></a>

**Services AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)est un framework de développement logiciel qui vous aide à définir et à provisionner AWS Cloud l'infrastructure dans le code. Le [AWS CDK kit d'outils](https://docs.aws.amazon.com/cdk/v2/guide/cli.html) est le principal outil d'interaction avec votre AWS CDK application.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)vous aide à configurer les AWS ressources, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie, de bout Comptes AWS en bout Régions AWS.
+ [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html)fournit une vue détaillée des ressources de votre ordinateur Compte AWS et de la façon dont elles sont configurées. Il vous aide à identifier les liens entre les ressources et l'évolution de leurs configurations au fil du temps.
+ [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html)vous aide à configurer et à gérer un environnement AWS multi-comptes, conformément aux meilleures pratiques prescriptives.
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)est un service de gestion de comptes qui vous aide à Comptes AWS en regrouper plusieurs au sein d'une organisation que vous créez et gérez de manière centralisée.

**Autres outils**
+ [cdk\_nag](https://github.com/cdklabs/cdk-nag#readme) est un outil open source qui utilise une combinaison de packs de règles pour vérifier que les AWS CDK applications respectent les meilleures pratiques.
+ [npm](https://docs.npmjs.com/about-npm/) est un registre de logiciels qui s'exécute dans un environnement Node.js et est utilisé pour partager ou emprunter des packages et gérer le déploiement de packages privés.
+ [Python](https://www.python.org/) est un langage de programmation informatique polyvalent.

**Référentiel de code**

Le code de ce modèle est disponible dans les [AWS Control Tower contrôles de GitHub déploiement à l'aide AWS CDK](https://github.com/aws-samples/aws-control-tower-controls-cdk) du référentiel. Vous utilisez le fichier **cdk.json** pour interagir avec l' AWS CDK application, et vous utilisez le fichier **package.json** pour installer les packages npm.

## Bonnes pratiques
<a name="deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation-best-practices"></a>
+ Respectez le [principe du moindre privilège (documentation](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) IAM). Les exemples de politique IAM et de politique de confiance fournis dans ce modèle incluent les autorisations minimales requises, et les AWS CDK piles créées dans le compte de gestion sont limitées par ces autorisations.
+ Suivez les [meilleures pratiques pour AWS Control Tower les administrateurs](https://docs.aws.amazon.com/controltower/latest/userguide/best-practices.html) (AWS Control Tower documentation).
+ Suivez les [meilleures pratiques pour le développement et le déploiement d'une infrastructure cloud avec la AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/best-practices.html) (AWS CDK documentation).
+ Lors du démarrage du AWS CDK, personnalisez le modèle de bootstrap pour définir les politiques et les comptes fiables qui devraient être capables de lire et d'écrire sur n'importe quelle ressource du compte de gestion. Pour plus d'informations, consultez la section [Personnalisation du bootstrap](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html#bootstrapping-customizing).
+ Utilisez des outils d'analyse de code, tels que [cfn\_nag](https://github.com/stelligent/cfn_nag), pour scanner les modèles générés. CloudFormation L'outil cfn-nag recherche dans les modèles des CloudFormation modèles susceptibles d'indiquer que l'infrastructure n'est pas sécurisée. [Vous pouvez également utiliser cdk-nag pour vérifier vos CloudFormation modèles à l'aide du module cloudformation-include.](https://docs.aws.amazon.com/cdk/v2/guide/use_cfn_template.html)

## Épopées
<a name="deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation-epics"></a>

### Préparez-vous à activer les commandes
<a name="prepare-to-enable-the-controls"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez le rôle IAM dans le compte de gestion. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation.html) | DevOps ingénieur, AWS général | 
| Bootstrap. AWS CDK | [See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation.html) | DevOps ingénieur, AWS général, Python | 
| Pour cloner le référentiel. | Dans un shell bash, entrez la commande suivante. Cela clone les [AWS Control Tower contrôles Deploy à l'aide](https://github.com/aws-samples/aws-control-tower-controls-cdk) du AWS CDK référentiel de GitHub.<pre>git clone https://github.com/aws-samples/aws-control-tower-controls-cdk.git</pre> | DevOps ingénieur, AWS général | 
| Modifiez le fichier AWS CDK de configuration. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation.html) | DevOps ingénieur, AWS général | 

### Activer les contrôles dans le compte de gestion
<a name="enable-controls-in-the-management-account"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Assumez le rôle IAM dans le compte de déploiement. | Dans le compte de déploiement, assumez le rôle IAM autorisé à déployer les AWS CDK piles du compte de gestion. Pour plus d'informations sur l'attribution d'un rôle IAM dans le AWS CLI, voir [Utiliser un rôle IAM dans le](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html). AWS CLI | DevOps ingénieur, AWS général | 
| Activez l'environnement. | Si vous utilisez Linux ou macOS :[See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation.html)<br />Si vous utilisez Windows :[See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation.html) | DevOps ingénieur, AWS général | 
| Installez les dépendances. | Une fois l'environnement virtuel activé, entrez la commande suivante pour exécuter le script **install\_deps.sh**. Ce script installe les dépendances requises.<pre>$ ./scripts/install_deps.sh</pre> | DevOps ingénieur, AWS général, Python | 
| Déployez la pile. | Entrez les commandes suivantes pour synthétiser et déployer la CloudFormation pile.<pre>$ npx cdk synth<br />$ npx cdk deploy</pre> | DevOps ingénieur, AWS général, Python | 

## Ressources connexes
<a name="deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation-resources"></a>

**AWS documentation**
+ [À propos des contrôles](https://docs.aws.amazon.com/controltower/latest/controlreference/controls.html) (AWS Control Tower documentation)
+ [Bibliothèque de commandes](https://docs.aws.amazon.com/controltower/latest/controlreference/controls-reference.html) (AWS Control Tower documentation)
+ [AWS CDK Commandes du kit](https://docs.aws.amazon.com/cdk/v2/guide/cli.html#cli-commands) d'outils (AWS CDK documentation)
+ [Déployez et gérez les AWS Control Tower contrôles à l'aide de Terraform (directives](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/deploy-and-manage-aws-control-tower-controls-by-using-terraform.html)AWS prescriptives)

**Autres ressources**
+ [Python](https://www.python.org/)

## Informations supplémentaires
<a name="deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation-additional"></a>

**Exemple de fichier constants.py**

Voici un exemple de fichier **constants.py** mis à jour. **Cet exemple active le contrôle **AWS-GR\_DISALLOW\_CROSS\_REGION\_NETWORKING (ID global :) et le contrôle AWS-GR\_SUBNET\_AUTO\_ASSIGN\_PUBLIC\_IP\_DISABLED** (ID global :`dvuaav61i5cnfazfelmvn9m6k`).** `50z1ot237wl8u1lv5ufau6qqo` Pour une liste des identifiants globaux IDs, voir [Tous les identifiants globaux](https://docs.aws.amazon.com/controltower/latest/controlreference/all-global-identifiers.html) dans la AWS Control Tower documentation.

```
ACCOUNT_ID = 111122223333
AWS_CONTROL_TOWER_REGION = us-east-2
ROLE_ARN = "arn:aws:iam::111122223333:role/CT-Controls-Role"
GUARDRAILS_CONFIGURATION = [
    {
        "Enable-Control": {
            "dvuaav61i5cnfazfelmvn9m6k": {  # AWS-GR_DISALLOW_CROSS_REGION_NETWORKING
                "Parameters": {
                    "ExemptedPrincipalArns": ["arn:aws:iam::111122223333:role/RoleName"]
                },
                "Tags": [{"key": "Environment", "value": "Production"}]
            },
            ...
        },
        "OrganizationalUnitIds": ["ou-1111-11111111", "ou-2222-22222222"...],
    },
    {
        "Enable-Control": {
            "50z1ot237wl8u1lv5ufau6qqo",  # AWS-GR_SUBNET_AUTO_ASSIGN_PUBLIC_IP_DISABLED
            ...
        },
        "OrganizationalUnitIds": ["ou-2222-22222222"...],
    },
]
```

**Politique IAM**

L'exemple de politique suivant autorise les actions minimales requises pour activer ou désactiver les AWS Control Tower contrôles lors du déploiement de AWS CDK piles d'un compte de déploiement vers le compte de gestion.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "controltower:EnableControl",
                "controltower:DisableControl",
                "controltower:GetControlOperation",
                "controltower:ListEnabledControls",
                "organizations:AttachPolicy",
                "organizations:CreatePolicy",
                "organizations:DeletePolicy",
                "organizations:DescribeOrganization",
                "organizations:DescribeOrganizationalUnit",
                "organizations:DetachPolicy",
                "organizations:ListAccounts",
                "organizations:ListAWSServiceAccessForOrganization",
                "organizations:ListChildren",
                "organizations:ListOrganizationalUnitsForParent",
                "organizations:ListParents",
                "organizations:ListPoliciesForTarget",
                "organizations:ListRoots",
                "organizations:UpdatePolicy",
                "ssm:GetParameters"
            ],
            "Resource": "*"
        }
    ]
}
```

**Politique d’approbation**

La politique de confiance personnalisée suivante permet à un rôle IAM spécifique dans le compte de déploiement d'assumer le rôle IAM dans le compte de gestion. Remplacez les éléments suivants :
+ `<DEPLOYMENT-ACCOUNT-ID>`est l'ID du compte de déploiement
+ `<DEPLOYMENT-ROLE-NAME>`est le nom du rôle dans le compte de déploiement qui est autorisé à assumer le rôle dans le compte de gestion

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<DEPLOYMENT-ACCOUNT-ID>:role/<DEPLOYMENT-ROLE-NAME>"
            },
            "Action": "sts:AssumeRole",
            "Condition": {}
        }
    ]
}
```