Déploiement de la Control Tower (CT) - Réponse de sécurité automatisée sur 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éploiement de la Control Tower (CT)

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

Prérequis

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

Pour savoir comment personnaliser votre zone d'atterrissage, reportez-vous à : Personnalisation de votre zone d'atterrissage

Pour lancer et déployer votre zone d'atterrissage, voir : Guide de déploiement de la zone d'atterrissage

Vue d'ensemble du déploiement

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

Étape 1 : créer et déployer un compartiment S3

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

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

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::<execute_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.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::<asset bucket name>-<region>/*", "arn:aws:s3:::<asset bucket name>-<region>" ], "Condition": { "StringEquals": { "aws:PrincipalOrgID": "<org id>" } } }, { "Effect": "Allow", "Principal": "*", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::<asset bucket name>-<region>/*", "arn:aws:s3:::<asset bucket name>-<region>" ], "Condition": { "ArnLike": { "aws:PrincipalArn": "arn:aws:iam::<execute_account_id>:role/<iam_role_name>" } } } ] }
4. Préparation de la construction

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

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 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

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 des CloudFormation modèles

Le manifeste des composants ASR ressemble à ceci :

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: LoadSCAdminStack parameter_value: "yes" - parameter_key: LoadCIS120AdminStack parameter_value: "no" - parameter_key: TargetAccountIDsStrategy parameter_value: "INCLUDE" - 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: TargetAccountIDs parameter_value: "ALL" - 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