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 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](images/pattern-img/7d0d5e37-58ac-4621-b6b0-cb8c1c767ab0/images/787b7ca0-9d29-4294-a407-6019e38f08c7.png)
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 :
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.
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.
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
Bonnes pratiques
Respectez le principe du moindre privilège (documentation IAM). Les exemples de politique IAM et de politique de confiance fournis dans ce modèle incluent les autorisations minimales requises, et les piles AWS CDK créées dans le compte de gestion sont limitées par ces autorisations.
Suivez les meilleures pratiques pour les administrateurs d'AWS Control Tower (documentation AWS Control Tower).
Suivez les meilleures pratiques pour développer et déployer une infrastructure cloud avec le CDK AWS (documentation AWS CDK).
Lors du démarrage de l'AWS CDK, personnalisez le modèle de bootstrap pour définir les politiques et les comptes fiables qui devraient pouvoir lire et écrire sur n'importe quelle ressource du compte de gestion. Pour plus d'informations, consultez la section Personnalisation du bootstrap.
Utilisez des outils d'analyse de code, tels que 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.
Épopées
Tâche | Description | Compétences requises |
---|---|---|
Créez le rôle IAM dans le compte de gestion. |
| DevOps ingénieur, AWS général |
Bootstrap AWS CDK. |
| 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
| DevOps ingénieur, AWS général |
Modifiez le fichier de configuration AWS CDK. |
|
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 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 :
Si vous utilisez Windows :
| 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.
| 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.
| DevOps ingénieur, AWS général, Python |
Ressources connexes
Documentation AWS
À propos des contrôles (documentation AWS Control Tower)
Bibliothèque de contrôles (documentation AWS Control Tower)
Commandes du kit AWS CDK (documentation AWS CDK)
Déployez et gérez les contrôles AWS Control Tower à l'aide de Terraform (AWS Prescriptive Guidance)
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”: {} } ] }