Verwenden Sie Terraform, um Amazon automatisch GuardDuty für eine Organisation zu aktivieren - 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.

Verwenden Sie Terraform, um Amazon automatisch GuardDuty für eine Organisation zu aktivieren

Erstellt von Aarthi Kannan () AWS

Code-Repository: - amazon-guardduty-for-aws organizations-with-terraform

Umgebung: Produktion

Technologien: Sicherheit, Identität, Einhaltung von Vorschriften; DevOps

Arbeitslast: Alle anderen Workloads

AWSDienstleistungen: Amazon GuardDuty; AWS Organizations

Übersicht

Amazon überwacht GuardDuty kontinuierlich Ihre Amazon Web Services (AWS) -Konten und verwendet Bedrohungsinformationen, um unerwartete und potenziell schädliche Aktivitäten in Ihrer AWS Umgebung zu identifizieren. Die manuelle Aktivierung GuardDuty für mehrere Konten oder Organisationen in mehreren AWS Regionen oder über die AWS Management Console kann umständlich sein. Sie können den Prozess automatisieren, indem Sie ein IaC-Tool (Infrastructure as Code) wie Terraform verwenden, das Dienste und Ressourcen für mehrere Konten und Regionen in der Cloud bereitstellen und verwalten kann.

AWSempfiehlt, AWS Organizations zu verwenden, um mehrere Konten einzurichten und zu verwalten GuardDuty. Dieses Muster entspricht dieser Empfehlung. Ein Vorteil dieses Ansatzes besteht darin, dass, wenn neue Konten erstellt oder der Organisation hinzugefügt GuardDuty werden, diese Konten für alle unterstützten Regionen automatisch aktiviert werden, ohne dass manuelles Eingreifen erforderlich ist.

Dieses Muster zeigt, wie HashiCorp Terraform verwendet wird, um Amazon GuardDuty für drei oder mehr Amazon Web Services (AWS) -Konten in einer Organisation zu aktivieren. Der mit diesem Muster gelieferte Beispielcode bewirkt Folgendes:

  • Aktiviert GuardDuty für alle AWS Konten, die aktuelle Mitglieder der Zielorganisation in AWS Organizations sind

  • Aktiviert die Funktion Automatische Aktivierung in GuardDuty, mit der alle Konten, die der Zielorganisation in future hinzugefügt werden, automatisch aktiviert GuardDuty werden

  • Ermöglicht die Auswahl der Regionen, in denen Sie sie aktivieren möchten GuardDuty

  • Verwendet das Sicherheitskonto der Organisation als GuardDuty delegierter Administrator

  • Erstellt einen Amazon Simple Storage Service (Amazon S3) -Bucket im Logging-Konto und konfiguriert ihn so GuardDuty , dass die aggregierten Ergebnisse aller Konten in diesem Bucket veröffentlicht werden

  • Weist eine Lebenszyklusrichtlinie zu, die Ergebnisse standardmäßig nach 365 Tagen vom S3-Bucket in den Amazon S3 Glacier Flexible Retrieval Storage überträgt

Sie können diesen Beispielcode manuell ausführen oder ihn in Ihre CI/CD-Pipeline (Continuous Integration and Continuous Delivery) integrieren.

Zielpublikum

Dieses Muster wird Benutzern empfohlen, die Erfahrung mit Terraform GuardDuty, Python und AWS Organizations haben.

Voraussetzungen und Einschränkungen

Voraussetzungen

Einschränkungen

  • Dieses Muster unterstützt die Betriebssysteme macOS und Amazon Linux 2. Dieses Muster wurde nicht für die Verwendung in Windows-Betriebssystemen getestet.

    Hinweis: Amazon Linux 2 nähert sich dem Ende des Supports. Weitere Informationen finden Sie unter Amazon Linux FAQs 2.

  • GuardDuty darf in keinem der Konten oder in einer der Zielregionen bereits aktiviert sein.

  • Die IaC-Lösung in diesem Muster stellt die Voraussetzungen nicht bereit.

  • Dieses Muster ist für eine AWS landing zone konzipiert, die den folgenden bewährten Methoden entspricht:

    • Die landing zone wurde mithilfe des AWS Control Tower erstellt.

    • Separate AWS Konten werden für Sicherheit und Protokollierung verwendet.

Produktversionen

  • Terraform-Version 0.14.6 oder höher. Der Beispielcode wurde für Version 1.2.8 getestet.

  • Python-Version 3.9.6 oder höher.

Architektur

Dieser Abschnitt gibt einen allgemeinen Überblick über diese Lösung und die Architektur, die durch den Beispielcode festgelegt wurde. Das folgende Diagramm zeigt die Ressourcen, die über die verschiedenen Konten in der Organisation innerhalb einer einzelnen AWS Region bereitgestellt wurden.

Architekturdiagramm, das Ressourcen in den Bereichen Verwaltung, Sicherheit, Protokollierung und Mitgliedskonten zeigt.
  1. Terraform erstellt die Rolle GuardDutyTerraformOrgRoleAWSIdentity and Access Management (IAM) im Sicherheitskonto und im Protokollierungskonto.

  2. Terraform erstellt einen S3-Bucket in der AWS Standardregion im Logging-Konto. Dieser Bucket wird als Veröffentlichungsziel verwendet, um alle GuardDuty Ergebnisse in allen Regionen und aus allen Konten in der Organisation zu aggregieren. Terraform erstellt außerdem einen AWS Key Management Service (AWSKMS) -Schlüssel im Sicherheitskonto, der zur Verschlüsselung der Ergebnisse im S3-Bucket verwendet wird, und konfiguriert die automatische Archivierung von Ergebnissen aus dem S3-Bucket im S3 Glacier Flexible Retrieval Storage.

  3. Aus dem Verwaltungskonto bestimmt Terraform das Sicherheitskonto als delegierten Administrator für. GuardDuty Das bedeutet, dass das Sicherheitskonto nun den GuardDuty Dienst für alle Mitgliedskonten verwaltet, einschließlich des Verwaltungskontos. Einzelne Mitgliedskonten können nicht eigenständig gesperrt oder deaktiviert GuardDuty werden.

  4. Terraform erstellt den GuardDuty Detektor im Sicherheitskonto für den GuardDuty delegierten Administrator.

  5. Falls es noch nicht aktiviert ist, aktiviert Terraform den S3-Schutz in. GuardDuty Weitere Informationen finden Sie unter Amazon S3 S3-Schutz in Amazon GuardDuty (GuardDuty Dokumentation).

  6. Terraform registriert alle aktuellen, aktiven Mitgliedskonten in der Organisation als Mitglieder. GuardDuty

  7. Terraform konfiguriert den GuardDuty delegierten Administrator so, dass er die aggregierten Ergebnisse aller Mitgliedskonten im S3-Bucket im Logging-Konto veröffentlicht.

  8. Terraform wiederholt die Schritte 3 bis 7 für jede Region, die Sie auswählen. AWS

Automatisierung und Skalierung

Der bereitgestellte Beispielcode ist modularisiert, sodass Sie ihn zur automatisierten Bereitstellung in Ihre CI/CD-Pipeline integrieren können.

Tools

AWSDienste

  • Amazon DynamoDB ist ein vollständig verwalteter Service ohne SQL Datenbank, der eine schnelle, vorhersehbare und skalierbare Leistung bietet.

  • 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.

  • AWSDer Key Management Service (AWSKMS) unterstützt Sie bei der Erstellung und Kontrolle kryptografischer Schlüssel zum Schutz Ihrer Daten.

  • AWSOrganizations ist ein Kontoverwaltungsdienst, mit dem Sie mehrere AWS Konten zu einer Organisation zusammenfassen können, die Sie erstellen und zentral verwalten.

  • Amazon Simple Storage Service (Amazon S3) ist ein cloudbasierter Objektspeicherservice, der Sie beim Speichern, Schützen und Abrufen beliebiger Datenmengen unterstützt.

  • AWSSDKfor Python (Boto3) ist ein Softwareentwicklungskit, mit AWS dem Sie Ihre Python-Anwendung, -Bibliothek oder Ihr Skript in Dienste integrieren können.

Andere Tools und Dienste

  • HashiCorp Terraform ist eine Befehlszeilenschnittstellenanwendung, mit der Sie mithilfe von Code Cloud-Infrastruktur und -Ressourcen bereitstellen und verwalten können.

  • Python ist eine Allzweck-Programmiersprache.

  • jq ist ein Befehlszeilenprozessor, der Ihnen bei der Arbeit mit Dateien hilft. JSON

Code-Repository

Der Code für dieses Muster ist im amazon-guardduty-for-awsorganizations-with-terraform-Repository verfügbar. GitHub

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Klonen Sie das Repository

Führen Sie in einer Bash-Shell den folgenden Befehl aus. Unter Das Repository klonen im Abschnitt Zusätzliche Informationen können Sie den vollständigen Befehl kopieren, der den Namen URL des GitHub Repositorys enthält. Dadurch wird das organizations-with-terraform Repository amazon-guardduty-for-aws- von GitHub geklont.

git clone <github-repository-url>
DevOps Ingenieur

Bearbeiten Sie die Terraform-Konfigurationsdatei.

  1. Replizieren root Sie im Ordner des geklonten Repositorys die Datei configuration.json.sample, indem Sie den folgenden Befehl ausführen.

    cp configuration.json.sample configuration.json
  2. Bearbeiten Sie die neue Datei configuration.json und definieren Sie die Werte für jede der folgenden Variablen:

    • management_acc_id— Konto-ID des Verwaltungskontos.

    • delegated_admin_acc_id— Konto-ID des Sicherheitskontos.

    • logging_acc_id— Konto-ID des Logging-Kontos.

    • target_regions— Durch Kommas getrennte Liste der AWS Regionen, die Sie aktivieren möchten. GuardDuty

    • organization_id— AWS Organisations-ID der Organisation, in der Sie die Aktivierung durchführen GuardDuty.

    • default_region— Die Region, in der Ihr Terraform-Status im Verwaltungskonto gespeichert ist. Dies ist dieselbe Region, in der Sie den S3-Bucket und die DynamoDB-Tabelle für das Terraform-Backend bereitgestellt haben.

    • role_to_assume_for_role_creation— Name, den Sie einer neuen IAM Rolle in den Sicherheits- und Protokollierungskonten zuweisen möchten. Sie erstellen diese neue Rolle in der nächsten Geschichte. Terraform übernimmt diese Rolle, um die GuardDutyTerraformOrgRole IAM Rolle in den Sicherheits- und Protokollierungskonten zu erstellen.

    • finding_publishing_frequency— Häufigkeit, mit der Ergebnisse im S3-Bucket GuardDuty veröffentlicht werden.

    • guardduty_findings_bucket_region— Bevorzugte Region, in der Sie den S3-Bucket für veröffentlichte Ergebnisse erstellen möchten.

    • logging_acc_s3_bucket_name— Bevorzugter Name für den S3-Bucket für veröffentlichte Ergebnisse.

    • security_acc_kms_key_alias— AWS KMS Alias für den Schlüssel, der zur Verschlüsselung der GuardDuty Ergebnisse verwendet wird.

    • s3_access_log_bucket_name— Name eines bereits vorhandenen S3-Buckets, in dem Sie Zugriffsprotokolle für den S3-Bucket sammeln möchten, der für die Ergebnisse verwendet wurde. GuardDuty Dieser Bucket sollte sich in derselben AWS Region befinden wie der GuardDuty Ergebnis-Bucket.

    • tfm_state_backend_s3_bucket— Name des bereits vorhandenen S3-Buckets, in dem der Terraform-Remote-Backend-Status gespeichert werden soll.

    • tfm_state_backend_dynamodb_table— Name der bereits vorhandenen DynamoDB-Tabelle zum Sperren des Terraform-Status.

  3. Speichern und schließen Sie die -Konfigurationsdatei.

DevOps Ingenieur, AllgemeinAWS, Terraform, Python

Generieren Sie CloudFormation Vorlagen für neue IAM Rollen.

Dieses Muster beinhaltet eine IaC-Lösung zum Erstellen von zwei CloudFormation Vorlagen. Diese Vorlagen erstellen zwei IAM Rollen, die Terraform während des Einrichtungsvorgangs verwendet. Diese Vorlagen entsprechen den bewährten Sicherheitsverfahren für Berechtigungen mit den geringsten Rechten.

  1. Navigieren Sie in einer Bash-Shell im root Repository-Ordner zu. cfn-templates/ Dieser Ordner enthält CloudFormation Vorlagendateien mit Stubs.

  2. Führen Sie den folgenden Befehl aus. Dadurch werden die Stubs durch die Werte ersetzt, die Sie in der Datei configuration.json angegeben haben.

    bash scripts/replace_config_stubs.sh
  3. Vergewissern Sie sich, dass die folgenden CloudFormation Vorlagen in dem Ordner erstellt wurden: cfn-templates/

    • management-account-role.yaml — Diese Datei enthält die Rollendefinition und die zugehörigen Berechtigungen für die IAM Rolle im Verwaltungskonto, das über die Mindestberechtigungen verfügt, die zum Vervollständigen dieses Musters erforderlich sind.

    • role-to-assume-for-role-creation.yaml — Diese Datei enthält die Rollendefinition und die zugehörigen Berechtigungen für die Rolle in den Sicherheits- und Protokollierungskonten. IAM Terraform übernimmt diese Rolle, um die Rolle in diesen Konten zu erstellen. GuardDutyTerraformOrgRole

DevOps Ingenieur, General AWS

Erstellen Sie die IAM Rollen.

Folgen Sie den Anweisungen unter Einen Stack erstellen (CloudFormation Dokumentation) und gehen Sie wie folgt vor:

  1. Stellen Sie den Stack role-to-assume-for-role-creation.yaml sowohl im Sicherheits- als auch im Logging-Konto bereit.

  2. Stellen Sie den management-account-role.yaml-Stack im Verwaltungskonto bereit. Wenn Sie den Stack erfolgreich erstellt haben und den CREATE_COMPLETE Stack-Status in der Ausgabe sehen, notieren Sie sich den Amazon-Ressourcennamen (ARN) dieser neuen Rolle.

DevOps Ingenieur, General AWS

Übernehmen Sie die IAM Rolle im Verwaltungskonto.

Aus Sicherheitsgründen empfehlen wir, dass Sie die neue management-account-roleIAMRolle übernehmen, bevor Sie fortfahren. Geben Sie in der AWS Befehlszeilenschnittstelle (AWSCLI) im Abschnitt Zusätzliche Informationen den Befehl unter Übernehmen Sie die IAM Rolle des Verwaltungskontos ein.

DevOps Ingenieur, General AWS

Führen Sie das Setup-Skript aus.

Führen Sie im root Repository-Ordner den folgenden Befehl aus, um das Setup-Skript zu starten.

bash scripts/full-setup.sh

Das Skript full-setup.sh führt die folgenden Aktionen aus:

  • Exportiert alle Konfigurationswerte als Umgebungsvariablen

  • Generiert die Codedateien backend.tf und terraform.tfvars für jedes Terraform-Modul

  • Ermöglicht den vertrauenswürdigen GuardDuty Zugriff für innerhalb der Organisation über AWS CLI die.

  • Importiert den Organisationsstatus in den Terraform-Status

  • Erstellt den S3-Bucket für die Veröffentlichung von Ergebnissen im Logging-Konto

  • Erstellt den AWS KMS Schlüssel für die Verschlüsselung der Ergebnisse im Sicherheitskonto

  • Wird GuardDuty unternehmensweit in allen ausgewählten Regionen aktiviert, wie im Abschnitt Architektur beschrieben

DevOps Ingenieur, Python
AufgabeBeschreibungErforderliche Fähigkeiten

Führen Sie das Bereinigungsskript aus.

Wenn Sie dieses Muster zur Aktivierung GuardDuty für die Organisation verwendet haben und deaktivieren möchten GuardDuty, führen Sie im root Repository-Ordner den folgenden Befehl aus, um das Skript cleanup-gd.sh zu starten.

bash scripts/cleanup-gd.sh

Dieses Skript wird GuardDuty in der Zielorganisation deaktiviert, entfernt alle bereitgestellten Ressourcen und setzt die Organisation auf ihren vorherigen Status zurück, bevor Terraform zur Aktivierung verwendet wird. GuardDuty

Hinweis: Dieses Skript entfernt weder die Terraform-Statusdateien noch die Sperrdateien aus den lokalen und Remote-Backends. Wenn Sie dies tun müssen, müssen Sie diese Aktionen manuell ausführen. Außerdem löscht dieses Skript weder die importierte Organisation noch die von ihr verwalteten Konten. Der vertrauenswürdige Zugriff für GuardDuty ist im Rahmen des Bereinigungsskripts nicht deaktiviert.

DevOps Ingenieur, AllgemeinAWS, Terraform, Python

Rollen entfernenIAM.

Löschen Sie die Stacks, die mit den Vorlagen role-to-assume-for-role-creation.yaml und .yaml erstellt wurden. management-account-role CloudFormation Weitere Informationen finden Sie unter Löschen eines Stacks (Dokumentation). CloudFormation

DevOps Ingenieur, Allgemein AWS

Zugehörige Ressourcen

AWSDokumentation

AWSMarketing

Sonstige Ressourcen

Zusätzliche Informationen

Klonen Sie das Repository

Führen Sie den folgenden Befehl aus, um das GitHub Repository zu klonen.

git clone https://github.com/aws-samples/amazon-guardduty-for-aws-organizations-with-terraform

Nehmen Sie die IAM Rolle des Verwaltungskontos an

Führen Sie den folgenden Befehl aus, um die IAM Rolle im Verwaltungskonto zu übernehmen. <IAM role ARN>Ersetzen Sie es durch das ARN der IAM Rolle.

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')