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
Créée par Ram Kandaswamy (AWS)
Environnement : Production | Technologies : sécurité, identité, conformité DevOps ; opérations | Services AWS : AWS CloudFormation ; Amazon GuardDuty ; AWS Lambda ; AWS Identity and Access Management |
Récapitulatif
Vous pouvez activer Amazon GuardDuty sur un compte Amazon Web Services (AWS) à l'aide d'un CloudFormation modèle AWS. Par défaut, s' GuardDuty il est déjà activé lorsque vous essayez de l' CloudFormation activer, le déploiement de la pile échoue. Toutefois, vous pouvez utiliser les conditions de votre CloudFormation modèle pour vérifier s'il GuardDuty est déjà activé. CloudFormation prend en charge l'utilisation de conditions qui comparent des valeurs statiques ; il ne prend pas en charge l'utilisation de la sortie d'une autre propriété de ressource dans le même modèle. Pour plus d'informations, consultez la section Conditions dans le guide de CloudFormation l'utilisateur.
Dans ce modèle, vous utilisez une ressource CloudFormation personnalisée soutenue par une fonction AWS Lambda pour l'activer de manière conditionnelle GuardDuty si elle n'est pas déjà activée. Si cette option GuardDuty est activée, la pile capture le statut et l'enregistre dans la section de sortie de la pile. S'il n' GuardDuty est pas activé, la pile l'active.
Conditions préalables et limitations
Prérequis
Un compte AWS actif
Rôle AWS Identity and Access Management (IAM) autorisé à créer, mettre à jour et supprimer des piles CloudFormation
Limites
S'il GuardDuty a été désactivé manuellement pour un compte ou une 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 le compte AWS cible, la fonction Lambda l'active.
![Le processus d'activation GuardDuty par le déploiement d'un CloudFormation modèle](images/pattern-img/3abd7cb7-0937-41fe-8eaa-79aedb182732/images/b2d81a61-31f7-4cb9-9de3-f7db1b92ccd9.png)
Automatisation et mise à l'échelle
Vous pouvez utiliser la CloudFormation StackSet fonctionnalité AWS pour étendre cette solution à plusieurs comptes AWS et régions AWS. Pour plus d'informations, consultez la section Travailler avec AWS CloudFormation StackSets dans le guide de CloudFormation l'utilisateur.
Outils
L'interface de ligne de commande AWS (AWS CLI) est un outil open source qui vous permet d'interagir avec les services AWS par le biais de commandes dans votre shell de ligne de commande.
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 les comptes et les régions AWS.
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 environnement AWS.
AWS Identity and Access Management (IAM) vous aide à gérer en toute sécurité l'accès à vos ressources AWS en contrôlant qui est authentifié et autorisé à les utiliser.
AWS Lambda est un service de calcul qui vous permet d'exécuter du code sans avoir à approvisionner ou à 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
Tâche | Description | Compétences requises |
---|---|---|
Créez le CloudFormation modèle. |
| AWS DevOps |
Créez la CloudFormation pile. |
| AWS DevOps |
Validez que cela GuardDuty est activé pour le compte AWS. |
| Administrateur du cloud, administrateur AWS |
Configurez des comptes ou des régions AWS supplémentaires. | En fonction de votre cas d'utilisation, utilisez la CloudFormation StackSet fonctionnalité AWS pour étendre cette solution à plusieurs comptes AWS et régions AWS. Pour plus d'informations, consultez la section Travailler avec AWS CloudFormation StackSets dans le guide de CloudFormation l'utilisateur. | Administrateur du cloud, administrateur AWS |
Ressources connexes
Références
Tutoriels et vidéos
Simplifiez la gestion de votre infrastructure à l'aide d'AWS CloudFormation
(didacticiel) Utilisez Amazon GuardDuty et AWS Security Hub pour sécuriser plusieurs comptes
(AWS re:Invent 2020) Bonnes pratiques en matière de création d'AWS CloudFormation (AWS
re:Invent 2019) Détection des menaces sur AWS : présentation d'Amazon GuardDuty
(AWS Re:InForce 2019)
Informations supplémentaires
CloudFormation modèle
AWSTemplateFormatVersion: 2010-09-09 Resources: rLambdaLogGroup: Type: 'AWS::Logs::LogGroup' DeletionPolicy: Delete Properties: RetentionInDays: 7 LogGroupName: /aws/lambda/resource-checker rLambdaCheckerLambdaRole: Type: 'AWS::IAM::Role' Properties: RoleName: !Sub 'resource-checker-lambda-role-${AWS::Region}' AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: lambda.amazonaws.com Action: 'sts:AssumeRole' Path: / Policies: - PolicyName: !Sub 'resource-checker-lambda-policy-${AWS::Region}' PolicyDocument: Version: 2012-10-17 Statement: - Sid: CreateLogGroup Effect: Allow Action: - 'logs:CreateLogGroup' - 'logs:CreateLogStream' - 'logs:PutLogEvents' - 'iam:CreateServiceLinkedRole' - 'cloudformation:CreateStack' - 'cloudformation:DeleteStack' - 'cloudformation:Desc*' - 'guardduty:CreateDetector' - 'guardduty:ListDetectors' - 'guardduty:DeleteDetector' Resource: '*' resourceCheckerLambda: Type: 'AWS::Lambda::Function' Properties: Description: Checks for resource type enabled and possibly name to exist FunctionName: resource-checker Handler: index.lambda_handler Role: !GetAtt - rLambdaCheckerLambdaRole - Arn Runtime: python3.8 MemorySize: 128 Timeout: 180 Code: ZipFile: | 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": "A sample 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, {}) CheckResourceExist: Type: 'Custom::LambdaCustomResource' Properties: ServiceToken: !GetAtt - resourceCheckerLambda - Arn Outputs: status: Value: !GetAtt - CheckResourceExist - status
Option de code alternative pour la ressource Lambda
Le CloudFormation modèle fourni utilise un code en ligne pour référencer la ressource Lambda, afin de faciliter les références et les conseils. Vous pouvez également placer le code Lambda dans un bucket Amazon Simple Storage Service (Amazon S3) et le référencer dans le modèle. CloudFormation Le code intégré ne prend pas en charge les dépendances de packages ni les bibliothèques. Vous pouvez les prendre en charge en plaçant le code Lambda dans un compartiment S3 et en le référençant dans le modèle. CloudFormation
Remplacez les lignes de code suivantes :
Code: ZipFile: |
avec les lignes de code suivantes :
Code: S3Bucket: <bucket name> S3Key: <python file name> S3ObjectVersion: <version>
La S3ObjectVersion
propriété peut être omise si vous n'utilisez pas le versionnement dans votre compartiment S3. Pour plus d'informations, consultez la section Utilisation du versionnement dans les compartiments S3 dans le guide de l'utilisateur d'Amazon S3.