IAM-Rollen für Aufgaben - Amazon ECS

IAM-Rollen für 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.

Wenn Ihre containerisierten Anwendungen AWS-APIs aufrufen müssen, müssen sie ihre AWS-API-Anforderungen mit AWS-Anmeldeinformationen signieren. Eine Aufgaben-IAM-Rolle bietet eine Strategie zum Verwalten von Anmeldeinformationen für Ihre zu verwendenden Anwendungen, ähnlich wie ein Amazon-EC2-Instance-Profil Anmeldeinformationen an Amazon-EC2-Instances bereitstellt. Anstatt Ihre AWS-Anmeldeinformationen zu erstellen und sie auf die Container zu verteilen oder die Rolle der Amazon-EC2-Instance zu verwenden, können Sie eine IAM-Rolle einer Amazon-ECS-Aufgabendefinition oder einem RunTask-API-Vorgang zuordnen. Ihre Container können dann das AWS-SDK oder die AWS CLI verwenden, um API-Anforderungen an autorisierte AWS-Services zu stellen.

Im Folgenden werden die Vorteile der Verwendung von IAM-Rollen mit Ihren Aufgaben erläutert.

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

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-Instance oder externen Instance, auf der sie ausgeführt werden.

Sie können eine Aufgaben-IAM-Rolle in Ihren Aufgabendefinitionen angeben oder eine taskRoleArn-Überschreibung verwenden, wenn Sie eine Aufgabe manuell mit dem RunTask-API-Vorgang 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.

Innerhalb des Containers können Sie den Anmeldeinformations-Endpunkt 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" }

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

Wenn Sie eine IAM-Richtlinie für Ihre Aufgaben erstellen, sollte die Richtlinie die Berechtigungen enthalten, die von den Containern in Ihren Aufgaben übernommen werden sollen. Sie können eine vorhandene AWS-verwaltete Richtlinie als Beispiel verwenden oder 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

Beim Erstellen Ihrer Aufgaben-IAM-Rolle wird empfohlen, dass Sie die aws:SourceAccount- oder aws:SourceArn-Bedingungsschlüssel entweder in der Vertrauensbeziehung oder der IAM-Richtlinie verwenden, die der Rolle zugeordnet ist, um das Sicherheitsproblem des Confused Deputy zu vermeiden. Diese Bedingungsschlüssel können in der Vertrauensbeziehung oder in der IAM-Richtlinie, die der Rolle zugeordnet ist, angegeben werden. Weitere Informationen zum Confused-Deputy-Problem und zum Schutz Ihres AWS-Kontos finden Sie unter Das Confused-Deputy-Problem im IAM-Benutzerhandbuch.

Sobald die IAM-Richtlinie erstellt wurde, können Sie eine IAM-Rolle erstellen, die die Richtlinie enthält, auf die 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 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.

Weitere Informationen zum Service-Endpunkt für Ihre Region finden Sie unter Service-Endpunkte im Referenzhandbuch für Amazon Web Services.

Die Aufgaben-IAM-Rolle muss über eine Vertrauensrichtlinie verfügen, die den ecs-tasks.amazonaws.com-Service angibt. Die sts:AssumeRole-Berechtigung erlaubt es Ihren Aufgaben, eine IAM-Rolle anzunehmen, die sich von der unterscheidet, die die Amazon-EC2-Instance verwendet. Auf diese Weise erbt Ihre Aufgabe nicht die der Amazon-EC2-Instance zugeordnete Rolle. Es wird empfohlen, dass Sie die aws:SourceAccount- oder aws:SourceArn-Bedingungsschlüssel verwenden und die Berechtigungen weiter einschränken, um das Sicherheitsproblem des Confused Deputy zu vermeiden. Diese Bedingungsschlüssel können in der Vertrauensbeziehung oder in der IAM-Richtlinie, die der Rolle zugeordnet ist, angegeben werden. Weitere Informationen zum Confused-Deputy-Problem und zum Schutz Ihres AWS-Kontos finden Sie unter Das Confused-Deputy-Problem im IAM-Benutzerhandbuch.

Im Folgenden finden Sie ein Beispiel für eine Vertrauensrichtlinie. Sie sollten die Regions-ID ersetzen und die AWS-Kontonummer angeben, die Sie beim Launchen 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" } } } ] }

Erstellen einer IAM-Richtlinie für Ihre Aufgaben (AWS Management Console)

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 für Ressources (Ressourcen) Add ARN (ARN hinzufügen) und geben Sie den vollständigen Amazon-Ressourcennamen (ARN) Ihres Amazon-S3-Buckets ein.

  4. (Optional) Wählen Sie für Request conditions (Anforderungs-Bedingungen) Add condition (Bedingung hinzufügen). Dies wird empfohlen, um das Sicherheitsproblem des Confused Deputy zu verhindern. Weitere Informationen zum Confused-Deputy-Problem und zum Schutz Ihres AWS-Kontos finden Sie unter Das Confused-Deputy-Problem im IAM-Benutzerhandbuch.

    1. Wählen Sie für Condition key (Bedingungsschlüssel) entweder aws:SourceAccount oder aws:SourceArn aus. Weitere Informationen über diese globale Bedingungsschlüssel finden Sie unter Globale AWS-Bedingungskontextschlüssel im IAM-Benutzerhandbuch.

    2. Wählen Sie für Operator StringEquals aus, wenn Sie den Bedingungsschlüssel aws:SourceAccount angegeben haben, oder ArnLike, wenn Sie den Bedingungsschlüssel aws:SourceArn angegeben haben.

    3. Geben Sie für Value (Wert) Ihre AWS-Konto-ID an, wenn Sie den Bedingungsschlüssel aws:SourceAccount angegeben haben, oder den Amazon-Ressourcennamen (ARN) Ihrer Amazon-ECS-Aufgabe, wenn Sie den Bedingungsschlüssel aws:SourceArn angegeben haben. Sie können Platzhalter verwenden, zum Beispiel aws:ecs:*:accountId:*, die für alle Aufgaben in Ihrem Konto funktionieren.

    4. Wählen Sie Add (Hinzufügen) aus, um den Bedingungsschlüssel zu speichern. Wiederholen Sie diese Schritte für jeden Bedingungsschlüssel, den Sie der Richtlinie hinzufügen möchten.

  5. Wählen Sie Next: Tags (Weiter: Tags) und fügen Sie der Richtlinie alle Ressourcen-Tags hinzu, um sie zu organisieren, und wählen Sie dann Next: Review (Weiter: Überprüfen).

  6. Geben Sie auf der Seite Review policy (Richtlinie prüfen) für Name einen eindeutigen Namen wie AmazonECSTaskS3BucketPolicy ein. Sie können auch eine optionale Beschreibung der Richtlinie angeben.

  7. Wenn die Richtlinie abgeschlossen ist, wählen Sie zuletzt Create policy (Richtlinie erstellen) aus.

Using the JSON editor
  1. Fügen Sie im Feld des Richtlinien-Dokuments die anzuwendende Richtlinie für Ihre Aufgaben ein. Das folgende Beispiel erlaubt Berechtigungen für den Amazon S3-Bucket my-task-secrets-bucket. Es enthält eine Bedingungsanweisung, mit der Sie entweder eine bestimmte Aufgabe unter Verwendung des Amazon-Ressourcennamens (ARN) oder einer bestimmten Konto-ID angeben können. Dies bietet eine Möglichkeit, die Berechtigung für zusätzliche Sicherheit weiter einzuschränken. Dies wird empfohlen, um das Sicherheitsproblem des Confused Deputy zu verhindern. Weitere Informationen zum Confused-Deputy-Problem und zum Schutz Ihres AWS-Kontos finden Sie unter Das Confused-Deputy-Problem im IAM-Benutzerhandbuch.

    Nachfolgend finden Sie ein Beispiel für eine Berechtigungsrichtlinie. Sie können die Richtlinie Ihren individuellen Anforderungen anpassen. Sie sollten die Regions-ID ersetzen und die AWS-Kontonummer angeben, die Sie beim Launchen von Aufgaben verwenden.

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObject" ], "Resource":[ "arn:aws:s3:::my-task-secrets-bucket/*" ], "Condition":{ "ArnLike":{ "aws:SourceArn":"arn:aws:ecs:us-west-2:111122223333:*" }, "StringEquals":{ "aws:SourceAccount":"111122223333" } } } ] }
  2. Wählen Sie Next: Tags (Weiter: Tags) und fügen Sie der Richtlinie alle Ressourcen-Tags hinzu, um sie zu organisieren, und wählen Sie dann Next: Review (Weiter: Überprüfen).

  3. Geben Sie auf der Seite Review policy (Richtlinie prüfen) für Name einen eindeutigen Namen wie AmazonECSTaskS3BucketPolicy ein. Sie können auch eine optionale Beschreibung der Richtlinie angeben.

  4. Wenn die Richtlinie abgeschlossen ist, wählen Sie zuletzt Create policy (Richtlinie erstellen) aus.

Erstellen einer IAM-Rolle für Ihre Aufgaben (AWS Management Console)

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

  2. Wählen Sie im Navigationsbereich Roles (Rollen) und Create Role (Rolle erstellen) aus.

  3. Wählen Sie im Abschnitt Select trusted entity (Vertrauenswürdige Entität auswählen) AWS-Service aus.

  4. Wählen Sie für Use case (Anwendungsfall) über das Dropdown-Menü Elastic Container Service und dann den Anwendungsfall Elastic-Container-Service-Aufgabe aus und wählen Sie dann Next (Weiter).

  5. Suchen Sie für Add permissions (Berechtigungen hinzufügen) nach der Richtlinie, die Sie für Ihre Aufgaben verwenden möchten, und wählen Sie sie aus (in diesem Beispiel AmazonECSTaskS3BucketPolicy), und wählen Sie dann Next (Weiter).

  6. Gehen Sie bei Step 3: Name, review, and create (Schritt 3: Benennen, Überprüfen und Erstellen) wie folgt vor:

    1. Geben Sie unter Role name (Rollenname) einen Namen für Ihre Rolle ein. Geben Sie für dieses Beispiel AmazonECSTaskS3BucketRole ein, um die Rolle zu benennen.

    2. (Optional) Geben Sie für Description (Beschreibung) eine Beschreibung für diese IAM-Rolle an.

    3. Überprüfen Sie die vertrauenswürdige juristische Stelle und Berechtigungs-Richtlinie für die Rolle.

    4. Geben Sie unter Add tags (optional) (Tags hinzufügen (optional)) alle Metadaten-Tags ein, die Sie der IAM-Rolle zuordnen möchten, und wählen Sie dann Create role (Rolle erstellen).

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 klassische Konsole verwenden, wählen Sie Ihre IAM-Rolle im Feld Task Role (Aufgabenrolle) aus. Wenn Sie die AWS CLI oder SDKs verwenden, geben Sie den Amazon-Ressourcennamen (ARN) Ihrer Aufgabenrolle mit dem Parameter taskRoleArn an. Weitere Informationen finden Sie unter Erstellen einer Aufgabendefinition mit der neuen Konsole.

    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 klassische 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 einer eigenständigen Aufgabe.

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.