IAM-Rollen für Aufgaben - Amazon Elastic Container Service

Sofern wir eine Übersetzung der englischsprachigen Version des Handbuchs bereitstellen, gilt im Fall von Widersprüchen die englischsprachige Version des Handbuchs. Bei der Übersetzung handelt es sich um eine maschinelle Übersetzung.

IAM-Rollen für Aufgaben

Mit IAM-Rollen für Amazon ECS-Aufgaben können Sie eine IAM-Rolle angeben, die von den Containern in einer Aufgabe verwendet werden kann. Anwendungen müssen ihre AWS-API-Anfragen mit AWS-Anmeldeinformationen signieren, und diese Funktion bietet eine Strategie zum Verwalten von Anmeldeinformationen für Ihre Anwendungen, ähnlich der Art, wie Amazon EC2-Instance-Profile Anmeldeinformationen für EC2-Instances bereitstellen. Anstatt Ihre AWS-Anmeldeinformationen zu erstellen und sie auf die Container zu verteilen oder die Rolle der EC2-Instance zu verwenden, können Sie eine IAM-Rolle einer ECS-Aufgabendefinition oder RunTask-API-Operation zuordnen. Die Anwendungen in den Containern der Aufgabe können dann das AWS SDK oder die CLI verwenden, um API-Anfragen an autorisierte AWS-Services zu senden.

Wichtig

Container, die auf Ihren Container-Instances ausgeführt werden, haben Zugriff auf die Anmeldeinformationen, die für das Container-Instance-Profil (über die Amazon EC2-Instance-Metadatenserver) zur Verfügung gestellt werden. Wir empfehlen Ihnen, die Berechtigungen in Ihrer Container-Instance-Rolle auf die minimale Liste von Berechtigungen zu begrenzen, die in IAM-Rolle für Amazon ECS-Container-Instances gezeigt ist.

Um zu verhindern, dass Container in Aufgaben, die den Netzwerkmodus awsvpc verwenden, auf die Anmeldeinformationen zugreifen, die für das Container-Instance-Profil bereitgestellt wurden (und dennoch die Berechtigungen erlauben, die von der Aufgabenrolle bereitgestellt werden), legen Sie die ECS_AWSVPC_BLOCK_IMDS-Agenten-Konfigurationsvariable in der Agenten-Konfigurationsdatei auf true fest und starten Sie den Agenten neu. Weitere Informationen finden Sie unter Amazon ECS-Container-Agent-Konfiguration.

Um zu verhindern, dass Container in Aufgaben, die den Netzwerkmodus bridge verwenden, auf die Anmeldeinformationen zugreifen, die für das Container-Instance-Profil bereitgestellt wurden (und dennoch die Berechtigungen erlauben, die von der Aufgabenrolle bereitgestellt werden), führen Sie den folgenden iptables-Befehl auf Ihren Container-Instances aus. Beachten Sie, dass dieser Befehl keinerlei Auswirkungen auf Container in Aufgaben hat, die den Netzwerkmodus host oder awsvpc verwenden. Weitere Informationen finden Sie unter Netzwerkmodus.

sudo yum install -y iptables-services; sudo iptables --insert FORWARD 1 --in-interface docker+ --destination 169.254.169.254/32 --jump DROP

Sie müssen diese iptables-Regel auf Ihrer Container-Instance speichern, damit sie einen Neustart übersteht. Verwenden Sie für das Amazon ECS-optimized AMI den folgenden Befehl. Informationen über andere Betriebssysteme finden Sie in der Dokumentation für dieses Betriebssystem.

  • Für das Amazon ECS-optimized Amazon Linux 2 AMI:

    sudo iptables-save | sudo tee /etc/sysconfig/iptables && sudo systemctl enable --now iptables
  • Für das Amazon ECS-optimized Amazon Linux AMI:

    sudo service iptables save

Sie können die IAM-Rolle definieren, die in Ihren Aufgabendefinitionen verwendet werden soll, oder Sie können einen taskRoleArn-Override verwenden, wenn Sie eine Aufgabe manuell mit der API-Operation RunTask ausführen. Der Amazon ECS-Agent erhält eine Nutzlast-Mitteilung, um die Aufgabe mit zusätzlichen Feldern zu starten, die die Rollen-Anmeldeinformationen enthalten. Der Amazon ECS-Agent legt eine eindeutige Anmelde-ID als Identifizierungs-Token für die Aufgabe fest und aktualisiert seinen internen Anmeldeinformationen-Cache, so dass das Identifizierungs-Token auf die Rollen-Anmeldeinformationen verweist, die in der Nutzlast empfangen wurden. Der Amazon ECS-Agent befüllt die Umgebungsvariable AWS_CONTAINER_CREDENTIALS_RELATIVE_URI im Objekt Env (verfügbar mit dem Befehl docker inspect container_id) für alle Container, die zu dieser Aufgabe gehören, mit der folgenden relativen URI: /credential_provider_version/credentials?id=task_credential_id.

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 die von der Aufgabenrolle bereitgestellten AWS-Anmeldeinformationen exklusiv und übernehmen keine IAM-Berechtigungen mehr von der Container-Instance.

Innerhalb des Containers können Sie die Anmeldeinformationen mit dem folgenden Befehl abfragen:

curl 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI

Ausgabe:

{ "AccessKeyId": "ACCESS_KEY_ID", "Expiration": "EXPIRATION_DATE", "RoleArn": "TASK_ROLE_ARN", "SecretAccessKey": "SECRET_ACCESS_KEY", "Token": "SECURITY_TOKEN_STRING" }
Anmerkung

Die standardmäßige Ablaufzeit für die generierten Anmeldeinformationen der IAM-Rolle beträgt 6 Stunden.

Wenn Ihre Container-Instance mindestens Version 1.11.0 des Container-Agenten und eine unterstützte Version der AWS-CLI oder -SDKs verwendet, erkennt der SDK-Client, dass die Variable AWS_CONTAINER_CREDENTIALS_RELATIVE_URI verfügbar ist, und verwendet die angegebenen Anmeldeinformationen, um Aufrufe an die AWS-APIs zu senden. Weitere Informationen finden Sie unter Aktivierung von Aufgaben-IAM-Rollen auf Ihren Container-Instances und Verwendung eines unterstützten AWS-SDK.

Bei jeder Verwendung des Anmeldeinformationsanbieters wird die Anfrage lokal in der Host-Container-Instance unter /var/log/ecs/audit.log.YYYY-MM-DD-HH. Weitere Informationen finden Sie unter Prüfprotokoll für IAM-Rollen für Aufgaben-Anmeldeinformationen.

Vorteile der Verwendung von IAM-Rollen für Aufgaben

  • 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.

  • Auditierbarkeit: Die Zugriffs- und Ereignisprotokollierung ist über CloudTrail verfügbar, um eine nachträgliche Auditierung zu ermöglichen. Die Aufgaben-Anmeldeinformationen haben den Kontext taskArn, der der Sitzung zugeordnet ist, daher zeigen die CloudTrail-Protokolle an, welche Aufgabe welche Rolle verwendet.

Aktivierung von Aufgaben-IAM-Rollen auf Ihren Container-Instances

Ihre Amazon ECS-Container-Instances setzen mindestens Version 1.11.0 des Container-Agenten voraus, um Aufgaben-IAM-Rollen zu aktivieren. Wir empfehlen jedoch, die aktuelle Version des Container-Agenten zu verwenden. Informationen zum Überprüfen Ihrer Agenten-Version und zum Aktualisieren auf die neueste Version finden Sie unter Aktualisieren des Amazon ECS-Container-Agenten. Wenn Sie das Amazon ECS-optimized AMI verwenden, benötigt Ihre Instance zumindest 1.11.0-1 des ecs-init-Pakets. Wenn Ihre Container-Instances mit Version 2016.03.e oder höher gestartet wurden, enthalten sie die erforderlichen Versionen des Container-Agenten und von ecs-init. Weitere Informationen finden Sie unter Amazon ECS-optimized AMIs.

Wenn Sie nicht das Amazon ECS-optimized AMI für Ihre Container-Instances verwenden, fügen Sie die Option --net=host zu Ihrem docker run-Befehl hinzu, der den Agenten und die entsprechenden Agent-Konfigurationsvariablen für Ihre gewünschte Konfiguration startet (weitere Informationen finden Sie unter Amazon ECS-Container-Agent-Konfiguration):

ECS_ENABLE_TASK_IAM_ROLE=true

Aktiviert IAM-Rollen für Aufgaben für Container mit den Netzwerkmodi bridge und default.

ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true

Aktiviert IAM-Rollen für Aufgaben für Container mit dem Netzwerkmodus host. 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 Manuelle Aktualisierung des Amazon ECS-Containeragenten (für Nicht-Amazon ECS-Optimized AMIs). Sie müssen auch die folgenden Netzwerk-Befehle 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.

Erstellen einer IAM-Rolle und -Richtlinie für Ihre Aufgaben

Sie müssen eine IAM-Richtlinie für Ihre Aufgaben erstellen, in der die Berechtigungen angegeben sind, die die Container in den Aufgaben haben sollen. Es gibt verschiedene Möglichkeiten, eine neue IAM-Berechtigungsrichtlinie zu erstellen. Sie können eine komplette, von AWS verwaltete Richtlinie kopieren, die bereits einige der gewünschten Bedingungen erfüllt, und sie dann an Ihre spezifischen Anforderungen anpassen. Weitere Informationen finden Sie unter Erstellen von IAM-Richtlinien im IAM-Benutzerhandbuch.

Sie müssen auch zuerst eine Rolle für Ihre Aufgaben erstellen, bevor Sie sie in Ihren Aufgabendefinitionen angeben können. Sie können die Rolle mithilfe der Servicerolle Amazon Elastic Container Service Task Role in der IAM-Konsole erstellen. Anschließend können Sie an die Rolle Ihre spezifische IAM-Richtlinie anfügen, die den Containern in Ihrer Aufgabe die gewünschten Berechtigungen gibt. 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.

Die Vertrauensbeziehung der Amazon ECS-Aufgabenrolle wird unten gezeigt.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

Erstellen einer IAM-Richtlinie für Ihre Aufgaben

In diesem Beispiel erstellen wir eine Richtlinie, um schreibgeschützten Zugriff auf einen Amazon S3-Bucket zu erlauben. Sie können Datenbank-Anmeldeinformationen oder andere Verschlüsselungen in diesem Bucket speichern und die Container in Ihrer Aufgabe können die Anmeldeinformationen aus dem Bucket auslesen und in Ihrer Anwendung laden.

  1. Öffnen Sie die IAM-Konsole unter https://console.aws.amazon.com/iam/.

  2. Wählen Sie im Navigationsbereich Policies (Richtlinien) und dann Create policy (Richtlinie erstellen) aus.

  3. Befolgen Sie die Schritte auf einer der folgenden Registerkarten zur Verwendung des visuellen oder JSON-Editors.

Using the visual editor
  1. Wählen Sie unter Service die Option S3 aus.

  2. Erweitern Sie für Actions (Aktionen) die Option Read (Lesen) und wählen Sie GetObject aus.

  3. Wählen Sie unter Resources (Ressourcen) die Option Add ARN (ARN hinzufügen) aus, geben Sie den vollständigen Amazon-Ressourcennamen (ARN) des Amazon S3-Buckets ein und wählen Sie dann Review policy (Richtlinie prüfen) aus.

  4. Geben Sie auf der Seite Review policy (Richtlinie prüfen) einen eindeutigen Namen wie AmazonECSTaskS3BucketPolicy ein.

  5. Wählen Sie Create policy (Richtlinie erstellen) aus, um den Vorgang abzuschließen.

Using the JSON editor
  1. Fügen Sie im Feld Policy Document die anzuwendende Richtlinie für Ihre Aufgaben ein. Das folgende Beispiel erlaubt Berechtigungen für den Amazon S3-Bucket my-task-secrets-bucket. Sie können das Richtliniendokument Ihren individuellen Anforderungen anpassen.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::my-task-secrets-bucket/*" ] } ] }
  2. Klicken Sie auf Create Policy.

Erstellen einer IAM-Rolle für Ihre Aufgaben

  1. Öffnen Sie die IAM-Konsole unter https://console.aws.amazon.com/iam/.

  2. Wählen Sie im Navigationsbereich Roles und Create Role aus.

  3. Wählen Sie im Abschnitt Select type of trusted entity (Typ der vertrauenswürdigen Entity auswählen) die Option AWS service (AWS-Service).

  4. Wählen Sie für Choose the service that will use this role (Service auswählen, der diese Rolle verwendet) die Option Elastic Container Service aus.

  5. Wählen Sie für Select your use case (Anwendungsfall auswählen) die Option Elastic Container Service Task (Elastic Container Service-Aufgabe) aus und klicken Sie dann auf Next: Permissions (Weiter: Berechtigungen).

  6. Wählen Sie unter Attach permissions policy (Berechtigungsrichtlinie anfügen) die Richtlinie aus, die Sie für die Aufgaben verwenden möchten (in diesem Beispiel AmazonECSTaskS3BucketPolicy). Wählen Sie dann Next: Tags (Weiter: Tags) aus.

  7. Geben Sie unter Add tags (optional) (Tags hinzufügen (optional)) alle Metadaten-Tags ein, die Sie der IAM-Rolle zuordnen möchten. Wählen Sie dann Next: Review (Weiter: Überprüfen) aus.

  8. Geben Sie unter Role name (Rollenname) einen Namen für Ihre Rolle ein. Geben Sie für dieses Beispiel die Rolle AmazonECSTaskS3BucketRole ein und wählen Sie dann Create role (Rolle erstellen) aus.

Verwendung eines unterstützten AWS-SDK

Die Unterstützung für IAM-Rollen für Aufgaben wurde am 13. Juli 2016 in die AWS-SDKs aufgenommen. Die Container in Ihren Aufgaben müssen eine AWS SDK-Version verwenden, die an oder nach diesem Datum erstellt wurde. AWS-SDKs, die in Linux-Verteilungspaketmanagern enthalten sind, sind möglicherweise zu alt, um diese Funktion unterstützen.

Um sicherzustellen, dass Sie ein unterstütztes SDK verwenden, befolgen Sie die Installationsanweisungen für Ihr bevorzugtes SDK unter Tools für Amazon Web Services, wenn Sie Ihre Container erstellen, um die neueste Version zu erhalten.

Angeben einer IAM-Rolle für Ihre Aufgaben

Nachdem Sie eine Rolle erstellt und eine Richtlinie an die Rolle angefügt haben, können Sie Aufgaben ausführen lassen, die die Rolle annehmen. Zu diesem Zweck haben Sie mehrere Möglichkeiten:

  • Geben Sie eine IAM-Rolle für Ihre Aufgaben in der Aufgabendefinition an. Sie können eine neue Aufgabendefinition oder eine neue Bearbeitung einer bestehenden Aufgabendefinition erstellen und die Rolle angeben, die Sie zuvor angelegt haben. Wenn Sie zum Erstellen der Aufgabendefinition die Konsole verwenden, wählen Sie Ihre IAM-Rolle im Feld Task Role (Aufgabenrolle) aus. Wenn Sie die AWS CLI oder SDKs verwenden, geben Sie Ihren Aufgabenrollen-ARN mit dem Parameter taskRoleArn an. Weitere Informationen finden Sie unter Erstellen einer Aufgabendefinition.

    Anmerkung

    Diese Option ist erforderlich, wenn Sie IAM-Aufgabenrollen in einem Amazon ECS-Service verwenden wollen.

  • Geben Sie beim Ausführen einer Aufgabe einen IAM-Aufgabenrollen-Override an. Sie können beim Ausführen einer Aufgabe einen IAM-Aufgabenrollen-Override angeben. Wenn Sie zum Ausführen Ihrer Aufgabe die Konsole verwenden, wählen Sie Advanced Options (Erweiterte Optionen) und anschließend Ihre IAM-Rolle im Feld Task Role (Aufgabenrolle) aus. Wenn Sie die AWS CLI oder SDKs verwenden, geben Sie Ihren Aufgabenrollen-ARN mit dem Parameter taskRoleArn im JSON-Objekt overrides an. Weitere Informationen finden Sie unter Ausführen von Aufgaben.

Anmerkung

Zusätzlich zu den standardmäßigen Amazon ECS-Berechtigungen, die zum Ausführen von Aufgaben und Services erforderlich sind, benötigen IAM-Benutzer auch iam:PassRole-Berechtigungen, um IAM-Rollen für Aufgaben verwenden zu können.