IAM-Rolle für die Amazon ECS-Aufgabenausführung - Amazon Elastic Container Service

IAM-Rolle für die Amazon ECS-Aufgabenausführung

Die Aufgabenausführungsrolle erteilt dem Amazon ECS-Container- und Fargate-Agenten die Berechtigung, AWS-API-Aufrufe in Ihrem Namen durchzuführen. Die IAM-Rolle für die Aufgabenausführung ist je nach den Anforderungen Ihrer Aufgabe erforderlich. Sie können mehrere Aufgabenausführungsrollen für verschiedene Zwecke und Dienste haben, die Ihrem Konto zugeordnet sind.

Im Folgenden sind häufige Anwendungsfälle für eine IAM-Rolle für die Aufgabenausführung aufgeführt:

Anmerkung

Die Aufgabenausführungsrolle wird von Amazon ECS-Container-Agent Version 1.16.0 und höher unterstützt.

Amazon ECS bietet die verwaltete Richtlinie AmazonECSTaskExecutionRolePolicy. Diese enthält die Berechtigungen, die für die oben beschriebenen häufigen Anwendungsfälle benötigt werden. Es kann erforderlich sein, für spezielle Anwendungsfälle, die unten beschrieben werden, eingebundene Richtlinien zu Ihrer Aufgabenausführungsrolle hinzuzufügen.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" } ] }

Die Amazon ECS-Aufgabenausführungsrolle kann für Sie in der Amazon ECS-Konsole erstellt werden. Allerdings sollten Sie die verwaltete IAM-Richtlinie für Aufgaben manuell anfügen, damit Amazon ECS Berechtigungen für zukünftige Funktionen und Erweiterungen bei deren Einführung hinzufügen kann. Mithilfe des folgenden Verfahrens können Sie überprüfen, ob Ihr Konto die Amazon ECS-Ausgabenausführungsrolle bereits hat, und die verwaltete IAM-Richtlinie erforderlichenfalls anfügen.

So prüfen Sie ecsTaskExecutionRole in der IAM-Konsole

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

  2. Wählen Sie im Navigationsbereich Roles aus.

  3. Suchen Sie in der Liste der Rollen nach ecsTaskExecutionRole. Wenn die Rolle nicht vorhanden ist, beachten Sie die Informationen im Abschnitt Erstellen der IAM-Aufgabenausführungsrolle. Wenn die Rolle vorhanden ist, wählen Sie die Rolle aus, um die zugeordneten Richtlinien zu sehen.

  4. Überprüfen Sie auf der Registerkarte Permissions (Berechtigungen), ob der Rolle die verwaltete Richtlinie AmazonECSTaskExecutionRolePolicy angefügt ist. Wenn die Richtlinie angefügt ist, ist Ihre Amazon ECS-Aufgabenausführungsrolle korrekt konfiguriert. Andernfalls führen Sie die folgenden Teilschritte aus, um die Richtlinie zuzuweisen.

    1. Wählen Sie Attach Policies (Richtlinien hinzufügen) aus.

    2. Um die verfügbaren Richtlinien für das Anfügen einzugrenzen, geben Sie für Filter AmazonECSTaskExecutionRolePolicy ein.

    3. Aktivieren Sie das Kontrollkästchen links neben der Richtlinie AmazonECSTaskExecutionRolePolicy und wählen Sie Attach policy.

  5. Wählen Sie auf der Registerkarte Trust Relationships (Vertrauensbeziehungen) Edit Trust Relationship (Vertrauensbeziehung bearbeiten) aus.

  6. Überprüfen Sie, dass die Vertrauensstellung die folgende Richtlinie enthält. Wenn die Vertrauensstellung mit der unten angegebenen Richtlinie übereinstimmt, wählen Sie Cancel. Andernfalls kopieren Sie die Richtlinie in das Fenster Policy Document und wählen Update Trust Policy aus.

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

Erstellen der IAM-Aufgabenausführungsrolle

Wenn Ihr Konto noch nicht über eine Aufgabenausführungsrolle verfügt, führen Sie die folgenden Schritte aus, um die Rolle zu erstellen.

So erstellen Sie eine IAM-Aufgabenausführungsrolle (AWS Management Console):

  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 Entität auswählen) AWS-Service und Elastic Container Service aus.

  4. 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).

  5. Suchen Sie im Bereich Attach permissions policy (Berechtigungsrichtlinie anfügen) nach AmazonECSTaskExecutionRolePolicy. Wählen Sie die Richtlinie aus und danach Next: Tags (Weiter: Tags).

  6. Geben Sie für Tags hinzufügen (optional) alle benutzerdefinierten Tags an, die mit der Richtlinie verknüpft werden sollen, und wählen SieWeiter: Prüfen.

  7. Geben Sie unter Role Name (Rollenname) den Namen ecsTaskExecutionRole ein und wählen Sie Create role (Rolle erstellen) aus.

So erstellen Sie eine IAM-Aufgabenausführungsrolle (AWS CLI):

  1. Erstellen Sie eine Datei namens ecs-tasks-trust-policy.json, die die Vertrauensrichtlinie enthält, die für die IAM-Rolle verwendet werden soll. Die Datei sollte Folgendes enthalten:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. Erstellen Sie eine IAM-Rolle namens ecsTaskExecutionRole, die im vorherigen Schritt erstellte Vertrauensrichtlinie verwendet.

    aws iam create-role \ --role-name ecsTaskExecutionRole \ --assume-role-policy-document file://ecs-tasks-trust-policy.json
  3. Hängen Sie die von AWS verwaltete Richtlinie AmazonECSTaskExecutionRolePolicy an die Rolle ecsTaskExecutionRole an. Diese Richtlinie gewährt

    aws iam attach-role-policy \ --role-name ecsTaskExecutionRole \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy

Erforderliche IAM-Berechtigungen für die private Registrierungsauthentifizierung

Die Amazon ECS-Aufgabenausführungsrolle ist erforderlich, um diese Funktion der privaten Registrierungsauthentifizierung verwenden zu können. Auf diese Weise kann der Container-Agent das Container-Image abrufen. Weitere Informationen finden Sie unter Private Registrierungsauthentifizierung für Aufgaben.

Um Zugriff auf Secrets zu gewähren, die Sie erstellen, müssen Sie die folgenden Berechtigungen manuell als eingebundene Richtlinie zur Aufgabendefinitionsrolle hinzufügen. Weitere Informationen finden Sie unter Hinzufügen und Entfernen von IAM-Richtlinien.

  • secretsmanager:GetSecretValue

  • kms:Decrypt: Nur erforderlich, wenn Ihr Schlüssel einen benutzerdefinierten KMS-Schlüssel verwendet und nicht den Standard-Schlüssel. Der ARN für Ihren benutzerdefinierten Schlüssel sollte als Ressource hinzugefügt werden.

Ein Beispiel für eine eingebundene Richtlinie, die die Berechtigungen hinzufügt, wird unten angezeigt.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:<region>:<aws_account_id>:secret:secret_name", "arn:aws:kms:<region>:<aws_account_id>:key/key_id" ] } ] }

Erforderliche IAM-Berechtigungen für Amazon ECS-Secrets

Zum Verwenden der Funktion der Amazon ECS-Secrets benötigen Sie die Amazon ECS-Aufgabenausführungsrolle und müssen in Ihrer Aufgabendefinition auf sie verweisen. Dies ermöglicht es dem Containeragenten, die notwendigen AWS Systems Manager- oder Secrets Manager-Ressourcen abzurufen. Weitere Informationen finden Sie unter Angabe sensibler Daten.

Um Zugriff auf die von Ihnen erstellten AWS Systems Manager Parameter Store-Parameter zu erhalten, fügen Sie der Aufgabenausführungsrolle manuell die folgenden Berechtigungen als Inline Richtlinie hinzu. Weitere Informationen finden Sie unter Hinzufügen und Entfernen von IAM-Richtlinien.

  • ssm:GetParameters: Erforderlich, wenn in einer Aufgabendefinition auf einen Parameter Store-Parameter von Systems Manager verwiesen wird.

  • secretsmanager:GetSecretValue: Erforderlich, wenn Sie direkt auf ein Secrets Manager Geheimnis verweisen oder wenn der Parameter Systems Manager Parameterspeicher in einer Aufgabendefinition auf ein Secrets Manager-Secret verweist.

  • kms:Decrypt: Nur erforderlich, wenn Ihr Secret einen benutzerdefinierten KMS-Schlüssel verwendet und nicht den Standardschlüssel. Der ARN für Ihren benutzerdefinierten Schlüssel sollte als Ressource hinzugefügt werden.

Das folgende Beispiel einer Inline-Richtlinie fügt die erforderlichen Berechtigungen hinzu:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "kms:Decrypt" ], "Resource": [ "arn:aws:secretsmanager:<region>:<aws_account_id>:secret:<secret_name>", "arn:aws:kms:<region>:<aws_account_id>:key/<key_id>" ] } ] }

Optionale IAM-Berechtigungen für Fargate-Aufgaben, die Amazon ECR-Images über Schnittstellen-Endpunkte abrufen

Beim Starten von Aufgaben, die den Starttyp Fargate verwenden und Images aus Amazon ECR abrufen, wenn Amazon ECR für die Verwendung eines Schnittstellen-VPC-Endpunkts konfiguriert ist, können Sie den Aufgabenzugriff auf eine bestimmte VPC oder einen bestimmten VPC-Endpunkt beschränken. Dazu erstellen Sie eine Aufgabenausführungsrolle für die zu verwendenden Aufgaben, die IAM-Bedingungsschlüssel nutzen.

Verwenden Sie die folgenden globalen IAM-Bedingungsschlüssel zum Einschränken des Zugriffs auf eine bestimmte VPC oder einen bestimmten VPC-Endpunkt. Weitere Informationen finden Sie unter Globale AWS-Bedingungskontextschlüssel.

  • aws:SourceVpc: Beschränkt den Zugriff auf eine bestimmte VPC.

  • aws:SourceVpce: Beschränkt den Zugriff auf einen bestimmten VPC-Endpunkt.

Die folgenden Richtlinie einer Aufgabenausführungsrolle stellt ein Beispiel für das Hinzufügen von Bedingungsschlüsseln bereit:

Wichtig

Auf die API-Aktion ecr:GetAuthorizationToken können nicht die Bedingungsschlüssel aws:sourceVpc oder aws:sourceVpce angewendet werden, da der API-Aufruf GetAuthorizationToken über die Elastic-Network-Schnittstelle geleitet wird, die zu AWS-Fargate gehört und nicht über die Elastic-Network-Schnittstelle der Aufgabe.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": "*", "Condition": { "StringEquals": { "aws:sourceVpce": "vpce-xxxxxx", "aws:sourceVpc": "vpc-xxxxx" } } } ] }