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.
Activez Amazon de GuardDuty manière conditionnelle à l'aide de modèles AWS CloudFormation
Ram Kandaswamy, Amazon Web Services
Résumé
AWS CloudFormation, un outil d'infrastructure sous forme de code (IaC), vous aide à gérer les AWS ressources par le biais de déploiements basés sur des modèles. CloudFormation est généralement utilisé pour gérer les AWS ressources. L'utiliser pour activer Services AWS, comme Amazon GuardDuty, peut présenter des défis uniques. GuardDuty est un service de détection des menaces qui surveille en permanence vos Comptes AWS activités malveillantes et vos comportements non autorisés. Contrairement aux ressources classiques qui peuvent être créées plusieurs fois, GuardDuty il s'agit d'un service qui doit être activé une fois par compte et Région AWS. Les CloudFormation conditions traditionnelles ne prennent en charge que les comparaisons de valeurs statiques, ce qui rend difficile la vérification de l'état actuel de services tels que GuardDuty. Si vous essayez de l'activer GuardDuty via CloudFormation un compte où il est déjà actif, le déploiement de la pile échoue. Cela peut créer des défis opérationnels pour les DevOps équipes qui gèrent des environnements multi-comptes.
Ce modèle apporte une solution à ce défi. Il utilise des ressources CloudFormation personnalisées soutenues par des AWS Lambdafonctions pour effectuer des vérifications d'état dynamiques. La logique conditionnelle GuardDuty ne s'active que si elle n'est pas déjà activée. Il utilise les sorties de la pile pour enregistrer le GuardDuty statut pour référence future.
En suivant ce modèle, vous pouvez automatiser les GuardDuty déploiements au sein de votre AWS infrastructure tout en maintenant des opérations de CloudFormation stack propres et prévisibles. Cette approche est particulièrement utile pour les organisations qui :
Gestion de plusieurs Comptes AWS via IaC
Mise en œuvre de services de sécurité à grande échelle
Exiger des déploiements d'infrastructures idempotents
Automatisation des déploiements de services de sécurité
Conditions préalables et limitations
Conditions préalables
Limites
S'il GuardDuty a été désactivé manuellement pour un Compte AWS ou Région AWS, ce modèle ne s'active pas GuardDuty pour ce compte ou cette région cible.
Architecture
Pile technologique cible
Le modèle est utilisé CloudFormation pour l'infrastructure en tant que code (IaC). Vous utilisez une ressource CloudFormation personnalisée soutenue par une fonction Lambda pour obtenir la fonctionnalité d'activation dynamique des services.
Architecture cible
Le schéma d'architecture de haut niveau suivant montre le processus d'activation GuardDuty par le déploiement d'un CloudFormation modèle :

Vous déployez un CloudFormation modèle pour créer une CloudFormation pile.
La pile crée un rôle IAM et une fonction Lambda.
La fonction Lambda assume le rôle IAM.
Si GuardDuty ce n'est pas déjà le cas sur la cible Compte AWS, la fonction Lambda l'active.
Automatisation et mise à l'échelle
Vous pouvez utiliser cette AWS CloudFormation StackSet fonctionnalité pour étendre cette solution à plusieurs Comptes AWS et Régions AWS. Pour plus d'informations, consultez la section Travailler avec AWS CloudFormation StackSets dans la CloudFormation documentation.
Outils
AWS Command Line Interface (AWS CLI) est un outil open source qui vous permet d'interagir Services AWS par le biais de commandes dans votre interface de ligne de commande.
AWS CloudFormationvous 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.
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.
Gestion des identités et des accès AWS (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.
AWS Lambda est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.
Épopées
| Sous-tâche | Description | Compétences requises |
|---|---|---|
Stockez le code dans Amazon S3. |
| AWS DevOps |
Créez le CloudFormation modèle. |
| AWS DevOps |
Créez la CloudFormation pile. |
| AWS DevOps |
Validez que cette option GuardDuty est activée pour le Compte AWS. |
| Administrateur cloud, administrateur AWS |
Configurez des comptes ou des régions supplémentaires. | Selon les besoins de votre cas d'utilisation, utilisez cette CloudFormation StackSet fonctionnalité pour étendre cette solution à plusieurs Comptes AWS et Régions AWS. Pour plus d'informations, consultez la section Travailler avec AWS CloudFormation StackSets dans la CloudFormation documentation. | Administrateur cloud, administrateur AWS |
Ressources connexes
Références
Tutoriels et vidéos
Simplifiez la gestion de votre infrastructure à l'aide
de AWS CloudFormation(didacticiel) Utilisez Amazon GuardDuty AWS Security Hub CSPM pour sécuriser plusieurs comptes
(AWS re:Invent 2020) Bonnes pratiques en matière de création AWS CloudFormation
(AWS re:Invent 2019) Détection des menaces sur AWS : présentation d'Amazon GuardDuty
(AWS Re:InForce 2019)
Informations supplémentaires
Code Python
import boto3 import os import json from botocore.exceptions import ClientError import cfnresponse guardduty=boto3.client('guardduty') cfn=boto3.client('cloudformation') def lambda_handler(event, context): print('Event: ', event) if 'RequestType' in event: if event['RequestType'] in ["Create","Update"]: enabled=False try: response=guardduty.list_detectors() if "DetectorIds" in response and len(response["DetectorIds"])>0: enabled="AlreadyEnabled" elif "DetectorIds" in response and len(response["DetectorIds"])==0: cfn_response=cfn.create_stack( StackName='guardduty-cfn-stack', TemplateBody='{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "Guard duty creation template", "Resources": { "IRWorkshopGuardDutyDetector": { "Type": "AWS::GuardDuty::Detector", "Properties": { "Enable": true } } } }' ) enabled="True" except Exception as e: print("Exception: ",e) responseData = {} responseData['status'] = enabled cfnresponse.send(event, context, cfnresponse.SUCCESS, responseData, "CustomResourcePhysicalID" ) elif event['RequestType'] == "Delete": cfn_response=cfn.delete_stack( StackName='guardduty-cfn-stack') cfnresponse.send(event, context, cfnresponse.SUCCESS, {})