

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 les AWS Control Tower contrôles à l'aide de Terraform
<a name="deploy-and-manage-aws-control-tower-controls-by-using-terraform"></a>

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

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

Ce modèle décrit comment utiliser les AWS Control Tower contrôles, HashiCorp Terraform et l'infrastructure en tant que code (IaC) pour mettre en œuvre et administrer des contrôles de sécurité préventifs, détectifs et proactifs. Un [contrôle](https://docs.aws.amazon.com/controltower/latest/userguide/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 Terraform, vous pouvez standardiser les commandes dans votre zone d'atterrissage et les déployer et les gérer plus efficacement.

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

**Public visé**

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

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

**Conditions préalables**
+  Comptes AWS Gestion active en tant qu'organisation AWS Organizations et en tant que zone de AWS Control Tower landing zone. 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).
+ Rôle Gestion des identités et des accès AWS (IAM) dans le compte de gestion autorisé à déployer ce modèle. Pour plus d'informations sur les autorisations requises et un exemple de politique, consultez la section *Autorisations de moindre privilège pour le rôle IAM* dans la section [Informations supplémentaires](#deploy-and-manage-aws-control-tower-controls-by-using-terraform-additional) de ce modèle.
+ Autorisations permettant d'assumer le rôle IAM dans le compte de gestion.
+ Terraform CLI, [installée (documentation](https://developer.hashicorp.com/terraform/cli) Terraform).
+  AWS Fournisseur Terraform, [configuré (documentation](https://hashicorp.github.io/terraform-provider-aws/) Terraform).
+ Backend Terraform, [configuré](https://developer.hashicorp.com/terraform/language/backend) (documentation Terraform).

**Limites**
+ 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
+ Terraform version 1.5 ou ultérieure
+ Terraform AWS Provider version 4.67 ou ultérieure

## Architecture
<a name="deploy-and-manage-aws-control-tower-controls-by-using-terraform-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/6e0d6c30-a539-44b7-8415-e669fb2ad26a/images/60407c0e-852e-4d5f-9a7d-8510316063aa.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 *conseils* de contrôle sont la pratique recommandée pour savoir comment 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-terraform-tools"></a>

**Services AWS**
+ [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 dans toutes Comptes AWS les régions.
+ [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 la façon dont les ressources sont liées les unes aux autres et comment leurs configurations ont évolué 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**
+ [HashiCorp Terraform](https://www.terraform.io/docs) est un outil d'infrastructure en tant que code (IaC) qui vous aide à utiliser le code pour provisionner et gérer l'infrastructure et les ressources du cloud.

**Référentiel de code**

Le code de ce modèle est disponible dans le référentiel GitHub [Déployer et gérer les AWS Control Tower contrôles à l'aide du référentiel Terraform](https://github.com/aws-samples/aws-control-tower-controls-terraform).

## Bonnes pratiques
<a name="deploy-and-manage-aws-control-tower-controls-by-using-terraform-best-practices"></a>
+ Le rôle IAM utilisé pour déployer cette solution doit respecter le [principe du moindre privilège (documentation IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)).
+ 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).

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

### 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 | 
| --- | --- | --- | 
| Pour cloner le référentiel. | Dans un shell bash, entrez la commande suivante. Cela clone les [AWS Control Tower contrôles de déploiement et de gestion à l'aide du référentiel Terraform](https://github.com/aws-samples/aws-control-tower-controls-terraform) à partir de. GitHub<pre>git clone https://github.com/aws-samples/aws-control-tower-controls-terraform.git</pre> | DevOps ingénieur | 
| Modifiez le fichier de configuration du backend Terraform. | [\[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-terraform.html) | DevOps ingénieur, Terraform | 
| Modifiez le fichier de configuration du fournisseur Terraform. | [\[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-terraform.html) | DevOps ingénieur, Terraform | 
| Modifiez le fichier 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-terraform.html) | DevOps ingénieur, AWS général, Terraform | 
| Assumez le rôle IAM dans le compte de gestion. | Dans le compte de gestion, assumez le rôle IAM autorisé à déployer le fichier de configuration Terraform. Pour plus d'informations sur les autorisations requises et un exemple de politique, consultez la section *Autorisations de moindre privilège pour le rôle IAM* dans la section [Informations supplémentaires](#deploy-and-manage-aws-control-tower-controls-by-using-terraform-additional). 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 | 
| Déployez le fichier 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-terraform.html) | DevOps ingénieur, AWS général, Terraform | 

### (Facultatif) Désactiver les contrôles dans le compte AWS Control Tower de gestion
<a name="optional-disable-controls-in-the-ctower-management-account"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Exécutez la commande `destroy`. | Entrez la commande suivante pour supprimer les ressources déployées selon ce modèle.<pre>$ terraform destroy -var-file="variables.tfvars"</pre> | DevOps ingénieur, AWS général, Terraform | 

## Résolution des problèmes
<a name="deploy-and-manage-aws-control-tower-controls-by-using-terraform-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| `Error: creating ControlTower Control ValidationException: Guardrail <control ID> is already enabled on organizational unit <OU ID>`Erreur  | Le contrôle que vous essayez d'activer est déjà activé dans l'unité d'organisation cible. Cette erreur peut se produire si un utilisateur a activé manuellement le contrôle via AWS Management Console, via AWS Control Tower ou via AWS Organizations. Pour déployer le fichier de configuration Terraform, vous pouvez utiliser l'une des options suivantes.**Option 1 : mettre à jour le fichier d'état actuel de Terraform**Vous pouvez importer la ressource dans le fichier d'état actuel de Terraform. Lorsque vous réexécutez la `apply` commande, Terraform ignore cette ressource. Procédez comme suit pour importer la ressource dans l'état Terraform actuel :[\[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-terraform.html)**Option 2 : désactiver le contrôle**Si vous travaillez dans un environnement hors production, vous pouvez désactiver le contrôle dans la console. Réactivez-le en répétant les étapes décrites dans *Déployer la configuration* dans la section [Epics.](#deploy-and-manage-aws-control-tower-controls-by-using-terraform-epics) Cette approche n'est pas recommandée pour les environnements de production car le contrôle sera désactivé pendant un certain temps. Si vous souhaitez utiliser cette option dans un environnement de production, vous pouvez implémenter des contrôles temporaires, tels que l'application temporaire d'un SCP. AWS Organizations | 

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

**AWS documentation**
+ [À propos des contrôles](https://docs.aws.amazon.com/controltower/latest/userguide/controls.html) (AWS Control Tower documentation)
+ [Bibliothèque de commandes](https://docs.aws.amazon.com/controltower/latest/userguide/controls-reference.html) (AWS Control Tower documentation)
+ [Déployez et gérez les AWS Control Tower contrôles à l'aide de AWS CDK et AWS CloudFormation](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation.html) (AWS directives prescriptives)

**Autres ressources**
+ [Terraforme](https://www.terraform.io/)
+ [Documentation de la CLI Terraform](https://www.terraform.io/cli)

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

****Exemple de fichier variables.tfvars****

Voici un exemple de fichier **variables.tfvars** mis à jour. Cet exemple active le contrôle **AWS-GR\$1ENCRYPTED\$1VOLUMES (ID global :) et le contrôle **AWS-GR\$1SUBNET\$1AUTO\$1ASSIGN\$1PUBLIC\$1IP\$1DISABLED**** (ID global :`503uicglhjkokaajywfpt6ros`). `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.

L'exemple suivant active également les contrôles dotés de paramètres tels que **CT.S3.PV.5 (ID global :`7mo7a2h2ebsq71l8k6uzr96ou`) et **CT.SECRETSMANAGER.PV.1**** (ID global :). `dvhe47fxg5o6lryqrq9g6sxg4` Pour une liste des contrôles avec paramètres, voir [Contrôles avec paramètres](https://docs.aws.amazon.com/controltower/latest/controlreference/control-parameter-concepts.html) dans la AWS Control Tower documentation.

```
controls = [
    {
        control_names = [
            "503uicglhjkokaajywfpt6ros", # AWS-GR_ENCRYPTED_VOLUMES
            ...
        ],
        organizational_unit_ids = ["ou-1111-11111111", "ou-2222-22222222"...],
    },
    {
        control_names = [
            "50z1ot237wl8u1lv5ufau6qqo", # AWS-GR_SUBNET_AUTO_ASSIGN_PUBLIC_IP_DISABLED
            ...
        ],
        organizational_unit_ids = ["ou-1111-11111111"...],
    },
]

controls_with_params = [
  {
    control_names = [
      { "7mo7a2h2ebsq71l8k6uzr96ou" = { # CT.S3.PV.5
        parameters = {
          "ExemptedPrincipalArns" : ["arn:aws:iam::*:role/RoleName"],
          "ExemptedResourceArns" : [],
        }
      } },
      { "dvhe47fxg5o6lryqrq9g6sxg4" = { # CT.SECRETSMANAGER.PV.1
        parameters = {
          "ExemptedPrincipalArns" : ["arn:aws:iam::*:role/RoleName"],
        }
      } },
      ...
    ],
    organizational_unit_ids = ["ou-1111-11111111"...]
  },
  {
    control_names = [
      { "dvuaav61i5cnfazfelmvn9m6k" = { # AWS-GR_DISALLOW_CROSS_REGION_NETWORKING
        parameters = {
          "ExemptedPrincipalArns" : ["arn:aws:iam::*:role/RoleName"],
        }
      } },
      { "41ngl8m5c4eb1myoz0t707n7h" = { # AWS-GR_DISALLOW_VPC_INTERNET_ACCESS
        parameters = {
          "ExemptedPrincipalArns" : ["arn:aws:iam::*:role/RoleName"],
        }
      } },
      ...
    ],
    organizational_unit_ids = ["ou-2222-22222222"...]
  }
]
```

**Autorisations avec le moindre privilège pour le rôle IAM**

Ce modèle nécessite que vous assumiez un rôle IAM dans le compte de gestion. La meilleure pratique consiste à assumer un rôle avec des autorisations temporaires et à limiter les autorisations conformément au principe du moindre privilège. L'exemple de politique suivant autorise les actions minimales requises pour activer ou désactiver les AWS Control Tower contrôles.

```
{
    "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:DetachPolicy",
                "organizations:ListAccounts",
                "organizations:ListAWSServiceAccessForOrganization",
                "organizations:ListChildren",
                "organizations:ListOrganizationalUnitsForParent",
                "organizations:ListParents",
                "organizations:ListPoliciesForTarget",
                "organizations:ListRoots",
                "organizations:UpdatePolicy"
            ],
            "Resource": "*"
        }
    ]
}
```