Verwenden von gMSAs für Windows-Container auf Amazon EC2 - 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.

Verwenden von gMSAs für Windows-Container auf Amazon EC2

Amazon ECS unterstützt die Active Directory-Authentifizierung für Windows-Container über ein spezielles Service-Konto namens group Managed Service Account (gMSA).

Windows-basierte Netzwerkanwendungen wie .NET-Anwendungen verwenden oft Active Directory, um die Authentifizierung und das Autorisierungsmanagement zwischen Benutzern und Services zu erleichtern. Entwickler entwerfen ihre Anwendungen häufig so, dass sie sich in Active Directory integrieren lassen und zu diesem Zweck auf der Domain angehörenden Servern ausgeführt werden. Da Windows-Container nicht mit einer Domain verbunden werden können, müssen Sie einen Windows-Container für die Ausführung mit dem gMSA konfigurieren.

Ein Windows-Container, der mit dem gMSA ausgeführt wird, ist zur Abfrage der gMSA-Anmeldeinformationen vom Active Directory-Domain-Controller und zur Bereitstellung an die Container-Instance auf die Amazon-EC2-Instance seines Hosts angewiesen. Weitere Informationen finden Sie unter gMSAs für Windows-Container erstellen.

Anmerkung

Für Windows-Container in Fargate wird dieses Feature nicht unterstützt.

Überlegungen

Die folgenden Punkte sollten bei der Verwendung von gMSAs für Windows-Container berücksichtigt werden:

  • Wenn Sie das für Amazon-ECS-optimierte Windows Server 2016 Full AMI für Ihre Container-Instances verwenden, muss der Container-Hostname mit dem gMSA-Kontonamen übereinstimmen, der in der Anmeldeinformations-Spezifikationsdatei definiert ist. Um einen Hostnamen für einen Container anzugeben, verwenden Sie den hostname-Containerdefinitionsparameter. Weitere Informationen finden Sie unter Network settings (Netzwerkeinstellungen).

  • Sie haben zwischen domainlose gMSA und Hinzufügen jeder Instance zu einer einzelnen Domain gewählt. Durch die Verwendung von domainlosen gMSA ist die Container-Instance 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 Domains angehören, 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 domainlose gMSA.

    Amazon ECS verwendet eine Spezifikationsdatei für Active-Directory-Anmeldeinformationen (CredSpec). Diese Datei enthält die gMSA-Metadaten, die verwendet werden, um den gMSA-Kontokontext an den Container weiterzuleiten. Sie generieren die CredSpec-Datei und speichern sie dann in einer der CredSpec-Speicheroptionen in der folgenden Tabelle, die für das Betriebssystem der Container-Instances spezifisch sind. Um die domainlose Methode zu verwenden, kann ein optionaler Abschnitt in der CredSpec-Datei Anmeldeinformationen in einer der domainless user credentials-Speicheroptionen in der folgenden Tabelle angeben, die für das Betriebssystem der Container-Instances spezifisch sind.

    gMSA-Datenspeicheroptionen nach Betriebssystem
    Speicherort Linux Windows
    Amazon Simple Storage Service CredSpec CredSpec
    AWS Secrets Manager Domainlose Benutzer-Anmeldeinformationen Domainlose Benutzer-Anmeldeinformationen
    Amazon EC2 Systems Manager Parameter Store CredSpec CredSpec, domainlose Benutzer-Anmeldeinformationen
    Lokale Datei N/A CredSpec

Voraussetzungen

Bevor Sie das gMSA-Feature für Windows-Container mit Amazon ECS verwenden, müssen Sie folgende 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 Einrichtungen:

    • Ein AWS Directory Service Active Directory. AWS Directory Service ist ein AWS von verwaltetes Active Directory, das auf Amazon EC2 gehostet wird. 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 Container-Instance von Amazon ECS Linux der Domain beitreten kann. Weitere Informationen finden Sie unter AWS Direct Connect.

  • Sie haben ein bestehendes gMSA-Konto im Active Directory. Weitere Informationen finden Sie unter gMSAs für Windows-Container erstellen.

  • Sie haben sich für domainlose gMSA entschieden, oder die Container-Instance von Amazon ECS Windows, die die Amazon-ECS-Aufgabe hostet, muss mit der Domain des Active Directory verbunden sein und Mitglied der Active-Directory-Sicherheitsgruppe sein, die Zugriff auf das gMSA-Konto hat.

    Durch die Verwendung von domainlosen gMSA ist die Container-Instance 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 Domains angehören, können auf derselben Instance ausgeführt werden.

  • 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 domainlose gMSA für erste Anmeldeinformationen verwenden, AWS Secrets Manager sind IAM-Berechtigungen für für die Amazon EC2-Instance-Rolle erforderlich.

    • Wenn Sie die Spezifikation der Anmeldeinformationen im SSM Parameter Store speichern, sind IAM-Berechtigungen für den Amazon EC2 Systems Manager Parameter Store für die Rolle der Aufgabenausführung erforderlich.

    • Wenn Sie die Spezifikation der Anmeldeinformationen in Amazon S3 speichern, sind IAM-Berechtigungen für Amazon Simple Storage Service für die Rolle der Aufgabenausführung erforderlich.

Einrichten von gMSA für Windows-Container auf Amazon ECS

Um gMSA für Windows-Container auf Amazon ECS einzurichten, können Sie dem vollständigen Tutorial folgen, das auch die Konfiguration der Voraussetzungen beinhaltet, Verwenden von Windows-Containern mit Domainless gMSA mithilfe der AWS CLI.

In den folgenden Abschnitten wird die CredSpec-Konfiguration im Detail behandelt.

Beispiel-CredSpec

Amazon ECS verwendet eine Anmeldespezifikationsdatei, die die gMSA-Metadaten enthält, die verwendet werden, um den gMSA-Kontokontext an den Windows-Container zu übertragen. Sie können die Anmeldeinformations-Spezifikationsdatei generieren und im Feld credentialSpec in Ihrer Aufgabendefinition darauf verweisen. Die Anmeldeinformations-Spezifikationsdatei enthält keine Secrets.

Im Folgenden finden Sie eine Beispiel-Anmeldeinformations-Spezifikationsdatei:

{ "CmsPlugins": [ "ActiveDirectory" ], "DomainJoinConfig": { "Sid": "S-1-5-21-2554468230-2647958158-2204241789", "MachineAccountName": "WebApp01", "Guid": "8665abd4-e947-4dd0-9a51-f8254943c90b", "DnsTreeName": "contoso.com", "DnsName": "contoso.com", "NetBiosName": "contoso" }, "ActiveDirectoryConfig": { "GroupManagedServiceAccounts": [ { "Name": "WebApp01", "Scope": "contoso.com" } ] } }

Domainlose gMSA einrichten

Wir empfehlen domainlose gMSA, anstatt die Container-Instances zu einer einzigen Domain zu verbinden. Durch die Verwendung von domainlosen gMSA ist die Container-Instance 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 Domains angehören, können auf derselben Instance ausgeführt werden.

  1. Bevor Sie die CredSpec in eine der Speicheroptionen hochladen, fügen Sie Informationen mit dem ARN des Secrets im Secrets Manager oder SSM Parameter Store zur CredSpec hinzu. Weitere Informationen finden Sie unter Zusätzliche Konfiguration der Anmeldeinformationsspezifikation für non-domain-joined den Anwendungsfall des Container-Hosts auf der Microsoft-Learn-Website.

    Format der Anmeldeinformationen für domainlose gMSA

    Das Folgende ist das JSON-Format für die domainlosen gMSA-Anmeldeinformationen für Ihr Active Directory. Speichern Sie die Anmeldeinformationen in Secrets Manager oder SSM Parameter Store.

    { "username":"WebApp01", "password":"Test123!", "domainName":"contoso.com" }
  2. Fügen Sie der CredSpec-Datei in der ActiveDirectoryConfig die folgende Information hinzu. Ersetzen Sie den ARN durch das Secret in Secrets Manager oder SSM Parameter Store.

    Beachten Sie, dass der PluginGUID-Wert mit der GUID im folgenden Beispielausschnitt übereinstimmen muss und erforderlich ist.

    "HostAccountConfig": { "PortableCcgVersion": "1", "PluginGUID": "{859E1386-BDB4-49E8-85C7-3070B13920E1}", "PluginInput": "{\"credentialArn\": \"arn:aws:secretsmanager:aws-region:111122223333:secret:gmsa-plugin-input\"}" }

    Sie können auch ein Secret im SSM Parameter Store verwenden, indem Sie den ARN in diesem Format verwenden: \"arn:aws:ssm:aws-region:111122223333:parameter/gmsa-plugin-input\".

  3. Nachdem Sie die CredSpec-Datei geändert haben, sollte sie wie im folgenden Beispiel aussehen:

    { "CmsPlugins": [ "ActiveDirectory" ], "DomainJoinConfig": { "Sid": "S-1-5-21-4066351383-705263209-1606769140", "MachineAccountName": "WebApp01", "Guid": "ac822f13-583e-49f7-aa7b-284f9a8c97b6", "DnsTreeName": "contoso", "DnsName": "contoso", "NetBiosName": "contoso" }, "ActiveDirectoryConfig": { "GroupManagedServiceAccounts": [ { "Name": "WebApp01", "Scope": "contoso" }, { "Name": "WebApp01", "Scope": "contoso" } ], "HostAccountConfig": { "PortableCcgVersion": "1", "PluginGUID": "{859E1386-BDB4-49E8-85C7-3070B13920E1}", "PluginInput": "{\"credentialArn\": \"arn:aws:secretsmanager:aws-region:111122223333:secret:gmsa-plugin-input\"}" } } }

Referenzieren einer Anmeldeinformations-Spezifikationsdatei in einer Aufgabendefinition

Amazon ECS unterstützt die folgenden Möglichkeiten, um auf den Dateipfad im credentialSpecs-Feld der Aufgabendefinition zu verweisen. Für jede dieser Optionen können Sie credentialspec: oder domainlesscredentialspec: angeben, je nachdem, ob Sie die Container-Instances zu einer einzigen Domain zusammenfügen oder domainlose gMSA verwenden.

Amazon S3 Bucket

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

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

Sie müssen auch die folgenden Berechtigungen als Inline-Richtlinie zur IAM-Rolle der Amazon-ECS-Aufgabenausführung hinzufügen, um Ihren Aufgaben Zugriff auf den Amazon S3 Bucket zu geben.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor", "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::{bucket_name}", "arn:aws:s3:::{bucket_name}/{object}" ] } ] }

SSM-Parameterspeicher-Parameter

Fügen Sie die Anmeldeinformationsspezifikation zu einem SSM-Parameterspeicher-Parameter hinzu und verweisen Sie dann im Feld credentialSpecs der Aufgabendefinition auf den Amazon-Ressourcennamen (ARN) des SSM-Parameterspeicher-Parameters.

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

Sie müssen außerdem die folgenden Berechtigungen als Inline-Richtlinie zur IAM-Rolle der Amazon-ECS-Aufgabenausführung hinzufügen, um Ihren Aufgaben Zugriff auf den SSM-Parameterspeicher-Parameter zu geben.

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

Lokale Datei

Wenn die Daten der Anmeldeinformationsspezifikation in einer lokalen Datei enthalten sind, verweisen Sie auf den Dateipfad im Feld credentialSpecs der Aufgabendefinition. Der Dateipfad, auf den verwiesen wird, muss relativ zum C:\ProgramData\Docker\CredentialSpecs-Verzeichnis sein und den umgekehrten Schrägstrich („\“) als Dateipfadtrennzeichen verwenden.

{ "family": "", "executionRoleArn": "", "containerDefinitions": [ { "name": "", ... "credentialSpecs": [ "credentialspec:file://CredentialSpecDir\CredentialSpecFile.json" ], ... } ], ... }