Bereitstellung und Verwaltung von AWS Control Tower Tower-Steuerungen mithilfe von Terraform - 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.

Bereitstellung und Verwaltung von AWS Control Tower Tower-Steuerungen mithilfe von Terraform

Erstellt von Iker Reina Fuente (AWS) und Ivan Girardi (AWS)

Code-Repository: Bereitstellung und Verwaltung von AWS Control Tower Tower-Steuerelementen mithilfe von Terraform

Umgebung: Produktion

Technologien: Sicherheit, Identität, Compliance; Infrastruktur CloudNative; Management und Unternehmensführung

Arbeitslast: Open Source

AWS-Services: AWS Control Tower; AWS Organizations

Übersicht

Dieses Muster beschreibt, wie AWS Control Tower Controls, HashiCorp Terraform und Infrastructure as Code (IaC) verwendet werden, um präventive, detektive und proaktive Sicherheitskontrollen zu implementieren und zu verwalten. Eine Kontrolle (auch als Guardrail bezeichnet) ist eine Regel auf hoher Ebene, die eine kontinuierliche Steuerung Ihrer gesamten AWS Control Tower Tower-Umgebung gewährleistet. Sie können beispielsweise Kontrollen verwenden, um die Protokollierung für Ihre AWS-Konten vorzuschreiben und dann automatische Benachrichtigungen zu konfigurieren, wenn bestimmte sicherheitsrelevante Ereignisse eintreten.

AWS Control Tower unterstützt Sie bei der Implementierung präventiver, detektiver und proaktiver Kontrollen, die Ihre AWS-Ressourcen steuern und die Einhaltung der Vorschriften für mehrere AWS-Konten überwachen. Jede Kontrolle erzwingt eine einzelne Regel. In diesem Muster verwenden Sie eine bereitgestellte IaC-Vorlage, um anzugeben, welche Steuerelemente Sie in Ihrer Umgebung bereitstellen möchten.

Die Kontrollen von AWS Control Tower gelten für eine gesamte Organisationseinheit (OU), und die Kontrolle wirkt sich auf jedes AWS-Konto innerhalb der OU aus. Wenn Benutzer eine Aktion in einem Konto in Ihrer landing zone ausführen, unterliegt diese Aktion daher den Kontrollen, die für die Organisationseinheit gelten.

Die Implementierung von AWS Control Tower Controls trägt dazu bei, eine solide Sicherheitsgrundlage für Ihre AWS-Landezone zu schaffen. Indem Sie dieses Muster verwenden, um die Steuerungen als IaC über Terraform bereitzustellen, können Sie die Steuerungen in Ihrer landing zone standardisieren und sie effizienter einsetzen und verwalten.

Um AWS Control Tower Tower-Steuerelemente als IaC bereitzustellen, können Sie anstelle von Terraform auch das AWS Cloud Development Kit (AWS CDK) verwenden. Weitere Informationen finden Sie unter Bereitstellen und Verwalten von AWS Control Tower Tower-Steuerelementen mithilfe von AWS CDK und AWS CloudFormation.

Zielpublikum

Dieses Muster wird Benutzern empfohlen, die Erfahrung mit AWS Control Tower, Terraform und AWS Organizations haben.

Voraussetzungen und Einschränkungen

Voraussetzungen

Produktversionen

  • AWS Control Tower Version 3.0 oder höher

  • Terraform Version 1.5 oder höher

  • Terraform AWS Provider Version 4.67 oder höher

Architektur

Zielarchitektur

Dieser Abschnitt bietet einen allgemeinen Überblick über diese Lösung und die durch den Beispielcode geschaffene Architektur. Das folgende Diagramm zeigt die Steuerelemente, die für die verschiedenen Konten in der Organisationseinheit eingesetzt werden.

Architekturdiagramm der Kontrollen, die für alle AWS-Konten in der Organisationseinheit eingesetzt werden.

Die Kontrollen von AWS Control Tower werden nach ihrem Verhalten und ihren Richtlinien kategorisiert.

Es gibt drei Haupttypen von Kontrollverhalten:

  1. Präventive Kontrollen sollen verhindern, dass Maßnahmen ergriffen werden. Diese werden mit Service Control Policies (SCPs) in AWS Organizations implementiert. Der Status einer präventiven Kontrolle ist entweder erzwungen oder nicht aktiviert. Präventive Kontrollen werden in allen AWS-Regionen unterstützt.

  2. Detective Controls sind so konzipiert, dass sie bestimmte Ereignisse erkennen, wenn sie auftreten, und die Aktion protokollieren CloudTrail. Diese werden mit AWS Config-Regeln implementiert. Der Status einer Detective Control ist entweder „Ungültig, „Verstoß“ oder „Nicht aktiviert“. Detective Controls gelten nur in den AWS-Regionen, die von AWS Control Tower unterstützt werden.

  3. Proaktive Kontrollen scannen Ressourcen, die von AWS bereitgestellt würden, CloudFormation und prüfen, ob sie den Richtlinien und Zielen Ihres Unternehmens entsprechen. Ressourcen, die nicht den Vorschriften entsprechen, werden nicht bereitgestellt. Diese werden mit CloudFormation AWS-Hooks implementiert. Der Status einer proaktiven Kontrolle ist PASS, FAIL oder SKIP.

Es wird empfohlen, die einzelnen Kontrollen auf Ihre Organisationseinheiten anzuwenden. AWS Control Tower bietet drei Kategorien von Anleitungen: verpflichtend, dringend empfohlen und optional. Die Leitlinien einer Kontrolle sind unabhängig von ihrem Verhalten. Weitere Informationen finden Sie unter Verhalten und Steuerung der Steuerung.

Tools

AWS-Services

  • AWS CloudFormation hilft Ihnen dabei, AWS-Ressourcen einzurichten, sie schnell und konsistent bereitzustellen und sie während ihres gesamten Lebenszyklus über AWS-Konten und Regionen hinweg zu verwalten.

  • AWS Config bietet eine detaillierte Ansicht der Ressourcen in Ihrem AWS-Konto und deren Konfiguration. Es hilft Ihnen zu erkennen, wie Ressourcen miteinander zusammenhängen und wie sich ihre Konfigurationen im Laufe der Zeit geändert haben.

  • AWS Control Tower unterstützt Sie bei der Einrichtung und Verwaltung einer AWS-Umgebung mit mehreren Konten und folgt dabei den vorgeschriebenen Best Practices.

  • AWS Organizations ist ein Kontoverwaltungsservice, mit dem Sie mehrere AWS-Konten in einer Organisation konsolidieren können, die Sie erstellen und zentral verwalten.

Andere Tools

  • HashiCorp Terraform ist ein Open-Source-Tool für Infrastruktur als Code (IaC), mit dem Sie mithilfe von Code Cloud-Infrastruktur und -Ressourcen bereitstellen und verwalten können.

Code-Repository

Der Code für dieses Muster ist im Repository GitHub Bereitstellen und Verwalten von AWS Control Tower Tower-Steuerelementen mithilfe des Terraform-Repositorys verfügbar.

Bewährte Methoden

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Klonen Sie das Repository

Geben Sie in einer Bash-Shell den folgenden Befehl ein. Dadurch werden die AWS Control Tower Tower-Steuerelemente mithilfe des Terraform-Repositorys von bereitgestellt und verwaltet. GitHub

git clone https://github.com/aws-samples/aws-control-tower-controls-terraform.git
DevOps Ingenieur

Bearbeiten Sie die Terraform-Backend-Konfigurationsdatei.

  1. Öffnen Sie im geklonten Repository die Datei backend.tf.

  2. Bearbeiten Sie die Datei, um die Terraform-Backend-Konfiguration festzulegen. Die Konfiguration, die Sie in dieser Datei definieren, hängt von Ihrer Umgebung ab. Weitere Informationen finden Sie unter Backend-Konfiguration (Terraform-Dokumentation).

  3. Speichern und schließen Sie die Datei backend.tf.

DevOps Ingenieur, Terraform

Bearbeiten Sie die Konfigurationsdatei des Terraform-Anbieters.

  1. Öffnen Sie im geklonten Repository die Datei provider.tf.

  2. Bearbeiten Sie die Datei, um die Terraform-Anbieterkonfiguration festzulegen. Weitere Informationen finden Sie unter Provider-Konfiguration (Terraform-Dokumentation). Legen Sie die AWS-Region als die Region fest, in der die AWS Control Tower-API verfügbar ist.

  3. Speichern und schließen Sie die Datei provider.tf.

DevOps Ingenieur, Terraform

Bearbeiten Sie die Konfigurationsdatei.

  1. Öffnen Sie im geklonten Repository die Datei variables.tfvars.

  2. Geben Sie im controls Abschnitt im control_names Parameter die Kontroll-API-Kennung ein. Jede Kontrolle hat eine eindeutige API-Kennung für jede Region, in der AWS Control Tower verfügbar ist. Gehen Sie wie folgt vor, um die Kontroll-ID zu finden:

    1. Suchen Sie unter Tabellen mit Kontrollmetadaten das Steuerelement, das Sie aktivieren möchten.

    2. Suchen Sie in der Spalte Kontroll-API-IDs nach Region die API-ID für die Region, in der Sie den API-Aufruf tätigen, z. B. arn:aws:controltower:us-east-1::control/AWS-GR_AUDIT_BUCKET_ENCRYPTION_ENABLED

    3. Extrahieren Sie die Kontroll-ID aus der regionalen Kennung, z. B. AWS-GR_AUDIT_BUCKET_ENCRYPTION_ENABLED

  3. Geben Sie in dem controls Abschnitt im organizational_unit_ids Parameter die ID der Organisationseinheit ein, für die Sie das Steuerelement aktivieren möchten, z. ou-1111-11111111 B. Geben Sie die ID in doppelte Anführungszeichen ein und trennen Sie mehrere IDs durch Kommas. Weitere Informationen zum Abrufen von OU-IDs finden Sie unter Details einer Organisationseinheit anzeigen.

  4. Speichern und schließen Sie die Datei variables.tfvars. Ein Beispiel für eine aktualisierte Datei variables.tfvars finden Sie im Abschnitt Zusätzliche Informationen dieses Musters.

DevOps Ingenieur, General AWS, Terraform

Nehmen Sie die IAM-Rolle im Verwaltungskonto an.

Nehmen Sie im Verwaltungskonto die IAM-Rolle an, die über die Berechtigungen zur Bereitstellung der Terraform-Konfigurationsdatei verfügt. Weitere Informationen zu den erforderlichen Berechtigungen und eine Beispielrichtlinie finden Sie unter Berechtigungen mit den geringsten Rechten für die IAM-Rolle im Abschnitt Zusätzliche Informationen. Weitere Informationen zur Übernahme einer IAM-Rolle in der AWS-CLI finden Sie unter Verwenden einer IAM-Rolle in der AWS-CLI.

DevOps Ingenieur, General AWS

Stellen Sie die Konfigurationsdatei bereit.

  1. Geben Sie den folgenden Befehl ein, um Terraform zu initialisieren.

    $ terraform init -upgrade
  2. Geben Sie den folgenden Befehl ein, um eine Vorschau der Änderungen im Vergleich zum aktuellen Status anzuzeigen.

    $ terraform plan -var-file="variables.tfvars"
  3. Überprüfen Sie die Konfigurationsänderungen im Terraform-Plan und bestätigen Sie, dass Sie diese Änderungen in der Organisation implementieren möchten.

  4. Geben Sie den folgenden Befehl ein, um die Ressourcen bereitzustellen.

    $ terraform apply -var-file="variables.tfvars"
DevOps Ingenieur, General AWS, Terraform
AufgabeBeschreibungErforderliche Fähigkeiten

Führen Sie den Befehl destroy aus.

Geben Sie den folgenden Befehl ein, um die nach diesem Muster bereitgestellten Ressourcen zu entfernen.

$ terraform destroy -var-file="variables.tfvars"
DevOps Ingenieur, General AWS, Terraform

Fehlerbehebung

ProblemLösung

Error: creating ControlTower Control ValidationException: Guardrail <control ID> is already enabled on organizational unit <OU ID>-Fehler

Das Steuerelement, das Sie aktivieren möchten, ist in der Ziel-OU bereits aktiviert. Dieser Fehler kann auftreten, wenn ein Benutzer die Steuerung manuell über die AWS-Managementkonsole, über AWS Control Tower oder über AWS Organizations aktiviert hat. Um die Terraform-Konfigurationsdatei bereitzustellen, können Sie eine der folgenden Optionen verwenden.

Option 1: Aktualisieren Sie die aktuelle Terraform-Statusdatei

Sie können die Ressource in die aktuelle Terraform-Statusdatei importieren. Wenn Sie den apply Befehl erneut ausführen, überspringt Terraform diese Ressource. Gehen Sie wie folgt vor, um die Ressource in den aktuellen Terraform-Status zu importieren:

  1. Geben Sie im AWS Control Tower Tower-Verwaltungskonto den folgenden Befehl ein, um eine Liste der Amazon-Ressourcennamen (ARNs) für die Organisationseinheiten abzurufen, wobei sich der Organisationsstamm <root-ID> befindet. Weitere Informationen zum Abrufen dieser ID finden Sie unter Stammdaten anzeigen.

    aws organizations list-organizational-units-for-parent --parent-id <root-ID>
  2. Geben Sie für jede im vorherigen Schritt zurückgegebene OU den folgenden Befehl ein, wobei der ARN der OU angegeben <OU-ARN> ist.

    aws controltower list-enabled-controls --target-identifier <OU-ARN>
  3. Kopieren Sie die ARNs und führen Sie den Terraform-Import im erforderlichen Modul durch, sodass es im Terraform-Status enthalten ist. Anweisungen finden Sie unter Import (Terraform-Dokumentation).

  4. Wiederholen Sie die Schritte unter Konfiguration bereitstellen im Abschnitt Epics.

Option 2: Deaktivieren Sie die Steuerung

Wenn Sie nicht in einer Produktionsumgebung arbeiten, können Sie die Steuerung in der Konsole deaktivieren. Aktivieren Sie es erneut, indem Sie die Schritte unter Konfiguration bereitstellen im Abschnitt Epics wiederholen. Dieser Ansatz wird für Produktionsumgebungen nicht empfohlen, da die Steuerung für einen bestimmten Zeitraum deaktiviert wird. Wenn Sie diese Option in einer Produktionsumgebung verwenden möchten, können Sie temporäre Kontrollen implementieren, z. B. die vorübergehende Anwendung eines SCP in AWS Organizations.

Zugehörige Ressourcen

AWS-Dokumentation

Sonstige Ressourcen

Zusätzliche Informationen

Beispiel für eine Datei variables.tfvars

Im Folgenden finden Sie ein Beispiel für eine aktualisierte Variables.tfvars-Datei.

controls = [ { control_names = [ "AWS-GR_ENCRYPTED_VOLUMES", ... ], organizational_unit_ids = ["ou-1111-11111111", "ou-2222-22222222"...], }, { control_names = [ "AWS-GR_SUBNET_AUTO_ASSIGN_PUBLIC_IP_DISABLED", ... ], organizational_unit_ids = ["ou-1111-11111111"...], }, ]

Berechtigungen mit den geringsten Rechten für die IAM-Rolle

Dieses APG-Muster erfordert, dass Sie eine IAM-Rolle im Verwaltungskonto annehmen. Es hat sich bewährt, eine Rolle mit temporären Berechtigungen anzunehmen und die Berechtigungen nach dem Prinzip der geringsten Rechte einzuschränken. Die folgende Beispielrichtlinie ermöglicht die Mindestaktionen, die zur Aktivierung oder Deaktivierung von AWS Control Tower Controls erforderlich sind.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "controltower:EnableControl", "controltower:DisableControl", "controltower:GetControlOperation", "controltower:ListEnabledControls", "organizations:AttachPolicy", "organizations:CreatePolicy", "organizations:DeletePolicy", "organizations:DescribeOrganization", "organizations:DetachPolicy", "organizations:ListAccounts", "organizations:ListAWSServiceAccessForOrganization", "organizations:ListChildren", "organizations:ListOrganizationalUnitsForParent", "organizations:ListParents", "organizations:ListPoliciesForTarget", "organizations:ListRoots", "organizations:UpdatePolicy" ], "Resource": "*" } ] }