Verwenden von Amazon ECS-Windows-Containern mit domainless unter gMSA Verwendung von AWS CLI - 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 Amazon ECS-Windows-Containern mit domainless unter gMSA Verwendung von AWS CLI

Die folgende Anleitung zeigt, wie Sie eine Amazon-ECS-Aufgabe erstellen, die einen Windows-Container ausführt, der über Anmeldeinformationen für den Zugriff auf Active Directory mit AWS CLI verfügt. 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.

Voraussetzungen

In diesem Tutorial wird davon ausgegangen, dass die folgenden Voraussetzungen erfüllt wurden:

  • Die Schritte in Einrichtung für die Verwendung von Amazon ECS wurden ausgeführt.

  • Ihr AWS Benutzer verfügt über die erforderlichen Berechtigungen, die im Beispiel für eine AmazonECS_ FullAccess IAM-Richtlinie angegeben sind.

  • Die neueste Version von AWS CLI ist installiert und konfiguriert. Weitere Informationen zur Installation oder Aktualisierung von finden Sie AWS CLI unter Installation von AWS Command Line Interface.

  • 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 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 eine VPC und Subnetze, die den Active Directory-Domainnamen auflösen können.

  • 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
  • (Optional) AWS CloudShell ist ein Tool, das Kunden eine Befehlszeile bietet, ohne ihre eigene EC2-Instance erstellen zu müssen. Weitere Informationen finden Sie unter Was ist? AWS CloudShell im AWS CloudShell Benutzerhandbuch.

Schritt 1: Das gMSA-Konto in den Active Directory-Domain-Services (AD DS) erstellen und konfigurieren

Erstellen und konfigurieren Sie ein gMSA-Konto in der Active Directory-Domain.

  1. Ein Stammschlüssel für den Schlüsselverteilungs-Service generieren
    Anmerkung

    Wenn Sie verwenden AWS Directory Service, können Sie diesen Schritt überspringen.

    Der KDS-Stammschlüssel und die gMSA-Berechtigungen werden mit Ihrem AWS Managed Microsoft AD konfiguriert.

    Wenn Sie in Ihrer Domain noch kein gMSA-Servicekonto erstellt haben, müssen Sie zunächst einen Stammschlüssel für den Key Distribution Service (KDS, Schlüsselverteilung) generieren. KDS ist für die Erstellung, Rotation und Weitergabe des gMSA-Passworts an autorisierte Hosts verantwortlich. Wenn ccg.exe gMSA-Anmeldeinformationen abrufen muss, wendet es sich an KDS, um das aktuelle Passwort abzurufen.

    Um zu überprüfen, ob der KDS-Stammschlüssel bereits erstellt wurde, führen Sie mithilfe des Moduls das folgende PowerShell Cmdlet mit Domänenadministratorrechten auf einem Domänencontroller aus. ActiveDirectory PowerShell Weitere Informationen zum Modul finden Sie unter ActiveDirectory Modul auf der Microsoft Learn-Website.

    PS C:\> Get-KdsRootKey

    Wenn der Befehl eine Schlüssel-ID zurückgibt, können Sie den Rest dieses Schritts überspringen. Erstellen Sie andernfalls den KDS-Stammschlüssel, indem Sie den folgenden Befehl ausführen:

    PS C:\> Add-KdsRootKey -EffectiveImmediately

    Obwohl das Argument EffectiveImmediately des Befehls impliziert, dass der Schlüssel sofort gültig ist, müssen Sie 10 Stunden warten, bis der KDS-Stammschlüssel repliziert und auf allen Domain-Controllern verwendet werden kann.

  2. Das gMSA-Konto erstellen

    Um das gMSA Konto zu erstellen und das Abrufen des gMSA Kennworts ccg.exe zu ermöglichen, führen Sie die folgenden PowerShell Befehle von einem Windows-Server oder -Client aus, der Zugriff auf die Domäne hat. Ersetzen Sie ExampleAccount durch den Namen, den Sie für Ihr gMSA-Konto verwenden möchten.

    1. PS C:\> Install-WindowsFeature RSAT-AD-PowerShell
    2. PS C:\> New-ADGroup -Name "ExampleAccount Authorized Hosts" -SamAccountName "ExampleAccountHosts" -GroupScope DomainLocal
    3. PS C:\> New-ADServiceAccount -Name "ExampleAccount" -DnsHostName "contoso" -ServicePrincipalNames "host/ExampleAccount", "host/contoso" -PrincipalsAllowedToRetrieveManagedPassword "ExampleAccountHosts"
    4. Erstellen Sie einen Benutzer mit einem permanenten Passwort, das nicht abläuft. Diese Anmeldeinformationen werden in jeder Aufgabe gespeichert AWS Secrets Manager und von ihnen verwendet, um der Domäne beizutreten.

      PS C:\> New-ADUser -Name "ExampleAccount" -AccountPassword (ConvertTo-SecureString -AsPlainText "Test123" -Force) -Enabled 1 -PasswordNeverExpires 1
    5. PS C:\> Add-ADGroupMember -Identity "ExampleAccountHosts" -Members "ExampleAccount"
    6. Installieren Sie das PowerShell Modul zum Erstellen von CredSpec Objekten in Active Directory und geben Sie das CredSpec JSON aus.

      PS C:\> Install-PackageProvider -Name NuGet -Force
      PS C:\> Install-Module CredentialSpec
    7. PS C:\> New-CredentialSpec -AccountName ExampleAccount
  3. Kopieren Sie die JSON-Ausgabe des vorherigen Befehls in eine Datei mit dem Namen gmsa-cred-spec.json. Das ist die CredSpec-Datei. Sie wird in Schritt 3, Schritt 3: Ihre CredSpec-JSON-Datei so ändern, dass sie Informationen von domainlosen gMSA enthält, verwendet.

Schritt 2: Die Anmeldeinformationen in Secrets Manager hochladen

Kopieren Sie die Active-Directory-Anmeldeinformationen in ein sicheres Speichersystem für Anmeldeinformationen, sodass sie bei jeder Aufgabe abgerufen werden. Dies ist die domainlose gMSA Methode. 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.

In diesem Schritt wird der verwendet AWS CLI. Sie können diese Befehle in AWS CloudShell in der Standard-Shell ausführen, und zwar bash.

  • Führen Sie den folgenden AWS CLI Befehl aus und ersetzen Sie den Benutzernamen, das Passwort und den Domainnamen entsprechend Ihrer Umgebung. Bewahren Sie den ARN des Secrets auf, um es im nächsten Schritt, Schritt 3: Ihre CredSpec-JSON-Datei so ändern, dass sie Informationen von domainlosen gMSA enthält, zu verwenden

    Der folgende Befehl verwendet Backslash-Fortsetzungszeichen, die von sh und kompatiblen Shells verwendet werden. Dieser Befehl ist nicht kompatibel mit PowerShell. Sie müssen den Befehl ändern, um ihn mit verwenden zu können PowerShell.

    $ aws secretsmanager create-secret \ --name gmsa-plugin-input \ --description "Amazon ECS - gMSA Portable Identity." \ --secret-string "{\"username\":\"ExampleAccount\",\"password\":\"Test123\",\"domainName\":\"contoso.com\"}"

Schritt 3: Ihre CredSpec-JSON-Datei so ändern, dass sie Informationen von domainlosen gMSA enthält

Bevor Sie das CredSpec in eine der Speicheroptionen hochladen, fügen Sie der CredSpec Informationen mit dem ARN des Secrets im Secrets Manager aus dem vorherigen Schritt hinzu. Weitere Informationen finden Sie unter Konfiguration zusätzlicher Anmeldeinformationen für den Anwendungsfall non-domain-joined Container-Hosts auf der Microsoft Learn-Website.

  1. Fügen Sie der CredSpec-Datei in der ActiveDirectoryConfig die folgende Information hinzu. Ersetzen Sie den ARN durch das Secret im Secrets Manager aus dem vorherigen Schritt.

    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\".

  2. 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": "ExampleAccount", "Guid": "ac822f13-583e-49f7-aa7b-284f9a8c97b6", "DnsTreeName": "contoso", "DnsName": "contoso", "NetBiosName": "contoso" }, "ActiveDirectoryConfig": { "GroupManagedServiceAccounts": [ { "Name": "ExampleAccount", "Scope": "contoso" }, { "Name": "ExampleAccount", "Scope": "contoso" } ], "HostAccountConfig": { "PortableCcgVersion": "1", "PluginGUID": "{859E1386-BDB4-49E8-85C7-3070B13920E1}", "PluginInput": "{\"credentialArn\": \"arn:aws:secretsmanager:aws-region:111122223333:secret:gmsa-plugin-input\"}" } } }

Schritt 4: CredSpec auf Amazon S3 hochladen

In diesem Schritt wird der verwendet. AWS CLI Sie können diese Befehle in AWS CloudShell in der Standard-Shell ausführen, und zwar bash.

  1. Kopieren Sie die CredSpec-Datei auf den Computer oder die Umgebung, in der Sie AWS CLI -Befehle ausführen.

  2. Führen Sie den folgenden AWS CLI Befehl aus, CredSpec um das auf Amazon S3 hochzuladen. Ersetzen Sie MyBucket durch den Namen Ihres Amazon-S3-Buckets. Sie können die Datei als Objekt in einem beliebigen Bucket und an einem beliebigen Ort speichern, müssen jedoch in der Richtlinie, die Sie der Aufgabenausführungsrolle zuordnen, den Zugriff auf diesen Bucket und diesen Speicherort gewähren.

    Der folgende Befehl verwendet Backslash-Fortsetzungszeichen, die von sh und kompatiblen Shells verwendet werden. Dieser Befehl ist nicht kompatibel mit PowerShell. Sie müssen den Befehl ändern, um ihn mit verwenden zu können PowerShell.

    $ aws s3 cp gmsa-cred-spec.json \ s3://MyBucket/ecs-domainless-gmsa-credspec

Schritt 5 (Optional): Ein Amazon-ECS-Cluster erstellen

Standardmäßig hat Ihr Konto einen Amazon-ECS-Cluster mit dem Namen default. Dieser Cluster wird standardmäßig in den AWS CLI SDKs und AWS CloudFormation verwendet. Sie können zusätzliche Cluster verwenden, um Aufgaben und Infrastruktur zu gruppieren und zu organisieren und bestimmten Konfigurationen Standardwerte zuzuweisen.

Sie können einen Cluster aus den AWS Management Console, AWS CLI, SDKs oder erstellen. AWS CloudFormation Die Einstellungen und die Konfiguration im Cluster wirken sich nicht auf gMSA aus.

In diesem Schritt wird der AWS CLI verwendet. Sie können diese Befehle in AWS CloudShell in der Standard-Shell ausführen, und zwar bash.

$ aws ecs create-cluster --cluster-name windows-domainless-gmsa-cluster
Wichtig

Wenn Sie einen eigenen Cluster erstellen möchten, müssen Sie für jeden Befehl, den Sie mit diesem Cluster verwenden möchten, --cluster clusterName angeben.

Schritt 6: Eine IAM-Rolle für Container-Instances erstellen

Eine Container-Instance ist ein Host-Computer zum Ausführen von Containern in ECS-Aufgaben, beispielsweise Amazon-EC2-Instances. Jede Container-Instance wird bei einem Amazon ECS-Cluster registriert. Bevor Sie Amazon-EC2-Instances starten und sie in einem Cluster registrieren, müssen Sie eine IAM-Rolle erstellen, die ihre Container-Instances verwenden können.

Wie Sie die Rolle der Container-Instance erstellen, erfahren Sie unter IAM-Rolle für Amazon-ECS-Container-Instance. Die Standard-ecsInstanceRole verfügt über ausreichende Berechtigungen, um dieses Tutorial abzuschließen.

Schritt 7: Eine benutzerdefinierte Aufgaben-Ausführungsrolle erstellen

Amazon ECS kann anstelle der Container-Instance-Rolle eine andere IAM-Rolle für die Berechtigungen verwenden, die zum Starten der einzelnen Aufgaben erforderlich sind. Diese Rolle ist die Aufgabenausführungsrolle. Wir empfehlen, eine Aufgabenausführungsrolle nur mit den Berechtigungen zu erstellen, die ECS zur Ausführung der Aufgabe benötigt, auch bekannt als geringste Berechtigung. Weitere Informationen zum Prinzip der geringsten Berechtigung finden Sie unter SEC03-BP02 Zugriff mit geringster Berechtigung gewähren im AWS -Well-Architected-Framework.

  1. Um eine Aufgabenausführungsrolle zu erstellen, siehe Erstellen der -Aufgabenausführungsrolle. Die Standardberechtigungen ermöglichen es der Container-Instance, Container-Images aus Amazon Elastic Container Registry stdout und stderr aus Ihren Anwendungen abzurufen, um sie in Amazon CloudWatch Logs zu protokollieren.

    Da die Rolle für dieses Tutorial benutzerdefinierte Berechtigungen benötigt, können Sie der Rolle einen anderen Namen als ecsTaskExecutionRole geben. In diesem Tutorial wird ecsTaskExecutionRole in weiteren Schritten verwendet.

  2. Fügen Sie die folgenden Berechtigungen hinzu, indem Sie eine benutzerdefinierte Richtlinie erstellen, entweder eine Inline-Richtlinie, die nur für diese Rolle existiert, oder eine Richtlinie, die Sie wiederverwenden können. Ersetzen Sie den ARN für die Resource in der ersten Anweisung durch den Amazon-S3-Bucket und den Speicherort und die zweite Resource durch den ARN des Secrets im Secrets Manager.

    Wenn Sie das Secret im Secrets Manager mit einem benutzerdefinierten Schlüssel verschlüsseln, müssen Sie auch kms:Decrypt für den Schlüssel zulassen.

    Wenn Sie SSM Parameter Store anstelle von Secrets Manager verwenden, müssen Sie ssm:GetParameter für den Parameter anstelle von secretsmanager:GetSecretValue zulassen.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": "arn:aws:s3:::MyBucket/ecs-domainless-gmsa-credspec/gmsa-cred-spec.json" }, { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": "arn:aws:secretsmanager:aws-region:111122223333:secret:gmsa-plugin-input" } ] }

Schritt 8: Eine Aufgabenrolle für Amazon ECS Exec erstellen

In diesem Tutorial wird Amazon ECS Exec verwendet, um die Funktionalität zu überprüfen, indem ein Befehl innerhalb einer laufenden Aufgabe ausgeführt wird. Um ECS Exec verwenden zu können, muss der Service oder die Aufgabe ECS Exec aktivieren und die Aufgabenrolle (aber nicht die Rolle zur Aufgabenausführung) muss über ssmmessages-Berechtigungen verfügen. Informationen zur erforderlichen IAM-Richtlinie finden Sie unter ECS Exec-Berechtigungen.

In diesem Schritt wird der verwendet AWS CLI. Sie können diese Befehle in AWS CloudShell in der Standard-Shell ausführen, und zwar bash.

Gehen Sie folgendermaßen vor AWS CLI, um eine Aufgabenrolle mithilfe von zu erstellen.

  1. Erstellen Sie eine Datei mit dem Namen ecs-tasks-trust-policy.json und den folgenden Inhalten:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. Erstellen Sie eine IAM-Rolle. Sie können den Namen ecs-exec-demo-task-role ersetzen, aber behalten Sie den Namen für die folgenden Schritte bei.

    Der folgende Befehl verwendet Backslash-Fortsetzungszeichen, die von sh und kompatiblen Shells verwendet werden. Dieser Befehl ist nicht kompatibel mit PowerShell. Sie müssen den Befehl ändern, um ihn mit verwenden zu können PowerShell.

    $ aws iam create-role --role-name ecs-exec-demo-task-role \ --assume-role-policy-document file://ecs-tasks-trust-policy.json

    Sie können die Datei ecs-tasks-trust-policy.json löschen.

  3. Erstellen Sie eine Datei mit dem Namen ecs-exec-demo-task-role-policy.json und den folgenden Inhalten:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssmmessages:CreateControlChannel", "ssmmessages:CreateDataChannel", "ssmmessages:OpenControlChannel", "ssmmessages:OpenDataChannel" ], "Resource": "*" } ] }
  4. Erstellen Sie eine IAM-Richtlinie und verknüpfen Sie sie mit der Rolle aus dem vorherigen Schritt.

    Der folgende Befehl verwendet Backslash-Fortsetzungszeichen, die von sh und kompatiblen Shells verwendet werden. Dieser Befehl ist nicht kompatibel mit PowerShell. Sie müssen den Befehl ändern, um ihn mit verwenden zu können PowerShell.

    $ aws iam put-role-policy \ --role-name ecs-exec-demo-task-role \ --policy-name ecs-exec-demo-task-role-policy \ --policy-document file://ecs-exec-demo-task-role-policy.json

    Sie können die Datei ecs-exec-demo-task-role-policy.json löschen.

Schritt 9: Eine Aufgabendefinition erstellen, die domainlose gMSA verwendet

In diesem Schritt wird der verwendet AWS CLI. Sie können diese Befehle in AWS CloudShell in der Standard-Shell ausführen, und zwar bash.

  1. Erstellen Sie eine Datei mit dem Namen windows-gmsa-domainless-task-def.json und den folgenden Inhalten:

    { "family": "windows-gmsa-domainless-task", "containerDefinitions": [ { "name": "windows_sample_app", "image": "mcr.microsoft.com/windows/servercore/iis", "cpu": 1024, "memory": 1024, "essential": true, "credentialSpecs": [ "credentialspecdomainless:arn:aws:s3:::ecs-domainless-gmsa-credspec/gmsa-cred-spec.json" ], "entryPoint": [ "powershell", "-Command" ], "command": [ "New-Item -Path C:\\inetpub\\wwwroot\\index.html -ItemType file -Value '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p>' -Force ; C:\\ServiceMonitor.exe w3svc" ], "portMappings": [ { "protocol": "tcp", "containerPort": 80, "hostPort": 8080 } ] } ], "taskRoleArn": "arn:aws:iam::111122223333:role/ecs-exec-demo-task-role", "executionRoleArn": "arn:aws:iam::111122223333:role/ecsTaskExecutionRole" }
  2. Registrieren Sie die Aufgabendefinition, indem Sie den folgenden Befehl ausführen:

    Der folgende Befehl verwendet Backslash-Fortsetzungszeichen, die von sh und kompatiblen Shells verwendet werden. Dieser Befehl ist nicht kompatibel mit PowerShell. Sie müssen den Befehl ändern, um ihn mit verwenden zu können PowerShell.

    $ aws ecs register-task-definition \ --cli-input-json file://windows-gmsa-domainless-task-def.json

Schritt 10: Eine Windows-Container-Instance im Cluster registrieren

Starten Sie eine Amazon-EC2-Windows-Instance und führen Sie den ECS-Container-Agenten aus, um sie als Container-Instance im Cluster zu registrieren. ECS führt Aufgaben auf den Container-Instances aus, die in dem Cluster registriert sind, in dem die Aufgaben gestartet werden.

  1. Informationen zum Starten einer Amazon EC2 EC2-Windows-Instance, die für Amazon ECS in konfiguriert ist AWS Management Console, finden Sie unterStarten einer Amazon ECS Windows-Container-Instance. Halten Sie beim Schritt für Benutzerdaten an.

  2. Für gMSA müssen die Benutzerdaten die Umgebungsvariable ECS_GMSA_SUPPORTED festlegen, bevor der ECS-Container-Agent gestartet wird.

    Für ECS Exec muss der Agent mit dem Argument -EnableTaskIAMRole beginnen.

    Um die Instance-IAM-Rolle zu sichern, indem verhindert wird, dass Aufgaben den EC2-IMDS-Webservice zum Abrufen der Rollenanmeldedaten erreichen, fügen Sie das Argument -AwsvpcBlockIMDS hinzu. Dies gilt nur für Aufgaben, die den awsvpc-Netzwerkmodus verwenden.

    <powershell> [Environment]::SetEnvironmentVariable("ECS_GMSA_SUPPORTED", $TRUE, "Machine") Import-Module ECSTools Initialize-ECSAgent -Cluster windows-domainless-gmsa-cluster -EnableTaskIAMRole -AwsvpcBlockIMDS </powershell>
  3. Überprüfen Sie Ihre Instance-Konfiguration im Bereich Summary (Übersicht). Wenn alles in Ordnung ist, klicken Sie auf Launch instance (Instance starten).

Schritt 11: Container-Instance überprüfen

Mithilfe der AWS Management Console können Sie überprüfen, ob es im Cluster eine Container-Instance gibt. gMSA benötigt jedoch zusätzliche Features, die als Attribute angegeben sind. Diese Attribute sind in der nicht sichtbar AWS Management Console, daher verwendet dieses Tutorial die AWS CLI.

In diesem Schritt wird der verwendet AWS CLI. Sie können diese Befehle in AWS CloudShell in der Standard-Shell ausführen, und zwar bash.

  1. Die Container-Instances im Cluster auflisten. Container-Instances haben eine ID, die sich von der ID der EC2-Instance unterscheidet.

    $ aws ecs list-container-instances

    Ausgabe:

    {
        "containerInstanceArns": [
            "arn:aws:ecs:aws-region:111122223333:container-instance/default/MyContainerInstanceID"
        ]
    }

    526bd5d0ced448a788768334e79010fd ist beispielsweise eine gültige Container-Instance-ID.

  2. Verwenden Sie die Container-Instance-ID aus dem vorherigen Schritt, um die Details für die Container-Instance abzurufen. Ersetzen Sie MyContainerInstanceID durch die ID.

    Der folgende Befehl verwendet Backslash-Fortsetzungszeichen, die von sh und kompatiblen Shells verwendet werden. Dieser Befehl ist nicht kompatibel mit PowerShell. Sie müssen den Befehl ändern, um ihn mit verwenden zu können PowerShell.

    $ aws ecs describe-container-instances \ ----container-instances MyContainerInstanceID

    Beachten Sie, dass die Ausgabe sehr lang ist.

  3. Stellen Sie sicher, dass die attributes-Liste ein Objekt mit dem Schlüssel namens name und einem Wert ecs.capability.gmsa-domainless enthält. Es folgt ein Beispiel für das Objekt.

    Ausgabe:

    {
        "name": "ecs.capability.gmsa-domainless"
    }

Schritt 12: Eine Windows-Aufgabe ausführen

Führen Sie eine Amazon-ECS-Aufgabe aus. Wenn es im Cluster nur 1 Container-Instance gibt, können Sie run-task verwenden. Wenn es viele verschiedene Container-Instances gibt, kann es einfacher sein, start-task zu verwenden und die ID der Container-Instance anzugeben, auf der die Aufgabe ausgeführt werden soll, als der Aufgabendefinition Einschränkungen für die Platzierung hinzuzufügen, um zu steuern, auf welchem Typ von Container-Instance die Aufgabe ausgeführt werden soll.

In diesem Schritt wird der verwendet AWS CLI. Sie können diese Befehle in AWS CloudShell in der Standard-Shell ausführen, und zwar bash.

  1. Der folgende Befehl verwendet Backslash-Fortsetzungszeichen, die von sh und kompatiblen Shells verwendet werden. Dieser Befehl ist nicht kompatibel mit PowerShell. Sie müssen den Befehl ändern, um ihn mit verwenden zu können PowerShell.

    aws ecs run-task --task-definition windows-gmsa-domainless-task \ --enable-execute-command --cluster windows-domainless-gmsa-cluster

    Notieren Sie sich die Aufgaben-ID, die von dem Befehl zurückgegeben wird.

  2. Führen Sie den folgenden Befehl aus, um zu überprüfen, ob die Aufgabe gestartet wurde. Dieser Befehl wartet und gibt die Shell-Eingabeaufforderung erst zurück, wenn die Aufgabe startet. Ersetzen Sie MyTaskID mit der Aufgaben-ID aus dem vorherigen Schritt.

    $ aws ecs wait tasks-running --task MyTaskID

Schritt 13: Sicherstellen, dass der Container über gMSA-Anmeldeinformationen verfügt

Stellen Sie sicher, dass der Container in der Aufgabe über ein Kerberos-Token verfügt. gMSA

In diesem Schritt wird der verwendet AWS CLI. Sie können diese Befehle in AWS CloudShell in der Standard-Shell ausführen, und zwar bash.

  1. Der folgende Befehl verwendet Backslash-Fortsetzungszeichen, die von sh und kompatiblen Shells verwendet werden. Dieser Befehl ist nicht kompatibel mit PowerShell. Sie müssen den Befehl ändern, um ihn mit verwenden zu können PowerShell.

    $ aws ecs execute-command \ --task MyTaskID \ --container windows_sample_app \ --interactive \ --command powershell.exe

    Die Ausgabe erfolgt in einer PowerShell Eingabeaufforderung.

  2. Führen Sie den folgenden Befehl im PowerShell Terminal im Container aus.

    PS C:\> klist get ExampleAccount$

    Beachten Sie in der Ausgabe, dass der Principal der ist, den Sie zuvor erstellt haben.

Schritt 14: Bereinigen

Wenn Sie mit diesem Tutorial fertig sind, sollten Sie die zugehörigen Ressourcen bereinigen, um zu vermeiden, dass Gebühren für ungenutzte Ressourcen anfallen.

In diesem Schritt wird der verwendet AWS CLI. Sie können diese Befehle in AWS CloudShell in der Standard-Shell ausführen, und zwar bash.

  1. Die Aufgabe anhalten. Ersetzen Sie MyTaskID durch die Aufgaben-ID aus Schritt 12, Schritt 12: Eine Windows-Aufgabe ausführen.

    $ aws ecs stop-task --task MyTaskID
  2. Beenden Sie die Amazon-EC2-Instance. Danach wird die Container-Instance im Cluster nach einer Stunde automatisch gelöscht.

    Sie können die Instance über die Amazon-EC2-Konsole finden und beenden. Sie können alternativ den folgenden Befehl ausführen. Um den Befehl auszuführen, suchen Sie die EC2-Instance-ID in der Ausgabe des aws ecs describe-container-instances-Befehls aus Schritt 1, Schritt 11: Container-Instance überprüfen. i-10a64379 ist ein Beispiel für eine EC2-Instance-ID.

    $ aws ec2 terminate-instances --instance-ids MyInstanceID
  3. Löschen Sie die CredSpec-Datei in Amazon S3. Ersetzen Sie MyBucket durch den Namen Ihres Amazon-S3-Buckets.

    $ aws s3api delete-object --bucket MyBucket --key ecs-domainless-gmsa-credspec/gmsa-cred-spec.json
  4. Das Secret aus Secrets Manager löschen. Wenn Sie stattdessen SSM Parameter Store verwendet haben, löschen Sie den Parameter.

    Der folgende Befehl verwendet Backslash-Fortsetzungszeichen, die von sh und kompatiblen Shells verwendet werden. Dieser Befehl ist nicht kompatibel mit PowerShell. Sie müssen den Befehl ändern, um ihn mit verwenden zu können PowerShell.

    $ aws secretsmanager delete-secret --secret-id gmsa-plugin-input \ --force-delete-without-recovery
  5. Melden Sie die Aufgabendefinition ab und löschen Sie sie. Wenn Sie die Registrierung der Aufgabendefinition aufheben, markieren Sie sie als inaktiv, sodass sie nicht zum Starten neuer Aufgaben verwendet werden kann. Anschließend können Sie die Aufgabendefinition löschen.

    1. Heben Sie die Registrierung der Aufgabendefinition auf, indem Sie die Version angeben. ECS erstellt automatisch Versionen von Aufgabendefinitionen, die von 1 an nummeriert sind. Sie verweisen auf die Versionen im gleichen Format wie die Beschriftungen auf Container-Images, z. B. :1.

      $ aws ecs deregister-task-definition --task-definition windows-gmsa-domainless-task:1
    2. Löschen Sie die Aufgabendefinition.

      $ aws ecs delete-task-definitions --task-definition windows-gmsa-domainless-task:1
  6. (Optional) Löschen Sie den ECS-Cluster, falls Sie einen Cluster erstellt haben.

    $ aws ecs delete-cluster --cluster windows-domainless-gmsa-cluster

Debuggen von Amazon ECS domainlosen gMSA für Windows-Container

Amazon-ECS-Aufgabenstatus

ECS versucht, eine Aufgabe genau einmal zu starten. Jede Aufgabe, bei der ein Problem auftritt, wird angehalten und auf den Status STOPPED gesetzt. Es gibt zwei häufige Arten von Problemen mit Aufgaben. Erstens Aufgaben, die nicht gestartet werden konnten. Zweitens Aufgaben, bei denen die Anwendung in einem der Container gestoppt wurde. Suchen Sie im AWS Management Console Feld Grund für den Stopp der Aufgabe nach dem Grund, warum die Aufgabe gestoppt wurde. In der AWS CLI, beschreiben Sie die Aufgabe und sehen Sie sich den stoppedReason an. Die Schritte im Feld AWS Management Console und AWS CLI finden Sie unterFehler beim Beenden von Amazon ECS-Aufgaben anzeigen.

Windows-Ereignisse

Windows-Ereignisse für gMSA in Containern werden in der Microsoft-Windows-Containers-CCG-Protokolldatei protokolliert und befinden sich in der Ereignisanzeige im Abschnitt Anwendungen und Services in Logs\Microsoft\Windows\Containers-CCG\Admin. Weitere Tipps zum Debuggen finden Sie unter Problembehandlung bei gMSAs für Windows-Container auf der Microsoft-Learn-Website.

ECS-Agent-gMSA-Plug-In

Die Protokollierung des gMSA-Plug-ins für den ECS-Agenten auf der Windows-Container-Instance befindet sich im folgenden Verzeichnis, C:/ProgramData/Amazon/gmsa-plugin/. Sehen Sie in diesem Protokoll nach, ob die domainlosen Benutzeranmeldeinformationen vom Speicherort, z. B. Secrets Manager, heruntergeladen wurden und ob das Format der Anmeldeinformationen korrekt gelesen wurde.