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.
IAM-Rolle für Amazon ECS-Aufgaben
Ihren Amazon-ECS-Aufgaben kann eine IAM-Rolle zugeordnet sein. Die in der IAM-Rolle gewährten Berechtigungen werden von den Containern übernommen, die in der Aufgabe ausgeführt werden. Diese Rolle ermöglicht es Ihrem Anwendungscode (auf dem Container), andere AWS Dienste zu verwenden. Die Aufgabenrolle ist erforderlich, wenn Ihre Anwendung auf andere AWS Dienste wie Amazon S3 zugreift.
Anmerkung
Auf diese Berechtigungen greifen der Amazon ECS-Container und die Fargate-Agenten nicht zu. Informationen zu den IAM-Berechtigungen, die Amazon ECS benötigt, um Container-Images abzurufen und die Aufgabe auszuführen, finden Sie unter. IAM-Rolle für die Amazon-ECS-Aufgabenausführung
Im Folgenden sind die Vorteile der Verwendung von Aufgabenrollen aufgeführt:
-
Isolierung von Anmeldeinformationen: Ein Container kann nur Anmeldeinformationen für die IAM-Rolle abrufen, die in der Aufgabendefinition definiert ist, zu der er gehört; ein Container hat niemals Zugriff auf Anmeldeinformationen, die für einen anderen Container bestimmt sind, der zu einer anderen Aufgabe gehört.
-
Autorisierung: Nicht autorisierte Container können nicht auf IAM-Rollen-Anmeldeinformationen zugreifen, die für andere Aufgaben definiert sind.
-
Überwachung: Die Zugriffs- und Ereignisprotokollierung ist bis verfügbar CloudTrail , um eine nachträgliche Prüfung zu gewährleisten. Die Anmeldedaten für Aufgaben haben einen Kontext
taskArn
, der an die Sitzung angehängt ist, sodass in den CloudTrail Protokollen angezeigt wird, welche Aufgabe welche Rolle verwendet.
Anmerkung
Wenn Sie eine IAM-Rolle für eine Aufgabe angeben, verwenden die AWS CLI oder andere SDKs in den Containern für diese Aufgabe ausschließlich die von der Aufgabenrolle bereitgestellten AWS Anmeldeinformationen und erben keine IAM-Berechtigungen mehr von der Amazon- EC2 oder externen Instance, auf der sie ausgeführt werden.
Die IAM-Rolle für Aufgaben erstellen
Wenn Sie eine IAM-Richtlinie für Ihre Aufgaben erstellen, muss die Richtlinie die Berechtigungen enthalten, die die Container in Ihren Aufgaben annehmen sollen. Sie können eine vorhandene AWS verwaltete Richtlinie verwenden oder Sie können eine benutzerdefinierte Richtlinie von Grund auf neu erstellen, die Ihren spezifischen Anforderungen entspricht. Weitere Informationen finden Sie unter Erstellen von IAM-Richtlinien im IAM-Benutzerhandbuch.
Wichtig
Für Amazon-ECS-Aufgaben (für alle Starttypen) empfehlen wir, dass Sie die IAM-Richtlinie und -Rolle für Ihre Aufgaben verwenden. Diese Anmeldeinformationen ermöglichen es Ihrer Aufgabe, AWS API-Anfragen zu stellen, ohne dass Sie aufrufen sts:AssumeRole
müssen, um dieselbe Rolle zu übernehmen, die der Aufgabe bereits zugewiesen ist. Wenn Ihr Aufgabe eine Rolle verwendet, um sich selbst anzunehmen, müssen Sie eine Vertrauensrichtlinie erstellen, die ausdrücklich zulässt, dass diese Rolle sich selbst annimmt. Weitere Informationen finden Sie unter Aktualisieren einer Rollenvertrauensrichtlinie im IAM-Benutzerhandbuch.
Sobald die IAM-Richtlinie erstellt wurde, können Sie eine IAM-Rolle erstellen, Richtlinie enthält, auf Sie in Ihrer Amazon-ECS-Aufgabendefinition verweisen. Sie können die Rolle mithilfe des Anwendungsfalls Elastic-Container-Service-Aufgabe in der IAM-Konsole erstellen. Anschließend können Sie Ihre spezifische IAM-Richtlinie an die Rolle anhängen, die den Containern in Ihrer Aufgabe die gewünschten Berechtigungen erteilt. Wie Sie dazu vorgehen müssen, ist in den unten stehenden Verfahren beschrieben.
Wenn Sie mehrere Aufgabendefinitionen oder Services haben, die IAM-Berechtigungen benötigen, empfehlen wir, für die jeweiligen Aufgabendefinitionen oder Services eine Rolle mit den zur Ausführung der Aufgaben mindestens benötigten Berechtigungen zu erstellen, um den Zugriff zu minimieren, den Sie für die einzelnen Aufgaben bereitstellen.
Informationen zum Service-Endpunkt für Ihre Region finden Sie unter Service-Endpunkte im Allgemeine Amazon Web Services-Referenz Handbuch.
Die Aufgaben-IAM-Rolle muss über eine Vertrauensrichtlinie verfügen, die den ecs-tasks.amazonaws.com
-Service angibt. Die sts:AssumeRole
Berechtigung ermöglicht es Ihren Aufgaben, eine IAM-Rolle anzunehmen, die sich von der, die EC2 Amazon-Instance verwendet, unterscheidet. Auf diese Weise erbt Ihre Aufgabe nicht die der EC2 Amazon-Instance zugeordnete Rolle. Im Folgenden finden Sie ein Beispiel für eine Vertrauensrichtlinie. Ersetzen Sie die Regionskennung und geben Sie die AWS Kontonummer an, die Sie beim Starten von Aufgaben verwenden.
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":[ "ecs-tasks.amazonaws.com" ] }, "Action":"sts:AssumeRole", "Condition":{ "ArnLike":{ "aws:SourceArn":"arn:aws:ecs:
us-west-2
:111122223333
:*" }, "StringEquals":{ "aws:SourceAccount":"111122223333
" } } } ] }
Wichtig
Es wird empfohlen, bei der Erstellung Ihrer Aufgaben-IAM-Rolle die aws:SourceArn
Bedingungsschlüssel oder entweder in der Vertrauensstellung aws:SourceAccount
oder in der IAM-Richtlinie, die der Rolle zugeordnet ist, zu verwenden, um die Berechtigungen weiter einzuschränken und so das verwirrende Sicherheitsproblem des stellvertretenden Mitarbeiters zu vermeiden. Verwendung des aws:SourceArn
Bedingungsschlüssels zur Angabe eines bestimmten Clusters wird derzeit nicht unterstützt. Sie sollten den Platzhalter verwenden, um alle Cluster anzugeben. Weitere Informationen über das Problem mit dem verwirrten Stellvertreter und darüber, wie Sie Ihr AWS Konto schützen können, finden Sie im IAM-Benutzerhandbuch unter Das Problem mit dem verwirrten Stellvertreter.
In den folgenden Verfahren wird anhand einer Beispielrichtlinie beschrieben, wie Sie eine Richtlinie zum Abrufen von Objekten aus Amazon S3 erstellen. Ersetzen Sie user input
durch alle Ihre eigenen Werte.
In den folgenden Verfahren wird beschrieben, wie Sie eine Task-IAM-Rolle erstellen, indem Sie eine von Ihnen erstellte IAM-Richtlinie anhängen.
Nachdem Sie die Rolle erstellt haben, fügen Sie der Rolle zusätzliche Berechtigungen für die folgenden Funktionen hinzu.
Funktion | Zusätzliche Berechtigungen |
---|---|
Verwenden Sie ECS Exec |
|
Verwenden Sie EC2 Instanzen (Windows und Linux) | |
Verwenden Sie externe Instanzen | |
Verwenden Sie EC2 Windows-Instanzen |
ECS Exec-Berechtigungen
Für die ECS Exec-Funktion ist eine Task-IAM-Rolle erforderlich, um Containern die für die Kommunikation zwischen dem verwalteten SSM-Agenten (execute-command
Agenten) und dem SSM-Dienst erforderlichen Berechtigungen zu gewähren. Sie sollten einer Aufgaben-IAM-Rolle die folgenden Berechtigungen hinzufügen und die Aufgaben-IAM-Rolle in Ihre Aufgabendefinition aufnehmen. Weitere Informationen finden Sie unter Hinzufügen und Entfernen von IAM-Richtlinien im IAM-Benutzerhandbuch.
Verwenden Sie die folgende Richtlinie für Ihre Aufgaben-IAM-Rolle, um die erforderlichen SSM-Berechtigungen hinzuzufügen.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssmmessages:CreateControlChannel", "ssmmessages:CreateDataChannel", "ssmmessages:OpenControlChannel", "ssmmessages:OpenDataChannel" ], "Resource": "*" } ] }
Zusätzliche Konfiguration von EC2 Amazon-Instances
Wir empfehlen Ihnen, die Berechtigungen in Ihrer Container-Instance-Rolle auf die minimale Liste von Berechtigungen, die in der verwalteten IAM-Richtlinie AmazonEC2ContainerServiceforEC2Role
verwendet werden, zu begrenzen.
Ihre EC2 Amazon-Instances benötigen mindestens die Version 1.11.0
des Container-Agenten, um die Aufgabenrolle verwenden zu können. Wir empfehlen jedoch, die neueste Container-Agent-Version zu verwenden. Informationen zum Überprüfen Ihrer Agenten-Version und zum Aktualisieren auf die neueste Version finden Sie unter Überprüfen des Amazon-ECS-Container-Agenten. Wenn Sie ein Amazon ECS-optimiertes AMI verwenden, benötigt Ihre Instance mindestens einen Teil 1.11.0-1
des ecs-init
Pakets. Wenn Ihre Instances das neueste Amazon-ECS-optimierte AMI verwenden, enthalten sie die erforderlichen Versionen des Container-Agenten und ecs-init
. Weitere Informationen finden Sie unter Amazon ECS-optimiertes Linux AMIs.
Wenn Sie das Amazon ECS-optimierte AMI nicht für Ihre Container-Instances verwenden, fügen Sie Ihrem docker run Befehl die --net=host
Option hinzu, mit der der Agent gestartet wird, und die folgenden Agentenkonfigurationsvariablen für Ihre gewünschte Konfiguration (weitere Informationen finden Sie unterKonfiguration des Amazon-ECS-Container-Agenten):
ECS_ENABLE_TASK_IAM_ROLE=true
-
Verwendet IAM-Rollen für Aufgaben für Container mit den Netzwerkmodi
bridge
unddefault
. ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true
-
Verwendet IAM-Rollen für Aufgaben für Container mit dem
host
-Netzwerkmodus. Diese Variable wird nur von den Agenten-Versionen 1.12.0 oder höher unterstützt.
Ein Beispiel für einen Ausführungsbefehl finden Sie unter Manuelles Aktualisieren des Amazon ECS-Container-Agenten (für nicht für Amazon AMIs ECS optimierte Systeme). Sie müssen außerdem die folgenden Netzwerkbefehle auf Ihrer Container-Instance einrichten, damit die Container in Ihren Aufgaben ihre AWS Anmeldeinformationen abrufen können:
sudo sysctl -w net.ipv4.conf.all.route_localnet=1
sudo iptables -t nat -A PREROUTING -p tcp -d 169.254.170.2 --dport 80 -j DNAT --to-destination 127.0.0.1:51679
sudo iptables -t nat -A OUTPUT -d 169.254.170.2 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 51679
Sie müssen diese iptables-Regeln auf Ihrer Container-Instance speichern, damit sie einen Neustart überstehen. Sie können mithilfe der Befehle iptables-save und iptables-restore Ihre iptables-Regeln speichern und während des Boot-Prozesses wiederherstellen. Weitere Informationen finden Sie in der Dokumentation zu Ihrem entsprechenden Betriebssystem.
Um zu verhindern, dass Container, die von Aufgaben ausgeführt werden, die den awsvpc
Netzwerkmodus verwenden, auf die Anmeldeinformationen zugreifen, die für das EC2 Amazon-Instance-Profil bereitgestellt wurden, und gleichzeitig die von der Aufgabenrolle bereitgestellten Berechtigungen zulassen, setzen Sie die ECS_AWSVPC_BLOCK_IMDS
Agent-Konfigurationsvariable true
in der Agenten-Konfigurationsdatei auf und starten Sie den Agenten neu. Weitere Informationen finden Sie unter Konfiguration des Amazon-ECS-Container-Agenten.
Um zu verhindern, dass Container, die von Aufgaben ausgeführt werden, die den bridge
Netzwerkmodus verwenden, auf die Anmeldeinformationen zugreifen, die für das EC2 Amazon-Instance-Profil bereitgestellt werden, und gleichzeitig die von der Aufgabenrolle bereitgestellten Berechtigungen zulassen, indem Sie den folgenden iptables Befehl auf Ihren EC2 Amazon-Instances ausführen. Dieser Befehl wirkt sich nicht auf Container in Aufgaben aus, die den host
- oder awsvpc
-Netzwerkmodus verwenden. Weitere Informationen finden Sie unter Netzwerkmodus.
-
sudo yum install -y iptables-services; sudo iptables --insert DOCKER-USER 1 --in-interface docker+ --destination 169.254.169.254/32 --jump DROP
Sie müssen diese iptables Regel auf Ihrer EC2 Amazon-Instance speichern, damit sie einen Neustart übersteht. Wenn Sie das Amazon-ECS-optimierte AMI verwenden, können Sie den folgenden Befehl verwenden. Informationen über andere Betriebssysteme finden Sie in der Dokumentation des jeweiligen Betriebssystems.
sudo iptables-save | sudo tee /etc/sysconfig/iptables && sudo systemctl enable --now iptables
Zusätzliche Konfiguration der externen Instanz
Ihre externen Instances benötigen mindestens die Version 1.11.0
des Container-Agenten, um Task-IAM-Rollen verwenden zu können. Wir empfehlen jedoch, die neueste Container-Agent-Version zu verwenden. Informationen zum Überprüfen Ihrer Agenten-Version und zum Aktualisieren auf die neueste Version finden Sie unter Überprüfen des Amazon-ECS-Container-Agenten. Wenn Sie das Amazon-ECS-optimierte AMI verwenden, benötigt Ihre Instance mindestens 1.11.0-1
des ecs-init
-Pakets. Wenn Ihre Instances das neueste Amazon-ECS-optimierte AMI verwenden, enthalten sie die erforderlichen Versionen des Container-Agenten und ecs-init
. Weitere Informationen finden Sie unter Amazon ECS-optimiertes Linux AMIs.
Wenn Sie das Amazon ECS-optimierte AMI nicht für Ihre Container-Instances verwenden, fügen Sie Ihrem docker run Befehl die --net=host
Option hinzu, mit der der Agent gestartet wird, und die folgenden Agentenkonfigurationsvariablen für Ihre gewünschte Konfiguration (weitere Informationen finden Sie unterKonfiguration des Amazon-ECS-Container-Agenten):
ECS_ENABLE_TASK_IAM_ROLE=true
-
Verwendet IAM-Rollen für Aufgaben für Container mit den Netzwerkmodi
bridge
unddefault
. ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true
-
Verwendet IAM-Rollen für Aufgaben für Container mit dem
host
-Netzwerkmodus. Diese Variable wird nur von den Agenten-Versionen 1.12.0 oder höher unterstützt.
Ein Beispiel für einen Ausführungsbefehl finden Sie unter Manuelles Aktualisieren des Amazon ECS-Container-Agenten (für nicht für Amazon AMIs ECS optimierte Systeme). Sie müssen außerdem die folgenden Netzwerkbefehle auf Ihrer Container-Instance einrichten, damit die Container in Ihren Aufgaben ihre AWS Anmeldeinformationen abrufen können:
sudo sysctl -w net.ipv4.conf.all.route_localnet=1
sudo iptables -t nat -A PREROUTING -p tcp -d 169.254.170.2 --dport 80 -j DNAT --to-destination 127.0.0.1:51679
sudo iptables -t nat -A OUTPUT -d 169.254.170.2 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 51679
Sie müssen diese iptables-Regeln auf Ihrer Container-Instance speichern, damit sie einen Neustart überstehen. Sie können mithilfe der Befehle iptables-save und iptables-restore Ihre iptables-Regeln speichern und während des Boot-Prozesses wiederherstellen. Weitere Informationen finden Sie in der Dokumentation zu Ihrem entsprechenden Betriebssystem.
Zusätzliche Konfiguration der Amazon EC2 Windows-Instance
Wichtig
Dies gilt nur für Windows-Container EC2 , die Aufgabenrollen verwenden.
Für die Aufgabenrolle mit Windows-Funktionen ist eine zusätzliche Konfiguration erforderlich EC2.
-
Wenn Sie Container-Instances starten, müssen Sie die Option
-EnableTaskIAMRole
im Benutzerdatenskript der Container-Instances festlegen.EnableTaskIAMRole
aktiviert die Task-IAM-Rollenfunktion für die Aufgaben. Zum Beispiel:<powershell> Import-Module ECSTools Initialize-ECSAgent -Cluster '
windows
' -EnableTaskIAMRole </powershell> -
Sie müssen einen Bootstrap für Ihren Container mit den Netzwerkbefehlen ausführen, die unter Amazon ECS-Container-Bootstrap-Skript angegeben sind.
-
Sie müssen eine IAM-Rolle und -Richtlinie für Ihre Aufgaben erstellen. Weitere Informationen finden Sie unter Die IAM-Rolle für Aufgaben erstellen.
-
Die IAM-Rollen für den Anbieter der Anmeldeinformationen für die Aufgabe verwenden Port 80 auf der Container-Instance. Daher können Ihre Container nicht Port 80 für den Host-Port in Port-Mappings verwenden, wenn Sie IAM-Rollen für Aufgaben auf Ihrer Container-Instance konfigurieren. Um Ihre Container auf Port 80 bereitzustellen, empfehlen wir, dass Sie dafür einen Container mit Lastausgleich konfigurieren. Sie können Port 80 auf dem Load Balancer verwenden. Auf diese Weise kann der Datenverkehr an einen anderen Host-Port auf Ihren Container-Instances umgeleitet werden. Weitere Informationen finden Sie unter Verwenden Sie Load Balancing, um den Amazon ECS-Serviceverkehr zu verteilen.
-
Wenn Ihre Windows-Instance neu gestartet wird, müssen Sie die Proxy-Schnittstelle löschen und den Amazon-ECS-Container-Agenten erneut initialisieren, um den Anmeldeinformationsproxy wieder zu starten.
Amazon ECS-Container-Bootstrap-Skript
Bevor Container zum Abrufen von Anmeldeinformationen auf den Proxy für Anmeldeinformationen auf der Container-Instance zugreifen können, muss für den Container ein Bootstrap mit den erforderlichen Netzwerkbefehlen ausgeführt werden. Das folgende Code-Beispielskript sollte auf Ihren Containern bei deren Start ausgeführt werden.
Anmerkung
Sie müssen dieses Skript nicht ausführen, wenn Sie awsvpc
-Netzwerkmodus unter Windows verwenden.
Wenn Sie Windows-Container mit Powershell ausführen, verwenden Sie das folgende Skript:
# Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"). You may # not use this file except in compliance with the License. A copy of the # License is located at # # http://aws.amazon.com/apache2.0/ # # or in the "license" file accompanying this file. This file is distributed # on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language governing # permissions and limitations under the License. $gateway = (Get-NetRoute | Where { $_.DestinationPrefix -eq '0.0.0.0/0' } | Sort-Object RouteMetric | Select NextHop).NextHop $ifIndex = (Get-NetAdapter -InterfaceDescription "Hyper-V Virtual Ethernet*" | Sort-Object | Select ifIndex).ifIndex New-NetRoute -DestinationPrefix 169.254.170.2/32 -InterfaceIndex $ifIndex -NextHop $gateway -PolicyStore ActiveStore # credentials API New-NetRoute -DestinationPrefix 169.254.169.254/32 -InterfaceIndex $ifIndex -NextHop $gateway -PolicyStore ActiveStore # metadata API
Wenn Sie Windows-Container ausführen, die nur die Befehls-Shell haben, verwenden Sie das folgende Skript:
# Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"). You may # not use this file except in compliance with the License. A copy of the # License is located at # # http://aws.amazon.com/apache2.0/ # # or in the "license" file accompanying this file. This file is distributed # on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language governing # permissions and limitations under the License. for /f "tokens=1" %i in ('netsh interface ipv4 show interfaces ^| findstr /x /r ".*vEthernet.*"') do set interface=%i for /f "tokens=3" %i in ('netsh interface ipv4 show addresses %interface% ^| findstr /x /r ".*Default.Gateway.*"') do set gateway=%i netsh interface ipv4 add route prefix=169.254.170.2/32 interface="%interface%" nexthop="%gateway%" store=active # credentials API netsh interface ipv4 add route prefix=169.254.169.254/32 interface="%interface%" nexthop="%gateway%" store=active # metadata API