Automatisches Hinzufügen einer AWS verwalteten Richtlinie für Systems Manager zu EC2 Instanzprofilen mithilfe von Cloud Custodian und AWS CDK - 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.

Automatisches Hinzufügen einer AWS verwalteten Richtlinie für Systems Manager zu EC2 Instanzprofilen mithilfe von Cloud Custodian und AWS CDK

Erstellt von Ali Asfour (AWS) und Aaron Lennon () AWS

Umgebung: PoC oder Pilotprojekt

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

Arbeitslast: Open Source

AWSDienstleistungen: AmazonSNS; Amazon SQS AWS CodeBuild; AWS CodePipeline; AWS Systems Manager; AWS CodeCommit

Übersicht

Sie können Amazon Elastic Compute Cloud (AmazonEC2) -Instances in AWS Systems Manager integrieren, um betriebliche Aufgaben zu automatisieren und für mehr Transparenz und Kontrolle zu sorgen. Für die Integration mit Systems Manager müssen EC2 Instanzen über einen installierten AWSSystems Manager Agent (SSMAgent) und eine AmazonSSMManagedInstanceCore AWS Identity and Access Management (IAM) -Richtlinie verfügen, die ihren Instanzprofilen zugeordnet ist. 

Wenn Sie jedoch sicherstellen möchten, dass allen EC2 Instanzprofilen die AmazonSSMManagedInstanceCore Richtlinie angehängt ist, kann es schwierig werden, neue EC2 Instanzen zu aktualisieren, die keine Instanzprofile haben, oder EC2 Instanzen, die ein Instanzprofil haben, aber nicht über die AmazonSSMManagedInstanceCore Richtlinie verfügen. Es kann auch schwierig sein, diese Richtlinie für mehrere Amazon Web Services (AWS) -Konten und AWS Regionen hinzuzufügen.

Dieses Muster hilft bei der Lösung dieser Herausforderungen, indem es drei Cloud Custodian-Richtlinien in Ihren AWS Konten implementiert:

  • Die erste Cloud Custodian-Richtlinie sucht nach vorhandenen EC2 Instanzen, die über ein Instanzprofil, aber nicht über die AmazonSSMManagedInstanceCore Richtlinie verfügen. Die AmazonSSMManagedInstanceCore Richtlinie wird dann angehängt. 

  • Die zweite Cloud Custodian-Richtlinie sucht nach vorhandenen EC2 Instanzen ohne Instanzprofil und fügt ein Standard-Instanzprofil hinzu, dem die AmazonSSMManagedInstanceCore Richtlinie angehängt ist.

  • Die dritte Cloud Custodian-Richtlinie erstellt AWSLambda-Funktionen in Ihren Konten, um die Erstellung von EC2 Instanzen und Instanzprofilen zu überwachen. Dadurch wird sichergestellt, dass die AmazonSSMManagedInstanceCore Richtlinie automatisch angehängt wird, wenn eine EC2 Instanz erstellt wird.

Dieses Muster verwendet AWS DevOpsTools, um eine kontinuierliche, maßstabsgetreue Bereitstellung der Cloud Custodian-Richtlinien in einer Umgebung mit mehreren Konten zu erreichen, ohne dass eine separate Rechenumgebung bereitgestellt werden muss. 

Voraussetzungen und Einschränkungen

Voraussetzungen

  • Zwei oder mehr aktive Konten. AWS Ein Konto ist das Sicherheitskonto und die anderen sind Mitgliedskonten.

  • Berechtigungen zur Bereitstellung von AWS Ressourcen im Sicherheitskonto. Bei diesem Muster werden Administratorrechte verwendet, Sie sollten jedoch Berechtigungen entsprechend den Anforderungen und Richtlinien Ihrer Organisation gewähren.

  • Möglichkeit, eine IAM Rolle vom Sicherheitskonto zu Mitgliedskonten zu übernehmen und die erforderlichen IAM Rollen zu erstellen. Weitere Informationen dazu finden Sie in der IAM Dokumentation unter AWSKontenübergreifendes Delegieren des Zugriffs mithilfe von IAM Rollen.

  • AWSBefehlszeilenschnittstelle (AWSCLI), installiert und konfiguriert. Zu Testzwecken können Sie die Konfiguration AWS CLI mithilfe des aws configure Befehls oder mithilfe von Umgebungsvariablen konfigurieren. Wichtig: Dies wird für Produktionsumgebungen nicht empfohlen und wir empfehlen, diesem Konto nur Zugriff mit den geringsten Rechten zu gewähren. Weitere Informationen dazu finden Sie in der IAM Dokumentation unter Gewährung der geringsten Rechte.

  • Die devops-cdk-cloudcustodian.zip Datei (angehängt) wurde auf Ihren lokalen Computer heruntergeladen.

  • Vertrautheit mit Python.

  • Die erforderlichen Tools (Node.js, AWS Cloud Development Kit (AWSCDK) und Git) wurden installiert und konfiguriert. Sie können die install-prerequisites.sh Datei in der devops-cdk-cloudcustodian.zip Datei verwenden, um diese Tools zu installieren. Stellen Sie sicher, dass Sie diese Datei mit Root-Rechten ausführen. 

Einschränkungen

  • Dieses Muster kann zwar in einer Produktionsumgebung verwendet werden, stellen Sie jedoch sicher, dass alle IAM Rollen und Richtlinien den Anforderungen und Richtlinien Ihres Unternehmens entsprechen. 

Versionen von Paketen

  • Cloud Custodian Version 0.9 oder höher

  • TypeScript Version 3.9.7 oder höher

  • Node.js Version 14.15.4 oder höher

  • npmVersion 7.6.1 oder höher

  • AWSCDKVersion 1.96.0 oder höher

Architektur

AWS CodePipeline workflow with CodeCommit, CodeBuild, and deployment to member accounts.

Das Diagramm zeigt den folgenden Workflow:

  1. Cloud Custodian-Richtlinien werden in ein AWS CodeCommit Repository im Sicherheitskonto übertragen. Eine Amazon CloudWatch Events-Regel initiiert automatisch die AWS CodePipeline Pipeline.

  2. Die Pipeline ruft den neuesten Code von ab CodeCommit und sendet ihn an den Continuous-Integration-Teil der CI/CD-Pipeline (Continuous Integration and Continuous Delivery), der von bearbeitet wird. AWS CodeBuild

  3. CodeBuild führt die vollständigen DevSecOps Aktionen aus, einschließlich der Überprüfung der Richtliniensyntax für die Cloud Custodian-Richtlinien, und führt diese Richtlinien im --dryrun Modus aus, um zu überprüfen, welche Ressourcen identifiziert wurden.

  4. Wenn keine Fehler vorliegen, fordert die nächste Aufgabe einen Administrator auf, die Änderungen zu überprüfen und die Bereitstellung in den Mitgliedskonten zu genehmigen.

Technologie-Stack

  • AWS CDK

  • CodeBuild

  • CodeCommit

  • CodePipeline

  • IAM

  • Cloud Custodian 

Automatisierung und Skalierung

Das AWS CDK Pipeline-Modul stellt eine CI/CD-Pipeline bereit, CodePipeline mit der neben der Bereitstellung von Ressourcen mit CodeBuild Stacks auch die Erstellung und das Testen von AWS Quellcode orchestriert werden. AWS CloudFormation Sie können dieses Muster für alle Mitgliedskonten und Regionen in Ihrer Organisation verwenden. Sie können den Roles creation Stack auch erweitern, um andere IAM Rollen in Ihren Mitgliedskonten bereitzustellen. 

Tools

  • AWSCloud Development Kit (AWSCDK) ist ein Softwareentwicklungsframework, mit dem Cloud-Infrastruktur im Code definiert und bereitgestellt werden kann. AWS CloudFormation

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

  • AWS CodeBuildist ein vollständig verwalteter Build-Service in der Cloud.

  • AWS CodeCommitist ein Dienst zur Versionskontrolle, mit dem Sie Assets privat speichern und verwalten können.

  • AWS CodePipelineist ein Dienst zur kontinuierlichen Bereitstellung, mit dem Sie die zur Veröffentlichung Ihrer Software erforderlichen Schritte modellieren, visualisieren und automatisieren können.

  • AWSIdentity and Access Management ist ein Webservice, mit dem Sie den Zugriff auf AWS Ressourcen sicher kontrollieren können.

  • Cloud Custodian ist ein Tool, das Dutzende von Tools und Skripten, die die meisten Unternehmen für die Verwaltung ihrer Public-Cloud-Konten verwenden, in einem Open-Source-Tool vereint.

  • Node.js ist eine JavaScript Runtime, die auf der V8-Engine von Google Chrome basiert. JavaScript

Code

Eine detaillierte Liste der Module, Kontofunktionen, Dateien und Bereitstellungsbefehle, die in diesem Muster verwendet werden, finden Sie in der README Datei in der devops-cdk-cloudcustodian.zip Datei (angehängt).

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Richten Sie das CodeCommit Repository ein.

  1. Entpacken Sie die devops-cdk-cloudcustodian.zip Datei (angehängt) im Arbeitsverzeichnis auf Ihrem lokalen Computer.

  2. Melden Sie sich bei der AWS Management Console für Ihr Sicherheitskonto an, öffnen Sie die CodeCommit Konsole und erstellen Sie dann ein neues devops-cdk-cloudcustodian Repository.

  3. Wechseln Sie in das Projektverzeichnis und richten Sie das CodeCommit Repository als Quelle ein, übernehmen Sie die Änderungen und übertragen Sie sie dann in den Ursprungszweig, indem Sie die folgenden Befehle ausführen:

  • cd devops-cdk-cloudcustodian 

  • git init --initial-branch=main

  • git add . git commit -m 'initial commit' 

  • git remote add origin https://git-codecommit.us-east-1.amazonaws.com/v1/devops-cdk-cloudcustodian 

  • git push origin main

Weitere Informationen dazu finden Sie in der AWS CodeCommit Dokumentation unter Erstellen eines CodeCommit Repositorys.

Developer

Installieren Sie die erforderlichen Tools.

Verwenden Sie die install-prerequisites.sh Datei, um alle erforderlichen Tools auf Amazon Linux zu installieren. Dies ist nicht enthalten AWSCLI, da es vorinstalliert ist.

Weitere Informationen dazu finden Sie im Abschnitt Voraussetzungen unter Erste Schritte mit dem AWS CDK in der AWS CDK Dokumentation.

Developer

Installieren Sie die erforderlichen AWS CDK Pakete.

  1. Richten Sie Ihre virtuelle Umgebung ein, indem Sie den folgenden Befehl in ausführen AWSCLI: $ python3 -m venv .env

  2. Aktivieren Sie Ihre virtuelle Umgebung, indem Sie den folgenden Befehl ausführen: $ source .env/bin/activate

  3. Nachdem die virtuelle Umgebung aktiviert wurde, installieren Sie die erforderlichen Abhängigkeiten, indem Sie den folgenden Befehl ausführen: $ pip install -r requirements.txt

  4. Um zusätzliche Abhängigkeiten (z. B. andere AWS CDK Bibliotheken) hinzuzufügen, fügen Sie sie der requirements.txt Datei hinzu und führen Sie dann den folgenden Befehl aus: pip install -r requirements.txt

Die folgenden Pakete werden von der Datei benötigt AWS CDK und sind in der requirements.txt Datei enthalten:

  • aws-cdk.aws-cloudwatch

  • aws-cdk.aws-codebuild

  • aws-cdk.aws-codecommit

  • aws-cdk.aws-codedeploy

  • aws-cdk.aws-codepipeline

  • aws-cdk.aws-codepipeline-actions

  • aws-cdk.aws-events

  • aws-cdk.aws-events-targets

  • aws-cdk.aws-iam

  • aws-cdk.aws-logs

  • aws-cdk.aws-s3

  • aws-cdk.aws-sns

  • aws-cdk.aws-sns-subscriptions

  • aws-cdk.aws-sqs

  • aws-cdk.core

Developer
AufgabeBeschreibungErforderliche Fähigkeiten

Aktualisieren Sie die erforderlichen Variablen.

Öffnen Sie die vars.py Datei im Stammordner Ihres CodeCommit Repositorys und aktualisieren Sie die folgenden Variablen:

  •  Geben Sie var_deploy_region = ‘us-east-1’ bei der Aktualisierung die AWS Region an, in der die Pipeline bereitgestellt werden soll.

  •  Aktualisieren Sie var_codecommit_repo_name = “cdk-cloudcustodian” mit dem Namen Ihres CodeCommit Repositorys.

  •  Aktualisieren Sie var_codecommit_branch_name = “main” mit dem Namen der CodeCommit Filiale.

  •  Geben Sie var_adminEmail=notifyadmin@email.com’ die E-Mail-Adresse des Administrators an, der die Änderungen genehmigt.

  • Aktualisiere var_slackWebHookUrl = https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX 'mit dem Slack-Webhook, der verwendet wird, um Cloud Custodian-Benachrichtigungen zu senden, wenn Änderungen vorgenommen werden.

  •  Aktualisiere var_orgId = ‘o-yyyyyyyyyy’ mit deiner Organisations-ID.

  • Aktualisieren Sie security_account = ‘123456789011’ mit der AWS Konto-ID für das Konto, auf dem die Pipeline bereitgestellt wird.

  • Geben Sie member_accounts = [‘111111111111’,’111111111112’,’111111111113’] bei der Aktualisierung die Mitgliedskonten an, für die Sie den AWS CDK Stack booten und die erforderlichen IAM Rollen bereitstellen möchten.

  • Wählen cdk_bootstrap_member_accounts = True Sie diese True Option, wenn Sie möchten, dass die Pipeline das automatisch AWS CDK auf Ihre Mitgliedskonten überträgt.  Wenn True diese Option aktiviert ist, ist auch der Name einer bestehenden IAM Rolle in den Mitgliedskonten erforderlich, die vom Sicherheitskonto übernommen werden kann. Diese IAM Rolle muss auch über die erforderlichen Berechtigungen für das Bootstrap von verfügen. AWS CDK

  • Aktualisieren Sie cdk_bootstrap_role = ‘AWSControlTowerExecution’ mit der vorhandenen IAM Rolle in den Mitgliedskonten, die vom Sicherheitskonto übernommen werden kann. Diese Rolle muss auch die Erlaubnis haben, das zu booten AWSCDK. Hinweis: Dies gilt nur, wenn cdk_bootstrap_member_accounts es auf True gesetzt ist.

Developer

Aktualisieren Sie die Datei account.yml mit den Informationen zum Mitgliedskonto.

Um das c7n-org Cloud Custodian-Tool für mehrere Konten auszuführen, müssen Sie die accounts.yml Konfigurationsdatei im Stammverzeichnis des Repositorys ablegen. Im Folgenden finden Sie ein Beispiel für eine Cloud Custodian-Konfigurationsdatei für: AWS

accounts: - account_id: '123123123123' name: account-1 regions: - us-east-1 - us-west-2 role: arn:aws:iam::123123123123:role/CloudCustodian vars: charge_code: xyz tags: - type:prod - division:some division - partition:us - scope:pci
Developer
AufgabeBeschreibungErforderliche Fähigkeiten

Boostrap das Sicherheitskonto.

Führen Sie den Bootstrap deploy_account mit der cloudcustodian_stack Anwendung aus, indem Sie den folgenden Befehl ausführen:

cdk bootstrap -a 'python3 cloudcustodian/cloudcustodian_stack.py
Developer

Option 1 — Automatisches Bootstrapping der Mitgliedskonten.

Wenn die cdk_bootstrap_member_accounts Variable True in der vars.py Datei auf gesetzt ist, werden die in der member_accounts Variablen angegebenen Konten automatisch von der Pipeline gestartet.

Bei Bedarf können Sie *cdk_bootstrap_role* mit einer IAM Rolle aktualisieren, die Sie vom Sicherheitskonto aus übernehmen können und die über die erforderlichen Berechtigungen für das Bootstrapping von verfügt. AWS CDK

Neue Konten, die der member_accounts  Variablen hinzugefügt werden, werden automatisch von der Pipeline gestartet, sodass die erforderlichen Rollen bereitgestellt werden können.

Developer

Option 2 — Manuelles Bootstrapping der Mitgliedskonten.

Wir empfehlen zwar nicht, diesen Ansatz zu verwenden, Sie können jedoch den Wert cdk_bootstrap_member_accounts auf festlegen False und diesen Schritt manuell ausführen, indem Sie den folgenden Befehl ausführen:

$ cdk bootstrap -a 'python3 cloudcustodian/member_account_roles_stack.py' \ --trust {security_account_id} \ --context assume-role-credentials:writeIamRoleName={role_name} \ --context assume-role-credentials:readIamRoleName={role_name} \ --mode=ForWriting \ --context bootstrap=true \ --cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess

Wichtig: Stellen Sie sicher, dass Sie die {role_name} Werte {security_account_id} und mit dem Namen einer IAM Rolle aktualisieren, die Sie vom Sicherheitskonto aus übernehmen können und die über die erforderlichen Berechtigungen für das AWS CDK Bootstrapping von verfügt.

Sie können auch andere Methoden verwenden, um die Mitgliedskonten zu booten, z. B. mit. AWS CloudFormation Weitere Informationen dazu finden Sie in der Dokumentation unter Bootstrapping. AWS CDK

Developer
AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie die IAM Rollen in den Mitgliedskonten.

Führen Sie den folgenden Befehl aus, um den member_account_roles_stack Stack bereitzustellen und die IAM Rollen in den Mitgliedskonten zu erstellen:

cdk deploy --all -a 'python3 cloudcustodian/member_account_roles_stack.py' --require-approval never
Developer

Stellen Sie den Cloud Custodian-Pipeline-Stack bereit.

Führen Sie den folgenden Befehl aus, um die Cloud cloudcustodian_stack.py Custodian-Pipeline zu erstellen, die im Sicherheitskonto bereitgestellt wird:

cdk deploy -a 'python3 cloudcustodian/cloudcustodian_stack.py'
Developer

Zugehörige Ressourcen

Anlagen

Um auf zusätzliche Inhalte zuzugreifen, die mit diesem Dokument verknüpft sind, entpacken Sie die folgende Datei: attachment.zip