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.
Überwachen von Amazon-ECS-Containern mit ECS Exec
Mit Amazon ECS Exec können Sie direkt mit Containern interagieren, ohne zuerst mit dem Host-Container-Betriebssystem interagieren, eingehende Ports öffnen oder SSH-Schlüssel verwalten zu müssen. Sie können ECS Exec verwenden, um Befehle in einem Container auszuführen oder eine Shell zu erhalten, der auf einer Amazon-EC2-Instance oder auf AWS Fargate ausgeführt wird. Dies erleichtert das Sammeln von Diagnoseinformationen und die schnelle Fehlerbehebung. Beispielsweise können Sie ECS Exec in einem Entwicklungsumfeld verwenden, um problemlos mit verschiedenen Prozessen in Ihren Containern zu interagieren und Ihre Anwendungen zu beheben. In Produktionsszenarien können Sie ECS Exec verwenden, um Notfallszugriff auf Ihre Container zu erhalten, um Probleme zu beheben.
Sie können Befehle in einem laufenden Linux- oder Windows-Container mit ECS Exec aus der Amazon ECS-API ausführen. AWS Command Line Interface (AWS CLI), AWS SDKs oder die AWS Copilot-CLI. Einzelheiten zur Verwendung von ECS Exec sowie eine Videoanleitung finden Sie unter AWS Copilot CLI finden Sie im Copilot GitHub Dokumentation
Sie können ECS Exec auch verwenden, um strengere Zugriffskontrolle-Richtlinien beizubehalten. Wenn Sie dieses Feature selektiv aktivieren, können Sie steuern, wer Befehle ausführen kann und für welche Tasks diese Befehle ausgeführt werden können. Mit einem Protokoll jedes Befehls und seiner Ausgabe können Sie mit ECS Exec nachverfolgen, welche Aufgaben ausgeführt wurden, und Sie können CloudTrail um zu überprüfen, wer auf einen Container zugegriffen hat.
Überlegungen
Beachten Sie Folgendes, wenn Sie ECS Exec verwenden.
-
ECS Exec funktioniert möglicherweise nicht wie erwartet, wenn es auf Betriebssystemen läuft, die nicht von Systems Manager unterstützt werden. Weitere Informationen zu den unterstützten Betriebssystemen finden Sie unter Typen von Betriebssystemen im Benutzerhandbuch für AWS Systems Manager .
-
ECS Exec wird für Aufgaben unterstützt, die auf der folgenden Infrastruktur ausgeführt werden:
-
Linux-Container auf Amazon EC2 auf einem beliebigen Amazon ECS-optimized AMI, einschließlich Bottlerocket
-
Linux- und Windows-Container auf externen Instances (Amazon ECS Anywhere)
-
Linux- und Windows-Container aktiviert AWS Fargate
-
Windows-Container auf Amazon EC2 auf dem folgenden Windows (Amazon) ECS-optimized AMIs (mit der Container-Agent-Version)
1.56oder später):-
Amazon ECS-optimized Vollständiges AMI für Windows Server 2022
-
Amazon ECS-optimized Windows Server 2022-Kern-AMI
-
Amazon ECS-optimized Vollständiges AMI für Windows Server 2019
-
Amazon ECS-optimized Kern-AMI für Windows Server 2019
-
Amazon ECS-optimized 20H2-Kern-AMI für Windows Server
-
-
-
Wenn Sie einen HTTP-Proxy für Ihre Aufgabe konfiguriert haben, setzen Sie die
NO_PROXY-Umgebungsvariable auf"NO_PROXY=169.254.169.254,169.254.170.2", um den Proxy für EC2-Instance-Metadaten und IAM-Rollen-Datenverkehr zu umgehen. Wenn Sie dieNO_PROXY-Umgebungsvariable nicht konfigurieren, kann es beim Abrufen von Instance-Metadaten oder IAM-Rollen-Anmeldeinformationen vom Metadaten-Endpunkt innerhalb des Containers zu Fehlern kommen. Wenn Sie dieNO_PROXY-Umgebungsvariable wie empfohlen festlegen, werden die Metadaten und der IAM-Datenverkehr gefiltert, sodass Anfragen an169.254.169.254 and 169.254.170.2nicht über denHTTP-Proxy weitergeleitet werden. -
ECS Exec und Amazon VPC
-
Wenn Sie Amazon-VPC-Endpunkte als Schnittstelle mit Amazon ECS verwenden, müssen Sie die Schnittstelle Amazon-VPC-Endpunkte für Systems Manager Session Manager (
ssmmessages) erstellen. Weitere Informationen zu Systems Manager VPC-Endpunkten finden Sie unter Verwenden AWS PrivateLink um einen VPC-Endpunkt für Session Manager einzurichten in der AWS Systems Manager Benutzerleitfaden. -
Wenn Sie Amazon VPC-Endpunkte mit Amazon ECS verbinden und Sie verwenden AWS KMS key Für die Verschlüsselung müssen Sie dann die Schnittstelle Amazon VPC-Endpoint erstellen für AWS KMS key. Weitere Informationen finden Sie unter Verbinden mit AWS KMS key über einen VPC-Endpunkt im AWS Key Management Service -Entwicklerhandbuch.
-
Wenn Sie Aufgaben haben, die auf Amazon-EC2-Instances ausgeführt werden, verwenden Sie den
awsvpc-Netzwerkmodus. Wenn Sie keinen Internetzugang haben (bzw. nicht für die Verwendung eines NAT-Gateways konfiguriert), müssen Sie die Schnittstellen-Amazon-VPC-Endpunkte für den Systems Manager Session Manager (ssmmessages) erstellen. Weitere Informationen zu Überlegungen zumawsvpc-Netzwerkmodus finden Sie unter Überlegungen. Weitere Informationen zu Systems Manager VPC-Endpunkten finden Sie unter Verwenden AWS PrivateLink um einen VPC-Endpunkt für Session Manager einzurichten in der AWS Systems Manager Benutzerleitfaden.
-
-
Amazon ECS Exec wird nicht für Aufgaben unterstützt, die in einem IPv6-only Konfiguration. Weitere Informationen zum Ausführen von Aufgaben in einem IPv6-only Konfiguration finden Sie unter Netzwerkoptionen für Amazon-ECS-Aufgaben für Fargate und Netzwerkoptionen für Amazon-ECS-Aufgaben für EC2.
-
ECS Exec und SSM
-
Für Ihre Aufgabe ist eine Task-IAM-Rolle mit den erforderlichen Berechtigungen für SSM Session Manager erforderlich. Wenn für Aufgaben in Amazon EC2 keine Aufgabenrolle konfiguriert ist, wird stattdessen die Instance-Rolle der zugrunde liegenden Amazon EC2-Instance verwendet. Weitere Informationen finden Sie unter ECS-Exec-Berechtigungen.
-
Wenn ein Benutzer Befehle für einen Container mit ECS Exec ausführt, werden diese Befehle als der
root-Benutzer ausgeführt. Der SSM Agent und seine untergeordneten Prozesse werden auch dann als Root ausgeführt, wenn Sie eine Benutzer-ID für den Container angeben. -
Der SSM-Agent erfordert, dass auf das Container-Dateisystem geschrieben werden kann, um die erforderlichen Verzeichnisse und Dateien zu erstellen. Daher wird das Schreibschützen der Root-Dateisystem mit dem
readonlyRootFilesystem-Aufgabendefinitionsparameter oder eine andere Methode nicht unterstützt. -
Obwohl das Starten von SSM-Sitzungen außerhalb der
execute-command-Aktion möglich ist, führt dies dazu, dass die Sitzungen nicht protokolliert und gegen das Sitzungslimit gezählt werden. Wir empfehlen, diesen Zugriff einzuschränken, indem Sie diessm:start-session-Aktion mit einer IAM-Richtlinie verweigern. Weitere Informationen finden Sie unter Beschränken des Zugriffs auf die Aktion „Sitzung starten“.
-
-
Die folgenden Features werden als Sidecar-Container ausgeführt. Daher müssen Sie den Namen des Containers angeben, für den der Befehl ausgeführt werden soll.
-
Laufzeitüberwachung
-
Service verbinden
-
-
Benutzer können alle Befehle ausführen, die im Container-Kontext verfügbar sind. Die folgenden Aktionen können zu verwaisten und Zombie-Prozessen führen: Beenden des Hauptprozesses des Containers, Beenden des Befehls-Agenten und Löschen von Abhängigkeiten. Um Zombie-Prozesse zu bereinigen, empfehlen wir Ihnen, das
initProcessEnabled-Flag an Ihre Aufgabendefinition anzufügen. -
ECS Exec wird CPU und Arbeitsspeicher verwenden. Sie sollten dies berücksichtigen, wenn Sie die CPU- und Arbeitsspeicherressourcenzuordnungen in Ihrer Aufgabendefinition angeben.
-
Sie müssen verwenden AWS CLI Ausführung
1.22.3oder später oder AWS CLI Ausführung2.3.6oder später. Für Informationen darüber, wie Sie das aktualisieren AWS CLI, siehe Installation oder Aktualisierung der neuesten Version von AWS CLI in der AWS Command Line Interface Bedienungsanleitung Version 2. -
Sie können nur eine ECS-Exec-Sitzung pro Prozess-ID-Namespace (PID) haben. Wenn Sie einen PID-Namespace in einer Aufgabe freigeben, können Sie ECS-Exec-Sitzungen nur in einem Container starten.
-
Für die ECS Exec-Sitzung ist eine Zeitüberschreitung von 20 Minuten konfiguriert. Dieser Wert kann nicht geändert werden.
-
Sie können ECS Exec nicht für vorhandene Aufgaben aktivieren. Es kann nur für neue Aufgaben aktiviert werden.
-
Sie können ECS Exec nicht verwenden, wenn Sie mit
run-taskeine Aufgabe auf einem Cluster starten, der verwaltete Skalierung mit asynchroner Platzierung verwendet (eine Aufgabe ohne Instance starten). -
Sie können ECS Exec nicht für Microsoft-Nano-Server-Container ausführen.
Architektur
ECS Exec nutzt AWS Systems Manager (SSM) Session Manager zum Herstellen einer Verbindung mit dem laufenden Container und verwendet AWS Identity and Access Management (IAM) -Richtlinien zur Steuerung des Zugriffs auf ausgeführte Befehle in einem laufenden Container. Dies wird ermöglicht, indem die notwendigen SSM Agent-Binärdateien in den Container eingebunden werden. Das Amazon ECS oder AWS Fargate Der Agent ist dafür verantwortlich, den SSM-Core-Agenten zusammen mit Ihrem Anwendungscode im Container zu starten. Weitere Informationen erhalten Sie unter Systems Manager Session Manager.
Sie können überprüfen, welcher Benutzer auf den Container zugegriffen hat, indem Sie ExecuteCommand Ereignis in AWS CloudTrail und protokollieren Sie jeden Befehl (und seine Ausgabe) in Amazon S3 oder Amazon CloudWatch Protokolle. Um Daten zwischen dem lokalen Client und dem Container mit Ihrem eigenen Verschlüsselungsschlüssel zu verschlüsseln, müssen Sie den AWS Key Management Service (AWS KMS) Schlüssel.
Konfiguration von ECS Exec
Um ECS Exec verwenden zu können, müssen Sie zuerst das Feature für Ihre Aufgaben und Services aktivieren. Anschließend können Sie Befehle in Ihren Containern ausführen.
Änderungen an optionalen Aufgabendefinition
Wenn Sie den Aufgabendefinitionefinitions-Parameter auf initProcessEnabled oder true setzen, startet dies den Init-Prozess innerhalb des Containers. Dadurch werden alle gefundenen untergeordneten Prozesse des Zombie-SSM-Agents entfernt. Folgendes ist ein Beispiel.
{ "taskRoleArn": "ecsTaskRole", "networkMode": "awsvpc", "requiresCompatibilities": [ "EC2", "FARGATE" ], "executionRoleArn": "ecsTaskExecutionRole", "memory": ".5 gb", "cpu": ".25 vcpu", "containerDefinitions": [ { "name": "amazon-linux", "image": "amazonlinux:latest", "essential": true, "command": ["sleep","3600"], "linuxParameters": { "initProcessEnabled":true} } ], "family": "ecs-exec-task" }
Aktivieren von ECS Exec für Ihre Aufgaben und Services
Sie können die ECS Exec-Funktion für Ihre Dienste und eigenständigen Aufgaben aktivieren, indem Sie die --enable-execute-command kennzeichnen, wenn Sie eine der folgenden Optionen verwenden AWS CLI Befehle: create-service, update-service, start-task, oder run-task.
Wenn Sie beispielsweise den folgenden Befehl ausführen, wird das ECS-Exec-Feature für einen neu erstellten Service aktiviert, der in Fargate ausgeführt wird. Weitere Informationen zum Erstellen von Services finden Sie unter create-service.
aws ecs create-service \ --clustercluster-name\ --task-definitiontask-definition-name\ --enable-execute-command \ --service-nameservice-name\ --launch-type FARGATE \ --network-configuration "awsvpcConfiguration={subnets=[subnet-12344321],securityGroups=[sg-12344321],assignPublicIp=ENABLED}" \ --desired-count 1
Nachdem Sie ECS Exec für eine Aufgabe aktiviert haben, können Sie den folgenden Befehl ausführen, um zu bestätigen, dass die Aufgabe für die Verwendung bereit ist. Wenn die lastStatus-Eigenschaft des ExecuteCommandAgent als RUNNING aufgelistet wird und die enableExecuteCommand-Eigenschaft auf true festgelegt ist, dann ist Ihre Aufgabe fertig.
aws ecs describe-tasks \ --clustercluster-name\ --taskstask-id
Das folgende Ausgabeschnippsel ist ein Beispiel davon, was Sie sehen könnten.
{ "tasks": [ { ... "containers": [ { ... "managedAgents": [ { "lastStartedAt": "2021-03-01T14:49:44.574000-06:00", "name": "ExecuteCommandAgent", "lastStatus": "RUNNING" } ] } ], ... "enableExecuteCommand": true, ... } ] }
Ausführen von Befehlen mit ECS Exec
Protokollierung mit ECS Exec
Sie können die Protokollierung für ECS-Exec-Sitzungen so konfigurieren, dass Befehle und ihre Ausgabe zu Prüfungs- und Fehlerbehebungszwecken erfasst werden.
Aktivieren der Protokollierung und Überwachung in Ihren Aufgaben und Services
Für weitere Informationen über CloudWatch Preisgestaltung finden Sie unter CloudWatch Preisgestaltung
Amazon ECS bietet eine Standardkonfiguration für die Protokollierung von Befehlen, die mit ECS Exec ausgeführt werden. Standardmäßig werden Protokolle gesendet an CloudWatch Protokolle mit dem awslogs Protokolltreiber, der in Ihrer Aufgabendefinition konfiguriert ist. Wenn Sie eine benutzerdefinierte Konfiguration bereitstellen möchten, verwenden Sie AWS CLI unterstützt eine --configuration Flagge für beide create-cluster und update-cluster Befehle. Das Container-Image benötigt script und cat um installiert zu werden, damit Befehlsprotokolle korrekt auf Amazon S3 hochgeladen werden können oder CloudWatch Protokolle. Weitere Informationen zum Erstellen von Clustern finden Sie unter create-cluster.
Diese Konfiguration verarbeitet nur die Protokollierung der execute-command-Sitzung. Dies wirkt sich nicht auf die Protokollierung Ihrer Anwendung aus.
Das folgende Beispiel erstellt einen Cluster und protokolliert dann die Ausgabe in Ihrem CloudWatch Loggt LogGroup genannt cloudwatch-log-group-name und Ihr Amazon S3-Bucket heißt s3-bucket-name.
Sie müssen eine verwenden AWS KMS vom Kunden verwalteter Schlüssel zum Verschlüsseln der Protokollgruppe, wenn Sie den CloudWatchEncryptionEnabled Option zu true. Hinweise zum Verschlüsseln der Protokollgruppe finden Sie unter Verschlüsseln Sie Protokolldaten in CloudWatch Loggt mit AWS Key Management Service, in der Amazon CloudWatch Logs Benutzerleitfaden.
aws ecs create-cluster \ --cluster-namecluster-name\ --configuration executeCommandConfiguration="{ \ kmsKeyId=string, \ logging=OVERRIDE, \ logConfiguration={ \ cloudWatchLogGroupName=cloudwatch-log-group-name, \ cloudWatchEncryptionEnabled=true, \ s3BucketName=s3-bucket-name, \ s3EncryptionEnabled=true, \ s3KeyPrefix=demo\ } \ }"
Die logging-Eigenschaft bestimmt das Verhalten der Protokollierungsfunktion von ECS Exec:
-
NONE: Protokollierung ist deaktiviert -
DEFAULT: Protokolle werden an den konfiguriertenawslogs-Treiber gesendet. Wenn der Treiber nicht konfiguriert ist, wird kein Protokoll gespeichert. -
OVERRIDE: Protokolle werden an das bereitgestellte Amazon gesendet CloudWatch Protokolle LogGroup, Amazon S3-Bucket oder beides.
Für Amazon sind IAM-Berechtigungen erforderlich CloudWatch Protokolle oder Amazon S3-Protokollierung
Um die Protokollierung zu aktivieren, benötigt die Amazon-ECS-Aufgabenrolle, die in Ihrer Aufgabendefinition referenziert wird, zusätzliche Berechtigungen. Diese zusätzlichen Berechtigungen können der Aufgabenrolle als Richtlinie hinzugefügt werden. Sie unterscheiden sich, je nachdem, ob Sie Ihre Logs an Amazon weiterleiten CloudWatch Logs oder Amazon S3.
Für die Verschlüsselung mit Ihren eigenen sind IAM-Berechtigungen erforderlich AWS KMS key (KMS-Schlüssel)
Standardmäßig verwenden die zwischen Ihrem lokalen Client und dem Container übertragenen Daten eine TLS 1.2-Verschlüsselung, die AWS bietet. Um Daten mit Ihrem eigenen KMS-Schlüssel weiter zu verschlüsseln, müssen Sie einen KMS-Schlüssel erstellen und die kms:Decrypt-Berechtigung für Ihre Aufgaben-IAM-Rolle hinzufügen. Diese Berechtigung wird von Ihrem Container verwendet, um die Daten zu entschlüsseln. Weitere Informationen zum Erstellen eines KMS-Schlüssels finden Sie unter Erstellen von Schlüsseln.
Sie fügen die folgende Inline-Richtlinie zu Ihrer Aufgaben-IAM-Rolle hinzu, was die AWS KMS -Berechtigungen erfordern. Weitere Informationen finden Sie unter ECS-Exec-Berechtigungen.
Damit die Daten mit Ihrem eigenen KMS-Schlüssel verschlüsselt werden, muss dem Benutzer oder der Gruppe, der/die die execute-command-Aktion verwendet, die kms:GenerateDataKey-Berechtigung gewährt werden.
Die folgende Beispielrichtlinie für Ihren Benutzer oder Ihre Gruppe enthält die erforderliche Berechtigung, Ihren eigenen KMS-Schlüssel zu verwenden. Sie müssen den Amazon-Ressourcennamen (ARN) Ihres KMS-Schlüssels angeben.
Verwenden von IAM-Richtlinien, um den Zugriff auf ECS Exec zu beschränken
Sie können den Benutzerzugriff auf die API-Aktion execute-command beschränken, indem Sie einen oder mehrere der folgenden IAM-Richtlinien-Bedingungsschlüssel verwenden:
-
aws:ResourceTag/clusterTagKey -
ecs:ResourceTag/clusterTagKey -
aws:ResourceTag/taskTagKey -
ecs:ResourceTag/taskTagKey -
ecs:container-name -
ecs:cluster -
ecs:task -
ecs:enable-execute-command
Mit dem folgenden Beispiel einer IAM-Richtlinie können Benutzer Befehle in Containern ausführen, die innerhalb von Aufgaben mit einem Tag ausgeführt werden, das einen environment-Schlüssel und development-Wert hat und in einem Cluster mit dem Namen cluster-name.
Im folgenden IAM-Richtlinienbeispiel können Benutzer die execute-command-API nicht verwenden, wenn der Containername production-app lautet.
Mit der folgenden IAM-Richtlinie können Benutzer Aufgaben nur starten, wenn ECS Exec deaktiviert ist.
Da die execute-commandAPI-Aktion nur Task- und Clusterressourcen in einer Anforderung enthält, werden nur Cluster- und Task-Tags ausgewertet.
Weitere Informationen zu IAM-Richtlinienbedingungsschlüsseln finden Sie unter Aktionen, Ressourcen und Bedingungsschlüssel für den Amazon Elastic Container Service in der Service Authorization-Referenz.
Beschränken des Zugriffs auf die Aktion „Sitzung starten“
Während das Starten von SSM-Sitzungen auf Ihrem Container außerhalb von ECS Exec möglich ist, kann dies möglicherweise dazu führen, dass die Sitzungen nicht protokolliert werden. Sitzungen, die außerhalb von ECS Exec gestartet wurden, zählen ebenfalls zum Sitzungskontingent. Wir empfehlen, diesen Zugriff einzuschränken, indem Sie die ssm:start-session-Aktion direkt für Ihre Amazon-ECS-Aufgaben mithilfe einer IAM-Richtlinie verweigern. Sie können den Zugriff auf alle Amazon-ECS-Aufgaben oder bestimmte Aufgaben basierend auf den verwendeten Tags verweigern.
Nachfolgend finden Sie eine Beispiel-IAM-Richtlinie, die den Zugriff auf die ssm:start-session-Aktion für Tasks in allen Regionen mit einem angegebenen Clusternamen verweigert. Optional können Sie einen Platzhalter mit einschließen.cluster-name
Nachfolgend finden Sie eine Beispiel-IAM-Richtlinie, die den Zugriff auf die ssm:start-session-Aktion für Ressourcen in allen Regionen, die mit Tag-Schlüssel Task-Tag-Key markiert sind und Tag-Wert Exec-Task haben, verweigert.
Fehlerbehebung bei ECS Exec
Weitere Informationen zur Fehlerbehebung finden Sie unter Beheben von Problemen mit Exec.