Aktivieren Sie Amazon GuardDuty unter bestimmten Bedingungen mithilfe von Vorlagen AWS CloudFormation - AWS Prescriptive Guidance

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Aktivieren Sie Amazon GuardDuty unter bestimmten Bedingungen mithilfe von Vorlagen AWS CloudFormation

Erstellt von Ram Kandaswamy () AWS

Umwelt: Produktion

Technologien: Sicherheit, Identität, Compliance DevOps; Betrieb

AWSDienste: AWS CloudFormation; Amazon GuardDuty; AWS Lambda; AWS Identity and Access Management

Übersicht

Sie können GuardDuty Amazon mithilfe einer AWS CloudFormation Vorlage für ein Amazon Web Services (AWS) -Konto aktivieren. Standardmäßig schlägt die Stack-Bereitstellung fehl, wenn es bereits aktiviert GuardDuty ist, wenn Sie versuchen, es CloudFormation zu aktivieren. Sie können jedoch Bedingungen in Ihrer CloudFormation Vorlage verwenden, um zu überprüfen, ob sie bereits aktiviert GuardDuty ist. CloudFormation unterstützt die Verwendung von Bedingungen, die statische Werte vergleichen; die Verwendung der Ausgabe einer anderen Ressourceneigenschaft innerhalb derselben Vorlage wird nicht unterstützt. Weitere Informationen finden Sie im CloudFormation Benutzerhandbuch unter Bedingungen.

In diesem Muster verwenden Sie eine CloudFormation benutzerdefinierte Ressource, die von einer AWS Lambda-Funktion unterstützt wird, um sie bedingt zu aktivieren, GuardDuty falls sie nicht bereits aktiviert ist. Wenn GuardDuty aktiviert, erfasst der Stack den Status und zeichnet ihn im Ausgabebereich des Stacks auf. Wenn nicht GuardDuty aktiviert, aktiviert der Stack es.

Voraussetzungen und Einschränkungen

Voraussetzungen

  • Ein aktives AWS Konto

  • Eine AWS Identity and Access Management Zugriffsmanagement-Rolle (IAM) mit Berechtigungen zum Erstellen, Aktualisieren und Löschen von CloudFormation Stacks

Einschränkungen

  • Wenn dieses Muster für ein AWS Konto oder eine Region manuell deaktiviert GuardDuty wurde, wird es GuardDuty für dieses Zielkonto oder diese Region nicht aktiviert.

Architektur

Zieltechnologie-Stack

Das Muster wird CloudFormation für Infrastructure as Code (IaC) verwendet. Sie verwenden eine CloudFormation benutzerdefinierte Ressource, die von einer Lambda-Funktion unterstützt wird, um die dynamische Service-Enablement-Funktion zu erreichen.

Zielarchitektur

Das folgende Architekturdiagramm auf hoher Ebene zeigt den Prozess der Aktivierung GuardDuty durch die Bereitstellung einer CloudFormation Vorlage:

  1. Sie stellen eine CloudFormation Vorlage bereit, um einen CloudFormation Stack zu erstellen.

  2. Der Stack erstellt eine IAM Rolle und eine Lambda-Funktion.

  3. Die Lambda-Funktion übernimmt die IAM Rolle.

  4. Wenn GuardDuty es auf dem AWS Zielkonto noch nicht aktiviert ist, wird es von der Lambda-Funktion aktiviert.

Der Prozess der Aktivierung GuardDuty durch Bereitstellung einer Vorlage CloudFormation

Automatisierung und Skalierung

Sie können diese AWS CloudFormation StackSet Funktion verwenden, um diese Lösung auf mehrere AWS Konten und AWS Regionen auszudehnen. Weitere Informationen finden Sie AWS CloudFormation StackSets im CloudFormation Benutzerhandbuch unter Arbeiten mit.

Tools

  • AWSCommand Line Interface (AWSCLI) ist ein Open-Source-Tool, mit dem Sie mithilfe von Befehlen in Ihrer Befehlszeilenshell mit AWS Diensten interagieren können.

  • AWS CloudFormationhilft Ihnen dabei, AWS Ressourcen einzurichten, sie schnell und konsistent bereitzustellen und sie während ihres gesamten Lebenszyklus AWS konto- und regionsübergreifend zu verwalten.

  • Amazon GuardDuty ist ein Dienst zur kontinuierlichen Sicherheitsüberwachung, der Protokolle analysiert und verarbeitet, um unerwartete und potenziell nicht autorisierte Aktivitäten in Ihrer AWS Umgebung zu identifizieren.

  • AWSMit Identity and Access Management (IAM) können Sie den Zugriff auf Ihre AWS Ressourcen sicher verwalten, indem Sie kontrollieren, wer authentifiziert und autorisiert ist, diese zu verwenden.

  • AWSLambda ist ein Rechendienst, mit dem Sie Code ausführen können, ohne Server bereitstellen oder verwalten zu müssen. Er führt Ihren Code nur bei Bedarf aus und skaliert automatisch, sodass Sie nur für die tatsächlich genutzte Rechenzeit zahlen.

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie die CloudFormation Vorlage.

  1. Kopieren Sie den Code in der CloudFormation Vorlage im Abschnitt Zusätzliche Informationen.

  2. Fügen Sie den Code in einen Texteditor ein.

  3. Speichern Sie die Datei wie sample.yaml auf Ihrer Workstation.

AWS DevOps

Erstellen Sie den CloudFormation Stapel.

  1. Geben Sie in AWS CLI den folgenden Befehl ein. Dadurch wird mithilfe der sample.yaml Datei ein neuer CloudFormation Stapel erstellt. Weitere Informationen finden Sie im CloudFormation Benutzerhandbuch unter Einen Stapel erstellen.

    aws cloudformation create-stack \ --stack-name guardduty-cf-stack \ --template-body file://sample.yaml
  2. Vergewissern Sie sich, dass der folgende Wert in der erscheint AWSCLI, was darauf hinweist, dass der Stack erfolgreich erstellt wurde. Die Zeit, die zum Erstellen des Stacks benötigt wird, kann variieren.

    "StackStatus": "CREATE_COMPLETE",
AWS DevOps

Stellen Sie sicher, GuardDuty dass diese Option für das AWS Konto aktiviert ist.

  1. Melden Sie sich bei der AWS Management Console an und öffnen Sie die GuardDuty Konsole unter https://console.aws.amazon.com/guardduty/.

  2. Stellen Sie sicher, dass der GuardDuty Dienst aktiviert ist.

Cloud-Administrator, AWS Administrator

Konfigurieren Sie zusätzliche Konten oder AWS Regionen.

Verwenden Sie die AWS CloudFormation StackSet Funktion je nach Bedarf für Ihren Anwendungsfall, um diese Lösung auf mehrere AWS Konten und AWS Regionen auszudehnen. Weitere Informationen finden Sie AWS CloudFormation StackSets im CloudFormation Benutzerhandbuch unter Arbeiten mit.

Cloud-Administrator, AWS Administrator

Zugehörige Ressourcen

Referenzen

Anleitungen und Videos

Zusätzliche Informationen

CloudFormation Vorlage

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

Alternative Codeoption für die Lambda-Ressource

Die bereitgestellte CloudFormation Vorlage verwendet Inline-Code, um auf die Lambda-Ressource zu verweisen, um die Referenz und Anleitung zu erleichtern. Alternativ können Sie den Lambda-Code in einem Amazon Simple Storage Service (Amazon S3) -Bucket platzieren und in der CloudFormation Vorlage darauf verweisen. Inline-Code unterstützt keine Paketabhängigkeiten oder Bibliotheken. Sie können diese unterstützen, indem Sie den Lambda-Code in einem S3-Bucket platzieren und in der CloudFormation Vorlage darauf verweisen.

Ersetzen Sie die folgenden Codezeilen:

Code: ZipFile: |

durch die folgenden Codezeilen:

Code: S3Bucket: <bucket name> S3Key: <python file name> S3ObjectVersion: <version>

Die S3ObjectVersion Eigenschaft kann weggelassen werden, wenn Sie in Ihrem S3-Bucket keine Versionierung verwenden. Weitere Informationen finden Sie unter Verwenden der Versionierung in S3-Buckets im Amazon S3 S3-Benutzerhandbuch.