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
Ein aktives AWS-Konto.
Eine Organisation ist in AWS Organizations eingerichtet und enthält mindestens die folgenden drei Konten:
Ein Verwaltungskonto — Dies ist das Konto, von dem aus Sie den Terraform-Code bereitstellen, entweder eigenständig oder als Teil der CI/CD-Pipeline. Der Terraform-Status wird ebenfalls in diesem Konto gespeichert.
Ein Sicherheitskonto — Dieses Konto wird als GuardDuty delegierter Administrator verwendet. Weitere Informationen finden Sie unter Wichtige Überlegungen für GuardDuty delegierte Administratoren (GuardDuty Dokumentation).
Ein Logging-Konto — Dieses Konto enthält den S3-Bucket, in dem die aggregierten Ergebnisse aller Mitgliedskonten GuardDuty veröffentlicht werden.
Weitere Informationen zum Einrichten der Organisation mit der erforderlichen Konfiguration finden Sie unter Erstellen einer Kontostruktur
(AWSWell-Architected Labs). Ein Amazon S3 S3-Bucket und eine Amazon DynamoDB-Tabelle, die als Remote-Backend dienen, um den Status von Terraform im Verwaltungskonto zu speichern. Weitere Informationen zur Verwendung von Remote-Backends für den Terraform-Status finden Sie unter S3-Backends (Terraform-Dokumentation).
Ein Codebeispiel, das die Remote-State-Verwaltung mit einem S3-Backend einrichtet, finden Sie unter 3-backend (Terraform Registry). remote-state-s Beachten Sie die folgenden Voraussetzungen: Der S3-Bucket und die DynamoDB-Tabelle müssen sich in derselben Region befinden.
Beim Erstellen der DynamoDB-Tabelle muss der Partitionsschlüssel
LockID
(Groß- und Kleinschreibung beachten) und der Partitionsschlüsseltyp muss String sein. Für alle anderen Tabelleneinstellungen müssen die Standardwerte verwendet werden. Weitere Informationen finden Sie unter Über Primärschlüssel und Erstellen einer Tabelle (DynamoDB-Dokumentation).
Ein S3-Bucket, der zum Speichern von Zugriffsprotokollen für den S3-Bucket verwendet GuardDuty wird, in dem die Ergebnisse veröffentlicht werden. Weitere Informationen finden Sie unter Aktivieren der Amazon S3 S3-Serverzugriffsprotokollierung (Amazon S3-Dokumentation). Wenn Sie die Bereitstellung in einer AWS Control Tower Tower-Landezone durchführen, können Sie den S3-Bucket im Protokollarchivkonto für diesen Zweck wiederverwenden.
Terraform Version 0.14.6 oder höher ist installiert und konfiguriert. Weitere Informationen finden Sie unter Erste Schritte — AWS
(Terraform-Dokumentation). Python-Version 3.9.6 oder höher ist installiert und konfiguriert. Weitere Informationen finden Sie unter Quellversionen
(Python-Website). AWSSDKfür Python (Boto3) ist installiert. Weitere Informationen finden Sie unter Installation
(Boto3-Dokumentation). jq ist installiert und konfiguriert. Weitere Informationen finden Sie unter jq herunterladen (jq-Dokumentation
).
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.](images/pattern-img/c9b68627-b68e-47a6-9933-d0f36ea10ae2/images/86193749-eef9-4d63-8a7f-daa0cd03fbfe.png)
Terraform erstellt die Rolle GuardDutyTerraformOrgRoleAWSIdentity and Access Management (IAM) im Sicherheitskonto und im Protokollierungskonto.
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.
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.
Terraform erstellt den GuardDuty Detektor im Sicherheitskonto für den GuardDuty delegierten Administrator.
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).
Terraform registriert alle aktuellen, aktiven Mitgliedskonten in der Organisation als Mitglieder. GuardDuty
Terraform konfiguriert den GuardDuty delegierten Administrator so, dass er die aggregierten Ergebnisse aller Mitgliedskonten im S3-Bucket im Logging-Konto veröffentlicht.
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
Epen
Aufgabe | Beschreibung | Erforderliche 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-
| DevOps Ingenieur |
Bearbeiten Sie die Terraform-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.
| 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:
| 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
Das Skript full-setup.sh führt die folgenden Aktionen aus:
| DevOps Ingenieur, Python |
Aufgabe | Beschreibung | Erforderliche 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
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
Verwaltung mehrerer Konten (GuardDuty Dokumentation)
Gewährung der geringsten Rechte (IAMDokumentation)
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')