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.
Themen
- Voraussetzungen
- Schritt 1: Das gMSA-Konto in den Active Directory-Domain-Services (AD DS) erstellen und konfigurieren
- Schritt 2: Die Anmeldeinformationen in Secrets Manager hochladen
- Schritt 3: Ihre CredSpec-JSON-Datei so ändern, dass sie Informationen von domainlosen gMSA enthält
- Schritt 4: CredSpec auf Amazon S3 hochladen
- Schritt 5 (Optional): Ein Amazon-ECS-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 gMSA verwendet
- 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 über gMSA-Anmeldeinformationen verfügt
- Schritt 14: Bereinigen
- Debuggen von Amazon ECS domainlosen 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 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 BetriebssystemSpeicherort 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.
-
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 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. -
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 SieExampleAccount
durch den Namen, den Sie für Ihr gMSA-Konto verwenden möchten.-
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 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 -
PS C:\>
Add-ADGroupMember -Identity "
ExampleAccount
Hosts" -Members "ExampleAccount
" -
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
-
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 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
-
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
\" -
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
.
-
Kopieren Sie die CredSpec-Datei auf den Computer oder die Umgebung, in der Sie AWS CLI -Befehle ausführen.
-
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.
-
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
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 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 den ARN für die
Resource
in der ersten Anweisung durch den Amazon-S3-Bucket und den Speicherort und die zweiteResource
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 vonsecretsmanager: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.
-
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 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
.
-
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 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.
-
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.
-
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 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. 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
.
-
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 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
.
-
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 ü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
.
-
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.
-
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 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
-
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. 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
-
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 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 denstoppedReason
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 inLogs\Microsoft\Windows\Containers-CCG\Admin
. Weitere Tipps zum Debuggen finden Sie unter Problembehandlung bei gMSAs für Windows-Containerauf 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.