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.
Utilisez Terraform pour activer automatiquement Amazon GuardDuty pour une organisation
Créée par Aarthi Kannan () AWS
Référentiel de code : amazon-guardduty-for-aws - organizations-with-terraform | Environnement : Production | Technologies : sécurité, identité, conformité ; DevOps |
Charge de travail : toutes les autres charges de travail | AWSservices : Amazon GuardDuty ; AWS Organizations |
Récapitulatif
Amazon surveille GuardDuty en permanence vos comptes Amazon Web Services (AWS) et utilise les informations sur les menaces pour identifier les activités inattendues et potentiellement malveillantes au sein de votre AWS environnement. L'activation manuelle GuardDuty pour plusieurs comptes ou organisations, dans plusieurs AWS régions ou via la console de AWS gestion peut s'avérer fastidieuse. Vous pouvez automatiser le processus en utilisant un outil d'infrastructure en tant que code (IaC), tel que Terraform, qui peut fournir et gérer des services et des ressources multicomptes et multirégionaux dans le cloud.
AWSrecommande d'utiliser AWS Organizations pour configurer et gérer plusieurs comptes dans GuardDuty. Ce modèle est conforme à cette recommandation. L'un des avantages de cette approche est que, lorsque de nouveaux comptes sont créés ou ajoutés à l'organisation, GuardDuty ils sont automatiquement activés dans ces comptes pour toutes les régions prises en charge, sans intervention manuelle.
Ce modèle montre comment utiliser HashiCorp Terraform pour activer Amazon GuardDuty pour trois comptes Amazon Web Services (AWS) ou plus dans une organisation. L'exemple de code fourni avec ce modèle effectue les opérations suivantes :
Active GuardDuty l'accès à tous les AWS comptes actuellement membres de l'organisation cible dans AWS Organizations
Active la fonctionnalité d'activation automatique GuardDuty, qui active automatiquement tous GuardDuty les comptes ajoutés à l'organisation cible à l'avenir
Vous permet de sélectionner les régions dans lesquelles vous souhaitez activer GuardDuty
Utilise le compte de sécurité de l'organisation en tant qu'administrateur GuardDuty délégué
Crée un compartiment Amazon Simple Storage Service (Amazon S3) dans le compte de journalisation et le GuardDuty configure pour publier les résultats agrégés de tous les comptes de ce compartiment
Attribue une politique de cycle de vie qui transfère les résultats du compartiment S3 vers le stockage flexible de récupération Amazon S3 Glacier après 365 jours, par défaut
Vous pouvez exécuter manuellement cet exemple de code ou l'intégrer dans votre pipeline d'intégration continue et de livraison continue (CI/CD).
Public cible
Ce modèle est recommandé aux utilisateurs expérimentés avec Terraform GuardDuty, Python et AWS Organizations.
Conditions préalables et limitations
Prérequis
Un compte AWS actif.
Une organisation est configurée dans AWS Organizations et contient au moins les trois comptes suivants :
Un compte de gestion — Il s'agit du compte à partir duquel vous déployez le code Terraform, soit de manière autonome, soit dans le cadre du pipeline CI/CD. L'état Terraform est également stocké dans ce compte.
Un compte de sécurité — Ce compte est utilisé en tant qu'administrateur GuardDuty délégué. Pour plus d'informations, consultez Considérations importantes pour les administrateurs GuardDuty délégués (GuardDuty documentation).
Un compte de journalisation — Ce compte contient le compartiment S3 où sont GuardDuty publiés les résultats agrégés de tous les comptes membres.
Pour plus d'informations sur la façon de configurer l'organisation avec la configuration requise, voir Créer une structure de compte
(AWSWell-Architected Labs). Un compartiment Amazon S3 et une table Amazon DynamoDB qui servent de backend distant pour stocker l'état de Terraform dans le compte de gestion. Pour plus d'informations sur l'utilisation de backends distants pour l'état Terraform, consultez S3 Backends
(documentation Terraform). Pour un exemple de code qui configure la gestion de l'état à distance avec un backend S3, voir remote-state-s3-backend (Terraform Registry). Notez les critères suivants : Le compartiment S3 et la table DynamoDB doivent se trouver dans la même région.
Lors de la création de la table DynamoDB, la clé de partition doit
LockID
être (distinguer majuscules et minuscules) et le type de clé de partition doit être String. Tous les autres paramètres du tableau doivent être à leurs valeurs par défaut. Pour plus d'informations, consultez À propos des clés primaires et Création d'une table (documentation DynamoDB).
Un compartiment S3 qui sera utilisé pour stocker les journaux d'accès pour le compartiment S3 dans lequel les résultats GuardDuty seront publiés. Pour plus d'informations, consultez Activer la journalisation des accès au serveur Amazon S3 (documentation Amazon S3). Si vous effectuez un déploiement dans une zone d'atterrissage de AWS Control Tower, vous pouvez réutiliser le compartiment S3 dans le compte d'archive du journal à cette fin.
La version 0.14.6 ou ultérieure de Terraform est installée et configurée. Pour plus d'informations, consultez Get Started — AWS
(documentation Terraform). La version 3.9.6 ou ultérieure de Python est installée et configurée. Pour plus d'informations, consultez la section Sources
(site Web de Python). AWSSDKpour Python (Boto3) est installé. Pour plus d'informations, voir Installation
(documentation Boto3). jq est installé et configuré. Pour plus d'informations, consultez Télécharger jq
(documentation jq).
Limites
Ce modèle est compatible avec les systèmes d'exploitation macOS et Amazon Linux 2. Ce modèle n'a pas été testé pour être utilisé dans les systèmes d'exploitation Windows.
Remarque : le support d'Amazon Linux 2 touche à sa fin. Pour plus d'informations, consultez Amazon Linux 2 FAQs
. GuardDuty ne doit pas déjà être activé dans aucun des comptes, dans aucune des régions cibles.
Dans ce modèle, la solution IaC ne déploie pas les prérequis.
Ce modèle est conçu pour une zone AWS d'atterrissage conforme aux meilleures pratiques suivantes :
La zone d'atterrissage a été créée à l'aide AWS de Control Tower.
Des AWS comptes distincts sont utilisés pour des raisons de sécurité et de journalisation.
Versions du produit
Terraform version 0.14.6 ou ultérieure. L'exemple de code a été testé pour la version 1.2.8.
Python version 3.9.6 ou ultérieure.
Architecture
Cette section donne un aperçu général de cette solution et de l'architecture établie par l'exemple de code. Le schéma suivant montre les ressources déployées sur les différents comptes de l'organisation, au sein d'une même AWS région.
![Schéma d'architecture illustrant les ressources liées à la gestion, à la sécurité, à la journalisation et aux comptes des membres.](images/pattern-img/c9b68627-b68e-47a6-9933-d0f36ea10ae2/images/86193749-eef9-4d63-8a7f-daa0cd03fbfe.png)
Terraform crée le rôle GuardDutyTerraformOrgRoleAWSIdentity and Access Management (IAM) dans le compte de sécurité et le compte de connexion.
Terraform crée un compartiment S3 dans la AWS région par défaut du compte de journalisation. Ce compartiment est utilisé comme destination de publication pour agréger tous les GuardDuty résultats provenant de toutes les régions et de tous les comptes de l'organisation. Terraform crée également une AWS clé du service de gestion des clés (AWSKMS) dans le compte de sécurité qui est utilisée pour chiffrer les résultats du compartiment S3 et configure l'archivage automatique des résultats du compartiment S3 dans le stockage S3 Glacier Flexible Retrieval.
À partir du compte de gestion, Terraform désigne le compte de sécurité comme administrateur délégué pour. GuardDuty Cela signifie que le compte de sécurité gère désormais le GuardDuty service pour tous les comptes des membres, y compris le compte de gestion. Les comptes de membres individuels ne peuvent pas être suspendus ou GuardDuty désactivés par eux-mêmes.
Terraform crée le GuardDuty détecteur dans le compte de sécurité, pour l'administrateur GuardDuty délégué.
S'il n'est pas déjà activé, Terraform active la protection S3 dans. GuardDuty Pour plus d'informations, consultez la section Protection d'Amazon S3 sur Amazon GuardDuty (GuardDuty documentation).
Terraform inscrit tous les comptes de membres actifs actuels de l'organisation en tant que membres. GuardDuty
Terraform configure l'administrateur GuardDuty délégué pour publier les résultats agrégés de tous les comptes membres dans le compartiment S3 du compte de journalisation.
Terraform répète les étapes 3 à 7 pour chaque AWS région que vous choisissez.
Automatisation et mise à l'échelle
L'exemple de code fourni est modularisé afin que vous puissiez l'intégrer dans votre pipeline CI/CD pour un déploiement automatisé.
Outils
AWSservices
Amazon DynamoDB est un service SQL sans base de données entièrement géré qui fournit des performances rapides, prévisibles et évolutives.
Amazon GuardDuty est un service de surveillance continue de la sécurité qui analyse et traite les journaux afin d'identifier les activités inattendues et potentiellement non autorisées dans votre AWS environnement.
AWSIdentity and Access Management (IAM) vous aide à gérer en toute sécurité l'accès à vos AWS ressources en contrôlant qui est authentifié et autorisé à les utiliser.
AWSLe service de gestion des clés (AWSKMS) vous aide à créer et à contrôler des clés cryptographiques pour protéger vos données.
AWSOrganizations est un service de gestion de comptes qui vous aide à consolider plusieurs AWS comptes au sein d'une organisation que vous créez et gérez de manière centralisée.
Amazon Simple Storage Service (Amazon S3) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données.
AWSSDKfor Python (Boto3)
est un kit de développement logiciel qui vous aide à intégrer votre application, bibliothèque ou script Python à des AWS services.
Autres outils et services
HashiCorp Terraform
est une application d'interface en ligne de commande qui vous aide à utiliser du code pour provisionner et gérer l'infrastructure et les ressources du cloud. Python
est un langage de programmation polyvalent. jq
est un processeur de ligne de commande qui vous permet de travailler avec des fichiers. JSON
Référentiel de code
Le code de ce modèle est disponible sur GitHub, dans le organizations-with-terraform référentiel amazon-guardduty-for-aws-
Épopées
Tâche | Description | Compétences requises |
---|---|---|
Pour cloner le référentiel. | Dans un shell Bash, exécutez la commande suivante. Dans Cloner le référentiel, dans la section Informations supplémentaires, vous pouvez copier la commande complète contenant le URL du GitHub référentiel. Cela clone le organizations-with-terraform référentiel amazon-guardduty-for-aws-
| DevOps ingénieur |
Modifiez le fichier de configuration Terraform. |
| DevOps ingénieur, généralAWS, Terraform, Python |
Générez CloudFormation des modèles pour les nouveaux IAM rôles. | Ce modèle inclut une solution IaC permettant de créer deux CloudFormation modèles. Ces modèles créent deux IAM rôles que Terraform utilise lors du processus de configuration. Ces modèles respectent les meilleures pratiques de sécurité relatives aux autorisations du moindre privilège.
| DevOps ingénieur, général AWS |
Créez les IAM rôles. | En suivant les instructions de la section Création d'une pile (CloudFormation documentation), procédez comme suit :
| DevOps ingénieur, général AWS |
Assumez le IAM rôle dans le compte de gestion. | Pour des raisons de sécurité, nous vous recommandons d'assumer le nouveau management-account-roleIAMrôle avant de continuer. Dans l'interface de ligne de AWS commande (AWSCLI), entrez la commande dans Assumer le IAM rôle du compte de gestion dans la section Informations supplémentaires. | DevOps ingénieur, général AWS |
Exécutez le script de configuration. | Dans le
Le script full-setup.sh exécute les actions suivantes :
| DevOps ingénieur, Python |
Tâche | Description | Compétences requises |
---|---|---|
Exécutez le script de nettoyage. | Si vous avez utilisé ce modèle pour l'activer GuardDuty pour l'organisation et que vous souhaitez le désactiver GuardDuty, dans le
Ce script est désactivé GuardDuty dans l'organisation cible, supprime toutes les ressources déployées et restaure l'organisation à son état antérieur avant d'utiliser Terraform pour l'activer. GuardDuty Remarque Ce script ne supprime pas les fichiers d'état Terraform ni ne verrouille les fichiers des backends locaux et distants. Si cela est nécessaire, vous devez effectuer ces actions manuellement. En outre, ce script ne supprime pas l'organisation importée ni les comptes qu'elle gère. L'accès sécurisé pour GuardDuty n'est pas désactivé dans le cadre du script de nettoyage. | DevOps ingénieur, généralAWS, Terraform, Python |
Supprimez IAM les rôles. | Supprimez les piles créées avec les modèles role-to-assume-for-role-creation.yaml et .yaml. management-account-role CloudFormation Pour plus d'informations, consultez Supprimer une pile (CloudFormation documentation). | DevOps ingénieur, général AWS |
Ressources connexes
AWSdocumentation
Gestion de plusieurs comptes (GuardDuty documentation)
Octroi du moindre privilège (IAMdocumentation)
AWScommercialisation
Autres ressources
Informations supplémentaires
Cloner le référentiel
Exécutez la commande suivante pour cloner le GitHub référentiel.
git clone https://github.com/aws-samples/amazon-guardduty-for-aws-organizations-with-terraform
Assumez le IAM rôle du compte de gestion
Pour assumer le IAM rôle dans le compte de gestion, exécutez la commande suivante. Remplacez <IAM role ARN>
par le ARN du IAM rôle.
export ROLE_CREDENTIALS=$(aws sts assume-role --role-arn <IAM role ARN> --role-session-name AWSCLI-Session --output json) export AWS_ACCESS_KEY_ID=$(echo $ROLE_CREDENTIALS | jq .Credentials.AccessKeyId | sed 's/"//g') export AWS_SECRET_ACCESS_KEY=$(echo $ROLE_CREDENTIALS | jq .Credentials.SecretAccessKey | sed 's/"//g') export AWS_SESSION_TOKEN=$(echo $ROLE_CREDENTIALS | jq .Credentials.SessionToken | sed 's/"//g')