Die Verwendung von gMSA für EC2 Linux Container bei Amazon ECS - Amazon Elastic Container Service

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.

Die Verwendung von gMSA für EC2 Linux Container bei Amazon ECS

Amazon ECS unterstützt die Active Directory-Authentifizierung für Linux-Container EC2 über ein spezielles Dienstkonto, das als Group Managed Service Account bezeichnet wird (gMSA).

Linux basierte Netzwerkanwendungen, wie .NET Kernanwendungen können Active Directory verwenden, um die Authentifizierung und Autorisierungsverwaltung zwischen Benutzern und Diensten zu vereinfachen. Sie können dieses Feature nutzen, indem Sie Anwendungen entwickeln, die mit Active Directory integriert sind und auf Domain-verbundenen Servern laufen. Aber weil Linux Container können nicht in eine Domäne eingebunden werden, Sie müssen eine konfigurieren Linux Container, mit dem ausgeführt werden soll gMSA.

A Linux Container, der mit läuft gMSA stützt sich auf den credentials-fetcher Daemon, der auf der EC2 Host-Amazon-Instance des Containers läuft. Das heißt, der Daemon ruft die ab gMSA Anmeldeinformationen vom Active Directory-Domänencontroller und überträgt diese Anmeldeinformationen dann an die Container-Instance. Weitere Informationen zu Dienstkonten finden Sie unter Erstellen gMSAs für Windows-Container auf der Microsoft Learn-Website.

Überlegungen

Beachten Sie vor der Verwendung Folgendes gMSA for Linux Behälter:

  • Wenn Ihre Container auf laufenEC2, können Sie verwenden gMSA for Windows Container und Linux Behälter. Für Informationen zur Verwendung gMSA Informationen zu Linux-Containern auf Fargate finden Sie unterDie Verwendung von gMSA for Linux Container auf Fargate.

  • Möglicherweise benötigen Sie eine Windows Computer, der der Domäne beigetreten ist, um die Voraussetzungen zu erfüllen. Beispielsweise benötigen Sie möglicherweise eine Windows Computer, der der Domäne beigetreten ist, um das zu erstellen gMSA im Active Directory mit PowerShell. Das RSAT Active PowerShell Director-Tools sind nur verfügbar für Windows. Weitere Informationen finden Sie unter Installation der Active Directory-Verwaltungstools.

  • Sie haben zwischen domänenlos gewählt gMSAund das Zusammenfügen jeder Instanz zu einer einzigen Domain. Durch die Verwendung von Domainless gMSA, die Container-Instance ist nicht mit der Domain verbunden, andere Anwendungen auf der Instance können die Anmeldeinformationen nicht verwenden, um auf die Domain zuzugreifen, und Aufgaben, die verschiedenen Domänen beitreten, können auf derselben Instance ausgeführt werden.

    Wählen Sie dann den Datenspeicher für CredSpec und optional für die Active Directory-Benutzeranmeldeinformationen für Domainless gMSA.

    Amazon ECS verwendet eine Active Directory-Anmeldeinformationsspezifikationsdatei (CredSpec). Diese Datei enthält gMSA Metadaten, die zur Verbreitung der verwendet werden gMSA Kontokontext zum Container. Sie generieren den CredSpec Datei und speichern sie dann in einem der CredSpec Speicheroptionen in der folgenden Tabelle, spezifisch für das Betriebssystem der Container-Instances. Um die domänenlose Methode zu verwenden, finden Sie einen optionalen Abschnitt im CredSpec Die Datei kann Anmeldeinformationen in einem der folgenden Felder angeben domainless user credentialsSpeicheroptionen in der folgenden Tabelle, die für das Betriebssystem der Container-Instances spezifisch sind.

    Speicherort Linux Windows
    Amazon Simple Storage Service CredSpec CredSpec
    AWS Secrets Manager Domainlose Benutzer-Anmeldeinformationen Domainlose Benutzer-Anmeldeinformationen
    Amazon EC2 Systems Manager Manager-Parameterspeicher CredSpec CredSpec, domainlose Benutzer-Anmeldeinformationen
    Lokale Datei N/A CredSpec

Voraussetzungen

Bevor Sie das verwenden gMSA Für die Linux-Container-Funktion mit Amazon ECS müssen Sie unbedingt die folgenden Schritte ausführen:

  • Sie richten eine Active-Directory-Domain mit den Ressourcen ein, auf die Ihre Container zugreifen sollen. Amazon ECS unterstützt die folgenden Setups:

    • Ein AWS Directory Service Active Directory. AWS Directory Service ist ein AWS verwaltetes Active Directory, das auf Amazon gehostet wirdEC2. Weitere Informationen finden Sie unter Erste Schritte mit AWS Managed Microsoft AD im AWS Directory Service Administratorhandbuch.

    • Ein On-Premises-Active-Directory. Sie müssen sicherstellen, dass die Amazon ECS Linux-Container-Instance der Domain beitreten kann. Weitere Informationen finden Sie unter AWS Direct Connect.

  • Sie haben eine bestehende gMSA Konto im Active Directory. Weitere Informationen finden Sie unter Die Verwendung von gMSA für EC2 Linux Container bei Amazon ECS.

  • Sie haben den credentials-fetcher Daemon auf einer Amazon ECS Linux-Container-Instance installiert und führen ihn aus. Sie haben dem credentials-fetcher-Daemon auch einen ersten Satz von Anmeldeinformationen hinzugefügt, um sich mit dem Active Directory zu authentifizieren.

    Anmerkung

    Der credentials-fetcher-Daemon ist nur für Amazon Linux 2023 und Fedora 37 und höher verfügbar. Der Daemon ist für Amazon Linux 2 nicht verfügbar. Weitere Informationen finden Sie unter aws/credentials als-fetcher on. GitHub

  • Sie richten die Anmeldeinformationen für den credentials-fetcher-Daemon ein, um sich mit dem Active Directory zu authentifizieren. Die Anmeldeinformationen müssen Mitglied der Active Directory-Sicherheitsgruppe sein, die Zugriff auf die hat gMSA Konto. Es gibt mehrere Optionen in Entscheiden Sie, ob Sie die Instanzen mit der Domäne verbinden oder Domainless verwenden möchten gMSA..

  • Sie haben die erforderlichen IAM Berechtigungen hinzugefügt. Welche Berechtigungen erforderlich sind, hängt von den Methoden ab, die Sie für die anfänglichen Anmeldeinformationen und für die Speicherung der Anmeldeinformation wählen:

    • Wenn Sie Domainless verwenden gMSAFür anfängliche Anmeldeinformationen AWS Secrets Manager sind IAM Berechtigungen für für die Aufgabenausführungsrolle erforderlich.

    • Wenn Sie die Anmeldeinformationsspezifikation im SSM Parameter Store speichern, sind IAM Berechtigungen für Amazon EC2 Systems Manager Parameter Store für die Aufgabenausführungsrolle erforderlich.

    • Wenn Sie die Anmeldeinformationsspezifikation in Amazon S3 speichern, sind IAM Berechtigungen für Amazon Simple Storage Service für die Aufgabenausführungsrolle erforderlich.

Einrichtung gMSA-fähig Linux Container bei Amazon ECS

Die Infrastruktur vorbereiten

Bei den folgenden Schritten handelt es sich um Überlegungen und Einstellungen, die einmal durchgeführt werden müssen. Nachdem Sie diese Schritte ausgeführt haben, können Sie die Erstellung von Container-Instances automatisieren, um diese Konfiguration wiederzuverwenden.

Entscheiden Sie, wie die ersten Anmeldeinformationen bereitgestellt werden, und konfigurieren Sie die EC2 Benutzerdaten in einer wiederverwendbaren EC2 Startvorlage, um den credentials-fetcher Daemon zu installieren.

  1. Entscheiden Sie, ob Sie die Instanzen mit der Domäne verbinden oder Domainless verwenden möchten gMSA.
    • Fügen Sie EC2 Instanzen der Active Directory-Domäne hinzu

      • Die Instances anhand von Benutzerdaten hinzufügen

        Fügen Sie die Schritte zum Hinzufügen der Active Directory-Domäne zu Ihren EC2 Benutzerdaten in einer EC2 Startvorlage hinzu. Mehrere Amazon EC2 Auto Scaling Scaling-Gruppen können dieselbe Startvorlage verwenden.

        Sie können diese Schritte verwenden, um einem Active Directory beizutreten oder FreeIPA Domäne in den Fedora-Dokumenten.

    • Machen Sie einen Active Directory-Benutzer für Domainless gMSA

      Der credentials-fetcher Daemon verfügt über eine Funktion, die als domänenlos bezeichnet wird gMSA. Für diese Funktion ist eine Domäne erforderlich, die EC2 Instanz muss jedoch nicht mit der Domäne verknüpft werden. Durch die Verwendung von Domainless gMSA, die Container-Instance ist nicht mit der Domain verbunden, andere Anwendungen auf der Instance können die Anmeldeinformationen nicht verwenden, um auf die Domain zuzugreifen, und Aufgaben, die verschiedenen Domänen beitreten, können auf derselben Instance ausgeführt werden. Stattdessen geben Sie den Namen eines Geheimnisses AWS Secrets Manager in der CredSpec file. Das Secret muss einen Benutzernamen, ein Passwort und die Domain enthalten, bei der die Anmeldung erfolgen soll.

      Dieses Feature wird unterstützt und kann mit Linux- und Windows-Containern verwendet werden.

      Diese Funktion ähnelt der gMSA support for non-domain-joined container hostsMerkmal. Weitere Informationen zur Windows-Funktion finden Sie unter gMSA Architektur und Verbesserungen auf der Microsoft Learn-Website.

      1. Erstellen Sie einen Benutzer in Ihrer Active-Directory-Domain. Der Benutzer in Active Directory muss über die erforderlichen Zugriffsrechte verfügen gMSA Dienstkonten, die Sie für die Aufgaben verwenden.

      2. Erstellen Sie ein Geheimnis in AWS Secrets Manager, nachdem Sie den Benutzer in Active Directory erstellt haben. Weitere Informationen finden Sie unter Create an AWS Secrets Manager Secret.

      3. Geben Sie den Benutzernamen, das Passwort und die Domäne des Benutzers in JSON Schlüssel-Wert-Paare einusername, die jeweils als password und domainName bezeichnet werden.

        {"username":"username","password":"passw0rd", "domainName":"example.com"}
      4. Fügen Sie die Konfiguration zur hinzu CredSpec Datei für das Dienstkonto. Die zusätzliche HostAccountConfig enthält den Amazon-Ressourcennamen (ARN) des Geheimnisses in Secrets Manager.

        Unter Windows PluginGUID muss der mit dem GUID folgenden Beispielausschnitt übereinstimmen. Auf Linux wird der PluginGUID ignoriert. MySecretErsetzen Sie das Beispiel durch den Amazon-Ressourcennamen (ARN) Ihres Geheimnisses.

        "ActiveDirectoryConfig": { "HostAccountConfig": { "PortableCcgVersion": "1", "PluginGUID": "{859E1386-BDB4-49E8-85C7-3070B13920E1}", "PluginInput": { "CredentialArn": "arn:aws:secretsmanager:aws-region:111122223333:secret:MySecret" } }
      5. Das Domainlose gMSADie Funktion benötigt zusätzliche Berechtigungen in der Rolle „Aufgabenausführung“. Folgen Sie dem Schritt (Optional) domänenlos gMSA Secret.

  2. Instances und installieren Sie den credentials-fetcher-Daemon konfigurieren

    Sie können den credentials-fetcher Daemon mit einem Benutzerdatenskript in Ihrer EC2 Startvorlage installieren. Die folgenden Beispiele veranschaulichen zwei Arten von Benutzerdaten: cloud-config YAML or bash skript. Diese Beispiele gelten für Amazon Linux 2023 (AL2023). MyClusterErsetzen Sie es durch den Namen des ECS Amazon-Clusters, dem diese Instances beitreten sollen.

    • cloud-config YAML
      Content-Type: text/cloud-config package_reboot_if_required: true packages: # prerequisites - dotnet - realmd - oddjob - oddjob-mkhomedir - sssd - adcli - krb5-workstation - samba-common-tools # https://github.com/aws/credentials-fetcher gMSA credentials management for containers - credentials-fetcher write_files: # configure the ECS Agent to join your cluster. # replace MyCluster with the name of your cluster. - path: /etc/ecs/ecs.config owner: root:root permissions: '0644' content: | ECS_CLUSTER=MyCluster ECS_GMSA_SUPPORTED=true runcmd: # start the credentials-fetcher daemon and if it succeeded, make it start after every reboot - "systemctl start credentials-fetcher" - "systemctl is-active credentials-fetch && systemctl enable credentials-fetcher"
    • bash script

      Wenn Sie sich wohler fühlen bash Verwenden Sie für Skripten mit mehreren Variablen, in die geschrieben werden kann/etc/ecs/ecs.config, das folgende heredoc Format. Bei Verwendung dieses Formats wird alles zwischen den Zeilen cat und EOF in die Konfigurationsdatei geschrieben.

      #!/usr/bin/env bash set -euxo pipefail # prerequisites timeout 30 dnf install -y dotnet realmd oddjob oddjob-mkhomedir sssd adcli krb5-workstation samba-common-tools # install https://github.com/aws/credentials-fetcher gMSA credentials management for containers timeout 30 dnf install -y credentials-fetcher # start credentials-fetcher systemctl start credentials-fetcher systemctl is-active credentials-fetch && systemctl enable credentials-fetcher cat <<'EOF' >> /etc/ecs/ecs.config ECS_CLUSTER=MyCluster ECS_GMSA_SUPPORTED=true EOF

    Es gibt optionale Konfigurationsvariablen für den credentials-fetcher-Daemon, die Sie in /etc/ecs/ecs.config einrichten können. Wir empfehlen, dass Sie die Variablen in den Benutzerdaten im YAML Block oder heredoc ähnlich wie in den vorherigen Beispielen festlegen. Dadurch werden Probleme mit der teilweisen Konfiguration vermieden, die beim mehrfachen Bearbeiten einer Datei auftreten können. Weitere Informationen zur ECS Agentenkonfiguration finden Sie unter Amazon ECS Container Agent on GitHub.

    • Optional können Sie die Variable CREDENTIALS_FETCHER_HOST verwenden, wenn Sie die credentials-fetcher-Daemon-Konfiguration ändern, um den Socket an einen anderen Ort zu verschieben.

Einrichten von Berechtigungen und Secrets

Führen Sie die folgenden Schritte einmal für jede Anwendung und jede Aufgabendefinition aus. Wir empfehlen Ihnen, die bewährte Methode anzuwenden, die geringste Berechtigung zu gewähren und die in der Richtlinie verwendeten Berechtigungen einzuschränken. Auf diese Weise kann jede Aufgabe nur die Secrets lesen, die sie benötigt.

  1. (Optional) domänenlos gMSA Secret

    Wenn Sie die domainlose Methode verwenden, bei der die Instance nicht mit der Domain verknüpft ist, gehen Sie wie folgt vor.

    Sie müssen der IAM Aufgabenausführungsrolle die folgenden Berechtigungen als Inline-Richtlinie hinzufügen. Dadurch erhält der credentials-fetcher-Daemon Zugriff auf das Secrets-Manager-Secret. Ersetzen Sie das MySecret Beispiel durch den Amazon-Ressourcennamen (ARN) Ihres Geheimnisses in der Resource Liste.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:ssm:aws-region:111122223333:secret:MySecret" ] } ] }
    Anmerkung

    Wenn Sie Ihren eigenen KMS Schlüssel verwenden, um Ihr Geheimnis zu verschlüsseln, müssen Sie dieser Rolle die erforderlichen Berechtigungen hinzufügen und diese Rolle der AWS KMS Schlüsselrichtlinie hinzufügen.

  2. Entscheiden Sie, ob Sie SSM Parameter Store oder S3 zum Speichern von verwenden CredSpec

    Amazon ECS unterstützt die folgenden Möglichkeiten, auf den Dateipfad im credentialSpecs Feld der Aufgabendefinition zu verweisen.

    Wenn Sie die Instances zu einer einzigen Domain zusammenfügen, verwenden Sie das Präfix credentialspec: am Anfang von ARN in der Zeichenfolge. Wenn Sie Domainless verwenden gMSA, dann benutzecredentialspecdomainless:.

    Für weitere Informationen über CredSpec, finden Sie unter Anmeldeinformationsspezifikationsdatei.

    • Amazon S3 Bucket

      Fügen Sie die Anmeldeinformationsspezifikation zu einem Amazon-S3-Bucket hinzu. Verweisen Sie dann im credentialSpecs Feld der Aufgabendefinition auf den Amazon-Ressourcennamen (ARN) des Amazon S3-Buckets.

      { "family": "", "executionRoleArn": "", "containerDefinitions": [ { "name": "", ... "credentialSpecs": [ "credentialspecdomainless:arn:aws:s3:::${BucketName}/${ObjectName}" ], ... } ], ... }

      Um Ihren Aufgaben Zugriff auf den S3-Bucket zu gewähren, fügen Sie der ECS IAM Amazon-Aufgabenausführungsrolle die folgenden Berechtigungen als Inline-Richtlinie hinzu.

      { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor", "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/{object}" ] } ] }
    • SSM Parameterspeicher-Parameter

      Fügen Sie die Anmeldeinformationsspezifikation einem SSM Parameter Store-Parameter hinzu. Verweisen Sie dann auf den Amazon-Ressourcennamen (ARN) des SSM Parameter-Speicher-Parameters im credentialSpecs Feld der Aufgabendefinition.

      { "family": "", "executionRoleArn": "", "containerDefinitions": [ { "name": "", ... "credentialSpecs": [ "credentialspecdomainless:arn:aws:ssm:aws-region:111122223333:parameter/parameter_name" ], ... } ], ... }

      Um Ihren Aufgaben Zugriff auf den SSM Parameter Parameter Store zu gewähren, fügen Sie der ECS IAM Amazon-Aufgabenausführungsrolle die folgenden Berechtigungen als Inline-Richtlinie hinzu.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:GetParameters" ], "Resource": [ "arn:aws:ssm:aws-region:111122223333:parameter/parameter_name" ] } ] }

Anmeldeinformationsspezifikationsdatei

Amazon ECS verwendet eine Active Directory-Anmeldeinformationsspezifikationsdatei (CredSpec). Diese Datei enthält gMSA Metadaten, die zur Verbreitung der verwendet werden gMSA Kontokontext zum Linux Container. Sie generieren den CredSpec und referenzieren Sie in dem credentialSpecs Feld in Ihrer Aufgabendefinition darauf. Das Tool CredSpec Die Datei enthält keine Geheimnisse.

Das Folgende ist ein Beispiel CredSpec file.

{ "CmsPlugins": [ "ActiveDirectory" ], "DomainJoinConfig": { "Sid": "S-1-5-21-2554468230-2647958158-2204241789", "MachineAccountName": "WebApp01", "Guid": "8665abd4-e947-4dd0-9a51-f8254943c90b", "DnsTreeName": "example.com", "DnsName": "example.com", "NetBiosName": "example" }, "ActiveDirectoryConfig": { "GroupManagedServiceAccounts": [ { "Name": "WebApp01", "Scope": "example.com" } ], "HostAccountConfig": { "PortableCcgVersion": "1", "PluginGUID": "{859E1386-BDB4-49E8-85C7-3070B13920E1}", "PluginInput": { "CredentialArn": "arn:aws:secretsmanager:aws-region:111122223333:secret:MySecret" } } } }
Erstellen eines CredSpec

Du erstellst ein CredSpec indem Sie den CredSpec PowerShell Modul auf einem Windows Computer, der der Domäne beigetreten ist. Folgen Sie den Schritten unter Create a Credential Specification auf dem Microsoft Website lernen.