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

Bereitstellung und Verwaltung von AWS Control Tower Tower-Steuerungen mithilfe von AWS CDK und AWS CloudFormation

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

Code-Repository: -cdk aws-control-tower-controls

Umgebung: Produktion

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

AWS-Services: AWS CloudFormation; AWS Control Tower; AWS Organizations; AWS CDK

Übersicht

Dieses Muster beschreibt, wie AWS CloudFormation und das AWS Cloud Development Kit (AWS CDK) verwendet werden, um präventive, detektive und proaktive AWS Control Tower Tower-Kontrollen als Infrastructure as Code (IaC) 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 Kontrollen als IaC über CloudFormation und AWS CDK bereitzustellen, können Sie die Kontrollen in Ihrer landing zone standardisieren und sie effizienter bereitstellen und verwalten. Diese Lösung verwendet cdk_nag, um die AWS-CDK-Anwendung während der Bereitstellung zu scannen. Dieses Tool überprüft, ob die Anwendung den bewährten AWS-Methoden entspricht.

Um AWS Control Tower Tower-Steuerelemente als IaC bereitzustellen, können Sie anstelle von AWS CDK auch HashiCorp Terraform verwenden. Weitere Informationen finden Sie unter Bereitstellen und Verwalten von AWS Control Tower Tower-Steuerelementen mithilfe von Terraform.

Zielpublikum

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

Voraussetzungen und Einschränkungen

Voraussetzungen

  • Aktive AWS-Konten, die als Organisation in AWS Organizations und als AWS Control Tower Tower-Landezone verwaltet werden. Anweisungen finden Sie unter Erstellen einer Kontostruktur (AWS Well-Architected Labs).

  • AWS-Befehlszeilenschnittstelle (AWS CLI), installiert und konfiguriert.

  • Node Package Manager (npm), installiert und konfiguriert für das AWS CDK.

  • Voraussetzungen für AWS CDK.

  • Berechtigungen zur Übernahme einer bestehenden AWS Identity and Access Management (IAM) -Rolle in einem Bereitstellungskonto.

  • Berechtigungen zur Übernahme einer IAM-Rolle im Verwaltungskonto der Organisation, die für das Bootstrap von AWS CDK verwendet werden kann. Die Rolle muss über Berechtigungen zum Ändern und Bereitstellen von Ressourcen verfügen. CloudFormation Weitere Informationen finden Sie unter Bootstrapping in der AWS CDK-Dokumentation.

  • Berechtigungen zum Erstellen von IAM-Rollen und -Richtlinien im Verwaltungskonto der Organisation. Weitere Informationen finden Sie in der IAM-Dokumentation unter Erforderliche Berechtigungen für den Zugriff auf IAM-Ressourcen.

  • Wenden Sie das auf Service Control Policy (SCP) basierende Steuerelement mit der ID CT.CLOUDFORMATION.PR.1 an. Dieser SCP muss aktiviert sein, um proaktive Kontrollen bereitstellen zu können. Anweisungen finden Sie unter Verwaltung von Ressourcentypen, Modulen und Hooks in der CloudFormation AWS-Registrierung verbieten.

Einschränkungen

  • Dieses Muster enthält Anweisungen für die Bereitstellung dieser Lösung für alle AWS-Konten, von einem Bereitstellungskonto bis zum Verwaltungskonto der Organisation. Zu Testzwecken können Sie diese Lösung direkt im Verwaltungskonto bereitstellen, Anweisungen für diese Konfiguration werden jedoch nicht explizit bereitgestellt.

Produktversionen

  • Python-Version 3.9 oder höher

  • npm Version 8.9.0 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.

Die Anleitung zur Steuerung bezieht sich auf die empfohlene Vorgehensweise zur Anwendung der einzelnen Kontrollen auf Ihre Organisationseinheiten. 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

  • Das AWS Cloud Development Kit (AWS CDK) ist ein Softwareentwicklungs-Framework, das Sie bei der Definition und Bereitstellung der AWS-Cloud-Infrastruktur im Code unterstützt. Das AWS CDK Toolkit ist das wichtigste Tool für die Interaktion mit Ihrer AWS CDK-App.

  • 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

  • cdk_nag ist ein Open-Source-Tool, das eine Kombination von Regelpaketen verwendet, um AWS Cloud Development Kit (AWS CDK) -Anwendungen auf Einhaltung von Best Practices zu überprüfen.

  • npm ist eine Softwareregistrierung, die in einer Node.js -Umgebung läuft und zum Teilen oder Ausleihen von Paketen und zum Verwalten der Bereitstellung von privaten Paketen verwendet wird.

  • Python ist eine Allzweck-Computerprogrammiersprache.

Code-Repository

Der Code für dieses Muster ist im Repository GitHub Deploy AWS Control Tower Controls using AWS CDK verfügbar. Sie verwenden die Datei cdk.json, um mit der AWS CDK-App zu interagieren, und Sie verwenden die Datei package.json, um die npm-Pakete zu installieren.

Bewährte Methoden

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie die IAM-Rolle im Verwaltungskonto.

  1. Erstellen Sie eine IAM-Richtlinie im Verwaltungskonto mit den in der IAM-Richtlinie im Abschnitt Zusätzliche Informationen definierten Berechtigungen. Anweisungen finden Sie in der IAM-Dokumentation unter Erstellen von IAM-Richtlinien. Notieren Sie sich den Amazon-Ressourcennamen (ARN) der Richtlinie. Das Folgende ist ein Beispiel für einen ARN.

    arn:aws:iam::<MANAGEMENT-ACCOUNT-ID>:policy/<POLICY-NAME>
  2. Erstellen Sie eine IAM-Rolle im Verwaltungskonto, fügen Sie die IAM-Berechtigungsrichtlinie an, die Sie im vorherigen Schritt erstellt haben, und fügen Sie die benutzerdefinierte Vertrauensrichtlinie unter Vertrauensrichtlinie im Abschnitt Zusätzliche Informationen an. Anweisungen finden Sie in der IAM-Dokumentation unter Erstellen einer Rolle mithilfe benutzerdefinierter Vertrauensrichtlinien. Im Folgenden finden Sie ein Beispiel für einen ARN für die neue Rolle.

    arn:aws:iam:: <MANAGEMENT-ACCOUNT-ID>:role/<ROLE-NAME>
DevOps Ingenieur, General AWS

Bootstrap AWS CDK.

  1. Nehmen Sie im Verwaltungskonto eine Rolle an, die über Berechtigungen zum Bootstrapping von AWS CDK verfügt.

  2. Geben Sie den folgenden Befehl ein und ersetzen Sie den folgenden:

    • <MANAGEMENT-ACCOUNT-ID>ist die ID des Verwaltungskontos der Organisation.

    • <AWS-CONTROL-TOWER-REGION>ist die AWS-Region, in der Control Tower eingesetzt wird. Eine vollständige Liste der Regionscodes finden Sie unter Regionale Endpunkte in AWS General Reference.

    • <DEPLOYMENT-ACCOUNT-ID>ist die ID des Bereitstellungskontos.

    • <DEPLOYMENT-ROLE-NAME>ist der Name der IAM-Rolle, die Sie für das Bereitstellungskonto verwenden.

    • <POLICY-NAME>ist der Name der Richtlinie, die Sie im Verwaltungskonto erstellt haben.

    $ npx cdk bootstrap aws://<MANAGEMENT-ACCOUNT-ID>/<AWS-CONTROL-TOWER-REGION> \ --trust arn:aws:iam::<DEPLOYMENT-ACCOUNT-ID>:role/<DEPLOYMENT-ROLE-NAME> \ --cloudformation-execution-policies arn:aws:iam::<MANAGEMENT-ACCOUNT-ID>:policy/<POLICY-NAME>
DevOps Ingenieur, General AWS, Python

Klonen Sie das Repository

Geben Sie in einer Bash-Shell den folgenden Befehl ein. Dadurch werden die Deploy AWS Control Tower Tower-Steuerelemente mithilfe des AWS-CDK-Repositorys von geklont. GitHub

git clone https://github.com/aws-samples/aws-control-tower-controls-cdk.git
DevOps Ingenieur, General AWS

Bearbeiten Sie die AWS-CDK-Konfigurationsdatei.

  1. Öffnen Sie im geklonten Repository die Datei constants.py.

  2. Geben Sie im ACCOUNT_ID Parameter die ID Ihres Verwaltungskontos ein.

  3. Geben Sie im <AWS-CONTROL-TOWER-REGION> Parameter die AWS-Region ein, in der AWS Control Tower bereitgestellt wird.

  4. Geben Sie im ROLE_ARN Parameter den ARN der Rolle ein, die Sie im Verwaltungskonto erstellt haben.

  5. Geben Sie im GUARDRAILS_CONFIGURATION Abschnitt im Enable-Control Parameter die Kontroll-API-Identifikatoren ein. Geben Sie den Bezeichner in doppelte Anführungszeichen ein und trennen Sie mehrere Bezeichner durch Kommas. 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_ENCRYPTED_VOLUMES

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

  6. Geben Sie in dem GUARDRAILS_CONFIGURATION Abschnitt im OrganizationalUnitIds 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.

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

AufgabeBeschreibungErforderliche Fähigkeiten

Nehmen Sie die IAM-Rolle im Bereitstellungskonto an.

Nehmen Sie im Bereitstellungskonto die IAM-Rolle an, die berechtigt ist, die AWS-CDK-Stacks im Verwaltungskonto bereitzustellen. 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

Aktivieren Sie die Umgebung.

Wenn Sie Linux oder macOS verwenden:

  1. Geben Sie den folgenden Befehl ein, um eine virtuelle Umgebung zu erstellen.

    $ python3 -m venv .venv
  2. Nachdem die virtuelle Umgebung erstellt wurde, geben Sie den folgenden Befehl ein, um sie zu aktivieren.

    $ source .venv/bin/activate

Wenn Sie Windows verwenden:

  1. Geben Sie den folgenden Befehl ein, um eine virtuelle Umgebung zu aktivieren.

    % .venv\Scripts\activate.bat
DevOps Ingenieur, General AWS

Installieren Sie die Abhängigkeiten.

Geben Sie nach der Aktivierung der virtuellen Umgebung den folgenden Befehl ein, um das Skript install_deps.sh auszuführen. Dieses Skript installiert die erforderlichen Abhängigkeiten.

$ ./scripts/install_deps.sh
DevOps Ingenieur, General AWS, Python

Stellen Sie den Stack bereit.

Geben Sie die folgenden Befehle ein, um den CloudFormation Stack zu synthetisieren und bereitzustellen.

$ npx cdk synth $ npx cdk deploy
DevOps Ingenieur, General AWS, Python

Zugehörige Ressourcen

AWS-Dokumentation

Sonstige Ressourcen

Zusätzliche Informationen

Beispiel für eine Datei constants.py

Im Folgenden finden Sie ein Beispiel für eine aktualisierte Datei constants.py.

ACCOUNT_ID = 111122223333 AWS_CONTROL_TOWER_REGION = us-east-2 ROLE_ARN = "arn:aws:iam::111122223333:role/CT-Controls-Role" GUARDRAILS_CONFIGURATION = [ { "Enable-Control": { "AWS-GR_ENCRYPTED_VOLUMES", ... }, "OrganizationalUnitIds": ["ou-1111-11111111", "ou-2222-22222222"...], }, { "Enable-Control": { "AWS-GR_SUBNET_AUTO_ASSIGN_PUBLIC_IP_DISABLED", ... }, "OrganizationalUnitIds": ["ou-2222-22222222"...], }, ]

IAM-Richtlinie

Die folgende Beispielrichtlinie ermöglicht die Mindestaktionen, die erforderlich sind, um AWS Control Tower Controls zu aktivieren oder zu deaktivieren, wenn AWS CDK-Stacks von einem Bereitstellungskonto auf das Verwaltungskonto bereitgestellt werden.

{ "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:DescribeOrganizationalUnit", "organizations:DetachPolicy", "organizations:ListAccounts", "organizations:ListAWSServiceAccessForOrganization", "organizations:ListChildren", "organizations:ListOrganizationalUnitsForParent", "organizations:ListParents", "organizations:ListPoliciesForTarget", "organizations:ListRoots", "organizations:UpdatePolicy", "ssm:GetParameters" ], "Resource": "*" } ] }

Vertrauensrichtlinie

Die folgende benutzerdefinierte Vertrauensrichtlinie ermöglicht es einer bestimmten IAM-Rolle im Bereitstellungskonto, die IAM-Rolle im Verwaltungskonto anzunehmen. Ersetzen Sie Folgendes:

  • <DEPLOYMENT-ACCOUNT-ID>ist die ID des Bereitstellungskontos

  • <DEPLOYMENT-ROLE-NAME>ist der Name der Rolle im Bereitstellungskonto, die die Rolle im Verwaltungskonto übernehmen darf

{ “Version”: “2012-10-17”, “Statement”: [ { “Effect”: “Allow”, “Principal”: { “AWS”: “arn:aws:iam::<DEPLOYMENT-ACCOUNT-ID>:role/<DEPLOYMENT-ROLE-NAME>” }, “Action”: “sts:AssumeRole”, “Condition”: {} } ] }