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 gMSA unter Verwendung der AWS CLI
Das folgende Tutorial zeigt, wie Sie eine ECS Amazon-Aufgabe erstellen, die einen Windows-Container ausführt, der über Anmeldeinformationen für den Zugriff auf Active Directory mit verfügt AWS CLI. Durch die Verwendung von Domainlose 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 Domains angehören, können auf derselben Instance ausgeführt werden.
Themen
- Voraussetzungen
- Schritt 1: Erstellen und Konfigurieren der gMSA Konto bei Active Directory-Domänendienste (AD DS)
- Schritt 2: Die Anmeldeinformationen in Secrets Manager hochladen
- Schritt 3: Ändern Sie Ihre CredSpec JSONum Domainless einzubeziehen gMSA Informationen
- Schritt 4: Hochladen CredSpec zu Amazon S3
- Schritt 5 (Optional): Ein ECS Amazon-Cluster erstellen
- Schritt 6: Eine IAM Rolle für Container-Instances erstellen
- Schritt 7: Eine benutzerdefinierte Aufgaben-Ausführungsrolle erstellen
- Schritt 8: Eine Aufgabenrolle für Amazon ECS Exec erstellen
- Schritt 9: Eine Aufgabendefinition erstellen, die domainlose Definition verwendet gMSA
- Schritt 10: Eine Windows-Container-Instance im Cluster registrieren
- Schritt 11: Container-Instance überprüfen
- Schritt 12: Eine Windows-Aufgabe ausführen
- Schritt 13: Sicherstellen, dass der Container gMSA Anmeldedaten
- Schritt 14: Bereinigen
- Debuggen von Amazon Domainless ECS gMSA für Windows-Container
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 ECSAmazonas_ FullAccess IAM Richtlinienbeispiel angegeben sind.
-
Die neueste Version von AWS CLI ist installiert und konfiguriert. Weitere Informationen über die Installation oder Aktualisierung Ihres AWS CLI finden Sie unter Installieren 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 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 Amazon ECS Container-Instance der Domain beitreten kann. Weitere Informationen finden Sie unter AWS Direct Connect.
-
-
Sie haben ein VPC und Subnetze, die den Active Directory-Domainnamen auflösen können.
-
Sie haben zwischen domänenlos gewählt gMSAund das Zusammenfügen jeder Instanz zu einer einzigen Domain. Durch die Verwendung von Domainlose 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 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) enthalten. Diese Datei enthält die gMSA Metadaten, die verwendet werden, um das zu verbreiten gMSA Kontokontext zum Container. Sie generieren das CredSpec Datei und speichern sie dann in einem der CredSpec Speicheroptionen in der folgenden Tabelle, die für das Betriebssystem der Container-Instances spezifisch sind. 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 Parameter Manager Parameter Manager Parameter Manager Parameter Manager CredSpec CredSpec, domainlose Benutzer-Anmeldeinformationen Lokale Datei N/A CredSpec -
(Optional) AWS CloudShell ist ein Tool, das Kunden eine Befehlszeile bietet, ohne eine eigene EC2 Instance erstellen zu müssen. Weitere Informationen finden Sie unter Was ist AWS CloudShell? im AWS CloudShell Benutzerhandbuch.
Schritt 1: Erstellen und Konfigurieren der gMSA Konto bei Active Directory-Domänendienste (AD DS)
Erstellen und Konfigurieren einer gMSA Konto in der Active Directory-Domain.
-
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 Root-Schlüssel und gMSA Berechtigungen werden mit dem AWS Managed Microsoft AD konfiguriert.
Wenn Sie noch keinen erstellt haben gMSA Dienstkonto in Ihrer Domain, Sie müssen zunächst einen Stammschlüssel für den Key Distribution Service (KDS) generieren. Der KDS ist verantwortlich für die Erstellung, Rotation und Veröffentlichung gMSA Passwort für autorisierte Hosts. Wenn sie abgerufen
ccg.exe
werden müssen gMSA Anmeldeinformationen, es kontaktiert es, KDS um das aktuelle Passwort abzurufen.Um zu überprüfen, ob der KDS Stammschlüssel bereits erstellt wurde, führen Sie das folgende PowerShell Cmdlet mit Domainadministratorrechten auf einem Domain-Controller mithilfe des
ActiveDirectory
PowerShell Moduls aus. Weitere Informationen zu dem Modul finden Sie unter ActiveDirectory Modulauf 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. -
Erstellen der gMSA Konto
Um das zu erstellen der gMSA Konto und erlaube dem
ccg.exe
, das abzurufen gMSA Passwort, führen Sie die folgenden PowerShell Befehle von einem Windows Server oder Client mit Zugriff auf die Domain aus.ExampleAccount
Ersetzen Sie durch den Namen, den Sie für Ihre wünschen. gMSA Konto.-
PS C:\>
Install-WindowsFeature RSAT-AD-PowerShell
-
PS C:\>
New-ADGroup -Name "
ExampleAccount
Authorized Hosts" -SamAccountName "ExampleAccount
Hosts" -GroupScope DomainLocal -
PS C:\>
New-ADServiceAccount -Name "
ExampleAccount
" -DnsHostName "contoso
" -ServicePrincipalNames "host/ExampleAccount
", "host/contoso
" -PrincipalsAllowedToRetrieveManagedPassword "ExampleAccount
Hosts" -
Erstellen Sie einen Benutzer mit einem permanenten Passwort, das nicht abläuft. Diese Anmeldeinformationen werden in gespeichert AWS Secrets Manager und von jeder Aufgabe verwendet, um sich mit der Domain zu verbinden.
PS C:\>
New-ADUser -Name "
ExampleAccount
" -AccountPassword (ConvertTo-SecureString -AsPlainText "Test123
" -Force) -Enabled 1 -PasswordNeverExpires 1 -
PS C:\>
Add-ADGroupMember -Identity "
ExampleAccount
Hosts" -Members "ExampleAccount
" -
Installieren Sie das PowerShell Modul zum Erstellen CredSpec Objekte in Active Directory und geben Sie die aus CredSpec JSON.
PS C:\>
Install-PackageProvider -Name NuGet -Force
PS C:\>
Install-Module CredentialSpec
-
PS C:\>
New-CredentialSpec -AccountName
ExampleAccount
-
-
Kopieren Sie die JSON Ausgabe des vorherigen Befehls in eine Datei mit dem Namen
gmsa-cred-spec.json
. Das ist der CredSpec file. Sie wird in Schritt 3, Schritt 3: Ändern Sie Ihre CredSpec JSONum Domainless einzubeziehen gMSA Informationen, 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. Das ist das Domainlose gMSA Methode. Durch die Verwendung von Domainlose 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 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, um sie Ihrer Umgebung anzupassen. Bewahren Sie das ARN Geheimnis auf, das Sie im nächsten Schritt verwenden möchten. Schritt 3: Ändern Sie Ihre CredSpec JSONum Domainless einzubeziehen gMSA Informationen
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: Ändern Sie Ihre CredSpec JSONum Domainless einzubeziehen gMSA Informationen
Vor dem Hochladen der CredSpec zu einer der Speicheroptionen fügen Sie Informationen hinzu CredSpec mit dem ARN Secret im Secrets Manager aus dem vorherigen Schritt. Weitere Informationen finden Sie unter Zusätzliche Konfiguration der Anmeldeinformationsspezifikationen für den Anwendungsfall eines non-domain-joined Container-Hosts
-
Fügen Sie die folgende Information zur CredSpec Datei in der
ActiveDirectoryConfig
. Ersetzen Sie das ARN durch das Secret im Secrets Manager aus dem vorherigen Schritt.Beachten Sie, dass der
PluginGUID
Wert mit dem 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 Geheimnis im SSM Parameter Store verwenden, indem Sie das ARN in diesem Format verwenden:.
\"arn:aws:ssm:
aws-region
:111122223333:parameter/gmsa-plugin-input
\" -
Nachdem Sie das geändert haben CredSpec Datei, sie sollte 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: Hochladen CredSpec zu Amazon S3
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
.
-
Kopieren der CredSpec Datei auf dem Computer oder der Umgebung, in der Sie AWS CLI -Befehle ausführen.
-
Führen Sie den folgenden AWS CLI Befehl aus, um Folgendes hochzuladen CredSpec zu Amazon S3. 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 ECS Amazon-Cluster erstellen
Standardmäßig hat Ihr Konto einen ECS Amazon-Cluster mit dem Namendefault
. Dieser Cluster wird standardmäßig in AWS CLI SDKs, und verwendet AWS CloudFormation. 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 dem AWS Management Console, AWS CLI SDKs, oder erstellen AWS CloudFormation. Die Einstellungen und die Konfiguration im Cluster wirken sich nicht aus. 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
.
$
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 EC2 Amazon-Instances. Jede Container-Instance wird bei einem ECS Amazon-Cluster registriert. Bevor Sie EC2 Amazon-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 ECSIAMAmazon-Container-Instance-Rolle. 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 IAM Container-Instance-Rolle eine andere 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 ECS zu erstellen, die für die Ausführung der Aufgabe erforderlich sind, 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.
-
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
undstderr
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 wirdecsTaskExecutionRole
in weiteren Schritten verwendet. -
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 das ARN für die
Resource
in der ersten Anweisung durch den Amazon-S3-Bucket und den Speicherort und das zweiteResource
durch das ARN des 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
den Parameter anstelle von zulassensecretsmanager:GetSecretValue
.{ "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 der Aufgabenausführung) muss über Berechtigungen verfügenssmmessages
. Die erforderliche IAM Richtlinie finden Sie unter. ECSBerechtigungen für Führungskräfte
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.
-
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" } ] }
-
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.jsonSie können die Datei
ecs-tasks-trust-policy.json
löschen. -
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": "*" } ] }
-
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.jsonSie können die Datei
ecs-exec-demo-task-role-policy.json
löschen.
Schritt 9: Eine Aufgabendefinition erstellen, die domainlose Definition verwendet gMSA
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
.
-
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" }
-
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 EC2 Amazon-Windows-Instance und führen Sie den ECS Container-Agenten aus, um sie als Container-Instance im Cluster zu registrieren. ECSführt Aufgaben auf den Container-Instances aus, die in dem Cluster registriert sind, in dem die Aufgaben gestartet werden.
-
Informationen zum Starten einer Amazon EC2 Windows-Instance, die ECS im für Amazon konfiguriert ist AWS Management Console, finden Sie unterStarten einer Amazon ECS Windows-Container-Instance. Halten Sie beim Schritt für Benutzerdaten an.
-
Wählen Sie in der &Snowconsole; Ihren Auftrag aus der Tabelle. gMSA, müssen die Benutzerdaten die Umgebungsvariable festlegen,
ECS_GMSA_SUPPORTED
bevor der ECS Container-Agent gestartet wird.Für ECS Exec muss der Agent mit dem Argument
-EnableTaskIAMRole
beginnen.Um die IAM Instance-Rolle zu sichern, indem verhindert wird, dass Aufgaben den EC2 IMDS Webservice zum Abrufen der Rollenanmeldedaten erreichen, fügen Sie das Argument hinzu
-AwsvpcBlockIMDS
. Dies gilt nur für Aufgaben, die denawsvpc
-Netzwerkmodus verwenden.<powershell> [Environment]::SetEnvironmentVariable("ECS_GMSA_SUPPORTED", $TRUE, "Machine") Import-Module ECSTools Initialize-ECSAgent -Cluster
windows-domainless-gmsa-cluster
-EnableTaskIAMRole -AwsvpcBlockIMDS </powershell> -
Ü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. Allerdings gMSA benötigt zusätzliche Features, die als Attribute angegeben sind. Diese Attribute sind in der nicht sichtbar AWS Management Console, daher verwendet dieses Tutorial 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
.
-
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. -
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.
-
Stellen Sie sicher, dass die
attributes
-Liste ein Objekt mit dem Schlüssel namensname
und einem Wertecs.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 ECS Amazon-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
.
-
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.
-
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 gMSA Anmeldedaten
Stellen Sie sicher, dass der Container in der Aufgabe über eine Kerberos Token. 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
.
-
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 wird eine PowerShell Eingabeaufforderung sein.
-
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
.
-
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
-
Beenden Sie die EC2 Amazon-Instance. Danach wird die Container-Instance im Cluster nach einer Stunde automatisch gelöscht.
Sie können die Instance über die EC2 Amazon-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 Instance-ID. EC2$
aws ec2 terminate-instances --instance-ids
MyInstanceID
-
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
--keyecs-domainless-gmsa-credspec/gmsa-cred-spec.json
-
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 -
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.
-
Heben Sie die Registrierung der Aufgabendefinition auf, indem Sie die Version angeben. ECSerstellt 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
-
Löschen Sie die Aufgabendefinition.
$
aws ecs delete-task-definitions --task-definition
windows-gmsa-domainless-task:1
-
-
(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 Domainless ECS gMSA für Windows-Container
- ECSAmazon-Aufgabenstatus
-
ECSversucht, 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 das Anhalten der Aufgabe nach dem Grund, warum die Aufgabe angehalten wurde. In der AWS CLI, beschreiben Sie die Aufgabe und sehen Sie sich denstoppedReason
an. Die Schritte im Feld AWS Management Console und AWS CLI finden Sie unterFehler beim Beenden ECS von Aufgaben durch Amazon 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 inLogs\Microsoft\Windows\Containers-CCG\Admin
. Weitere Tipps zum Debuggen finden Sie unter Problembehandlung gMSAs bei Windows-Containernauf der Microsoft-Learn-Website. - ECSAgent gMSA Plugin
-
Protokollierung für gMSA Das Plugin 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.