Activez Amazon de GuardDuty manière conditionnelle à l'aide de modèles 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.

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

  • Un actif Compte AWS

  • Rôle Gestion des identités et des accès AWS (IAM) autorisé à créer, mettre à jour et supprimer des piles CloudFormation

  • AWS Command Line Interface (AWS CLI), installé et configuré

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 :

Utiliser une CloudFormation pile pour l'activer GuardDuty dans un compte AWS.
  1. Vous déployez un CloudFormation modèle pour créer une CloudFormation pile.

  2. La pile crée un rôle IAM et une fonction Lambda.

  3. La fonction Lambda assume le rôle IAM.

  4. 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âcheDescriptionCompétences requises

Stockez le code dans Amazon S3.

  1. Copiez le code Python dans la section Informations supplémentaires de ce modèle.

  2. Collez le code dans un éditeur de texte.

  3. Enregistrez le fichier sous le nom index.py.

  4. Chargez le fichier dans un compartiment Amazon Simple Storage Service (Amazon S3). Pour obtenir des instructions, consultez la section Chargement d'objets dans la documentation Amazon S3.

AWS DevOps

Créez le CloudFormation modèle.

  1. Ouvrez la CloudFormation console.

  2. Dans le volet de navigation de gauche, choisissez Infrastructure Composer.

  3. Si aucun canevas vierge ne s'affiche, créez un nouveau projet.

  4. Glissez et déposez une AWS Lambda fonction sur le canevas.

  5. Dans la vue du modèle, vérifiez qu'une fonction Lambda et un groupe de journaux sont présents.

  6. Modifiez Runtime la fonction Lambda avec la dernière version de Python.

  7. Vérifiez que la Handler propriété a une valeur de index.lambda_handler.

  8. Configurez la CodeUri propriété pour qu'elle soit l'emplacement Amazon S3 où vous avez chargé le code Python. Un exemple de valeur est s3://amzn-s3-demo-bucket/key-name.

  9. Ajoutez une Policies propriété à la ressource. Suivez les meilleures pratiques en matière de sécurité afin de fournir les autorisations d'accès avec le moindre privilège, ainsi que CloudFormation les GuardDuty actions à effectuer. Par exemple, vous pouvez utiliser la politique AWSLambdaExecute gérée pour les journaux et une politique personnalisée iam:CreateServiceLinkedRole pour GuardDuty.

  10. Ajoutez une définition de ressource personnalisée à l'extrait en accédant à la vue du modèle.

    CheckResourceExist: Type: 'Custom::LambdaCustomResource' Properties: ServiceToken: !GetAtt Function.Arn
  11. Enregistrez le modèle soussample.yaml.

AWS DevOps

Créez la CloudFormation pile.

  1. Dans le AWS CLI, entrez la commande suivante. Cela crée une nouvelle CloudFormation pile à l'aide du sample.yaml fichier. Pour plus d'informations, consultez la section Création d'une pile dans la CloudFormation documentation.

    aws cloudformation create-stack \ --stack-name guardduty-cf-stack \ --template-body file://sample.yaml
  2. Vérifiez que la valeur suivante apparaît dans le AWS CLI, indiquant que la pile a été créée avec succès. Le temps nécessaire à la création de la pile peut varier.

    "StackStatus": "CREATE_COMPLETE",
AWS DevOps

Validez que cette option GuardDuty est activée pour le Compte AWS.

  1. Connectez-vous à la GuardDuty console AWS Management Console et ouvrez-la.

  2. Vérifiez que le GuardDuty service est activé.

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

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, {})