Déployez et gérez les contrôles d'AWS Control Tower à l'aide d'AWS CDK et d'AWS CloudFormation - Recommandations AWS

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 contrôles d'AWS Control Tower à l'aide d'AWS CDK et d'AWS CloudFormation

Créée par Iker Reina Fuente (AWS) et Ivan Girardi (AWS)

Dépôt de code : aws-control-tower-controls-cdk

Environnement : Production

Technologies : sécurité, identité, conformité CloudNative ; infrastructure ; gestion et gouvernance

Services AWS : AWS CloudFormation ; AWS Control Tower ; AWS Organizations ; AWS CDK

Récapitulatif

Ce modèle décrit comment utiliser AWS CloudFormation et AWS Cloud Development Kit (AWS CDK) pour implémenter et administrer les contrôles préventifs, détectifs et proactifs de la tour de contrôle AWS Control Tower sous forme d'infrastructure sous forme de code (IaC). Un contrôle (également connu sous le nom de garde-corps) est une règle de haut niveau qui fournit une gouvernance continue pour l'ensemble de votre environnement AWS Control Tower. Par exemple, vous pouvez utiliser des contrôles pour exiger la journalisation de vos 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 ressources AWS et surveillent la conformité sur plusieurs 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.

Les contrôles d'AWS Control Tower s'appliquent à l'ensemble d'une unité organisationnelle (UO), et le contrôle affecte tous les comptes 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 des contrôles AWS Control Tower permet d'établir une base de sécurité solide pour votre zone de landing zone AWS. En utilisant ce modèle pour déployer les commandes sous forme d'iAC via CloudFormation AWS CDK, vous pouvez standardiser les commandes dans votre zone de landing zone et les déployer et les gérer plus efficacement. Cette solution utilise cdk_nag pour scanner l'application AWS CDK pendant le déploiement. Cet outil vérifie que l'application est conforme aux meilleures pratiques d'AWS.

Pour déployer les contrôles AWS Control Tower sous forme d'iAc, vous pouvez également utiliser HashiCorp Terraform au lieu d'AWS CDK. Pour plus d'informations, consultez Déployer et gérer les contrôles AWS Control Tower à l'aide de Terraform.

Public cible

Ce modèle est recommandé aux utilisateurs qui ont de l'expérience avec AWS Control Tower CloudFormation, AWS CDK et AWS Organizations.

Conditions préalables et limitations

Prérequis

  • Comptes AWS actifs gérés en tant qu'organisation dans AWS Organizations et dans une zone de landing zone AWS Control Tower. Pour obtenir des instructions, consultez Créer une structure de compte (AWS Well-Architected Labs).

  • Interface de ligne de commande AWS (AWS CLI), installée et configurée.

  • Gestionnaire de packages de nœuds (npm), installé et configuré pour le AWS CDK.

  • Conditions requises pour AWS CDK.

  • Autorisations permettant d'assumer un rôle AWS Identity and Access Management (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 dans la documentation AWS CDK.

  • 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 dans la documentation IAM.

  • Appliquez le contrôle basé sur la politique de contrôle des services (SCP) avec l'identifiant CT.CLOUDFORMATION.PR.1. Ce SCP doit être activé pour déployer des contrôles proactifs. Pour obtenir des instructions, consultez Interdire la gestion des types de ressources, des modules et des hooks dans le CloudFormation registre AWS.

Limites

  • Ce modèle fournit des instructions pour déployer cette solution sur les comptes AWS, qu'il s'agisse d'un compte de déploiement ou d'un 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.

Versions du produit

  • Python version 3.9 ou ultérieure

  • npm version 8.9.0 ou ultérieure

Architecture

Architecture cible

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

Les commandes AWS Control Tower sont classées 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 (SCP) 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 toutes les régions AWS.

  2. Les contrôles Detective sont conçus pour détecter des événements spécifiques lorsqu'ils se produisent et pour enregistrer l'action CloudTrail. Elles sont mises en œuvre avec les règles AWS Config. Le statut d'un contrôle de détection est soit clair, soit en violation, soit non activé. Les contrôles Detective s'appliquent uniquement dans les régions AWS prises en charge par AWS Control Tower.

  3. Les contrôles proactifs analysent les ressources qui seraient mises en service par 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 CloudFormation hooks AWS. 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 à vos unités d'organisation. 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.

Outils

Services AWS

  • AWS Cloud Development Kit (AWS CDK) est un framework de développement logiciel qui vous aide à définir et à provisionner l'infrastructure du cloud AWS sous forme de code. Le kit d'outils AWS CDK est le principal outil permettant d'interagir avec votre application AWS CDK.

  • AWS vous CloudFormation aide à configurer les ressources AWS, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie sur l'ensemble des comptes et des régions AWS.

  • AWS Config fournit une vue détaillée des ressources de votre compte AWS et de leur configuration. Il vous aide à identifier les liens entre les ressources et l'évolution de leurs configurations au fil du temps.

  • AWS Control Tower vous aide à configurer et à gérer un environnement AWS multi-comptes, conformément aux meilleures pratiques prescriptives.

  • AWS Organizations est un service de gestion de comptes qui vous aide à consolider plusieurs comptes AWS au sein d'une organisation que vous créez et gérez de manière centralisée.

Autres outils

  • cdk_nag est un outil open source qui utilise une combinaison de packs de règles pour vérifier que les applications AWS Cloud Development Kit (AWS CDK) respectent les meilleures pratiques.

  • 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 est un langage de programmation informatique polyvalent.

Référentiel de code

Le code de ce modèle est disponible dans le référentiel GitHub Deploy AWS Control Tower using AWS CDK. Vous utilisez le fichier cdk.json pour interagir avec l'application AWS CDK, et vous utilisez le fichier package.json pour installer les packages npm.

Bonnes pratiques

Épopées

TâcheDescriptionCompétences requises

Créez le rôle IAM dans le compte de gestion.

  1. Créez une politique IAM dans le compte de gestion avec les autorisations définies dans la politique IAM dans la section Informations supplémentaires. Pour obtenir des instructions, consultez la section Création de politiques IAM dans la documentation IAM. Prenez note de l'Amazon Resource Name (ARN) de la politique. Voici un exemple d'ARN.

    arn:aws:iam::<MANAGEMENT-ACCOUNT-ID>:policy/<POLICY-NAME>
  2. Créez un rôle IAM dans le compte de gestion, joignez la politique d'autorisation IAM que vous avez créée à l'étape précédente et associez la politique de confiance personnalisée à la politique de confiance de la section Informations supplémentaires. Pour obtenir des instructions, consultez la section Création d'un rôle à l'aide de politiques de confiance personnalisées dans la documentation IAM. Voici un exemple d'ARN pour le nouveau rôle.

    arn:aws:iam:: <MANAGEMENT-ACCOUNT-ID>:role/<ROLE-NAME>
DevOps ingénieur, AWS général

Bootstrap AWS CDK.

  1. Dans le compte de gestion, assumez un rôle autorisé à démarrer AWS CDK.

  2. Entrez la commande suivante en remplaçant la suivante :

    • <MANAGEMENT-ACCOUNT-ID>est l'identifiant du compte de gestion de l'organisation.

    • <AWS-CONTROL-TOWER-REGION>est la région AWS dans laquelle Control Tower est déployée. Pour obtenir la liste complète des codes de région, consultez la section Points de terminaison régionaux dans le manuel AWS General Reference.

    • <DEPLOYMENT-ACCOUNT-ID>est l'ID du compte de déploiement.

    • <DEPLOYMENT-ROLE-NAME>est le nom du rôle IAM que vous utilisez dans le compte de déploiement.

    • <POLICY-NAME>est le nom de la politique que vous avez créée dans le compte de gestion.

    $ npx cdk bootstrap aws://<MANAGEMENT-ACCOUNT-ID>/<AWS-CONTROL-TOWER-REGION> \ --trust arn:aws:iam::<DEPLOYMENT-ACCOUNT-ID>:role/<DEPLOYMENT-ROLE-NAME> \ --cloudformation-execution-policies arn:aws:iam::<MANAGEMENT-ACCOUNT-ID>:policy/<POLICY-NAME>
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 contrôles Deploy AWS Control Tower à l'aide du référentiel AWS CDK depuis. GitHub

git clone https://github.com/aws-samples/aws-control-tower-controls-cdk.git
DevOps ingénieur, AWS général

Modifiez le fichier de configuration AWS CDK.

  1. Dans le référentiel cloné, ouvrez le fichier constants.py.

  2. Dans le ACCOUNT_ID paramètre, saisissez l'identifiant de votre compte de gestion.

  3. Dans le <AWS-CONTROL-TOWER-REGION> paramètre, entrez la région AWS dans laquelle AWS Control Tower est déployée.

  4. Dans le ROLE_ARN paramètre, entrez l'ARN du rôle que vous avez créé dans le compte de gestion.

  5. Dans la GUARDRAILS_CONFIGURATION section, dans le Enable-Control paramètre, entrez les identifiants de l'API de contrôle. Entrez l'identifiant entre guillemets et séparez les différents identificateurs par des virgules. Chaque contrôle possède un identifiant d'API unique pour chaque région dans laquelle AWS Control Tower est disponible. Pour trouver l'identifiant de contrôle, procédez comme suit :

    1. Dans les tables des métadonnées de contrôle, localisez le contrôle que vous souhaitez activer.

    2. Dans la colonne Identifiants d'API de contrôle, par région, recherchez l'identifiant d'API de la région dans laquelle vous effectuez l'appel d'API, par exemplearn:aws:controltower:us-east-1::control/AWS-GR_ENCRYPTED_VOLUMES.

    3. Extrayez l'identifiant de contrôle de l'identifiant régional, tel queAWS-GR_ENCRYPTED_VOLUMES.

  6. Dans la GUARDRAILS_CONFIGURATION section, dans le OrganizationalUnitIds paramètre, entrez l'ID de l'unité organisationnelle dans laquelle vous souhaitez activer le contrôle, par exempleou-1111-11111111. Entrez l'identifiant entre guillemets et séparez les différents identifiants par des virgules. Pour plus d'informations sur la façon de récupérer les ID d'unité d'organisation, consultez la section Affichage des détails d'une unité d'organisation.

  7. Enregistrez et fermez le fichier constants.py. Pour un exemple de fichier constants.py mis à jour, consultez la section Informations supplémentaires de ce modèle.

TâcheDescriptionCompé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 piles AWS CDK dans le compte de gestion. Pour plus d'informations sur l'attribution d'un rôle IAM dans l'AWS CLI, consultez Utiliser un rôle IAM dans l'AWS CLI.

DevOps ingénieur, AWS général

Activez l'environnement.

Si vous utilisez Linux ou macOS :

  1. Entrez la commande suivante pour créer un environnement virtuel.

    $ python3 -m venv .venv
  2. Une fois l'environnement virtuel créé, entrez la commande suivante pour l'activer.

    $ source .venv/bin/activate

Si vous utilisez Windows :

  1. Entrez la commande suivante pour activer un environnement virtuel.

    % .venv\Scripts\activate.bat
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.

$ ./scripts/install_deps.sh
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.

$ npx cdk synth $ npx cdk deploy
DevOps ingénieur, AWS général, Python

Ressources connexes

Documentation AWS

Autres ressources

Informations supplémentaires

Exemple de fichier constants.py

Voici un exemple de fichier constants.py mis à jour.

ACCOUNT_ID = 111122223333 AWS_CONTROL_TOWER_REGION = us-east-2 ROLE_ARN = "arn:aws:iam::111122223333:role/CT-Controls-Role" GUARDRAILS_CONFIGURATION = [ { "Enable-Control": { "AWS-GR_ENCRYPTED_VOLUMES", ... }, "OrganizationalUnitIds": ["ou-1111-11111111", "ou-2222-22222222"...], }, { "Enable-Control": { "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 contrôles AWS Control Tower lors du déploiement de piles AWS CDK 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”: {} } ] }