Bewährte Methoden für IAM-Rollen in Amazon ECS - Amazon Elastic Container Service

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.

Bewährte Methoden für IAM-Rollen in Amazon ECS

Die Rollen, die Amazon ECS benötigt, hängen vom Starttyp der Aufgabendefinition und den von Ihnen verwendeten Funktionen ab. Wir empfehlen, separate Rollen in der Tabelle zu erstellen, anstatt Rollen gemeinsam zu nutzen.

Rolle Definition Bei Bedarf Weitere Informationen
Aufgabenausführungsrolle Diese Rolle ermöglicht es Amazon ECS, andere AWS Dienste in Ihrem Namen zu nutzen.

Ihre Aufgabe wird auf AWS Fargateoder auf externen Instances gehostet und:

  • ruft ein Container-Image aus einem privaten Amazon ECR-Repository ab.

  • ruft ein Container-Image aus einem privaten Amazon ECR-Repository in einem anderen Konto als dem Konto ab, das die Aufgabe ausführt.

  • sendet CloudWatch Container-Protokolle mithilfe des Protokolltreibers an awslogs Logs.

Ihre Aufgabe wird entweder auf Amazon-Instances AWS Fargate oder auf EC2 Amazon-Instances gehostet und:

  • verwendet die private Registrierungsauthentifizierung.

  • verwendet Runtime Monitoring.

  • Die Aufgabendefinition verweist mithilfe von Secrets Manager Manager-Geheimnissen oder AWS Systems Manager Parameter Store-Parametern auf sensible Daten.

IAM-Rolle für die Amazon-ECS-Aufgabenausführung
Aufgabenrolle Diese Rolle ermöglicht es Ihrem Anwendungscode (auf dem Container), andere AWS Dienste zu verwenden. Ihre Anwendung greift auf andere AWS Dienste wie Amazon S3 zu. IAM-Rolle für Amazon ECS-Aufgaben
Rolle für Container-Instances Diese Rolle ermöglicht es Ihren EC2 Instances oder externen Instances, sich beim Cluster zu registrieren. Ihre Aufgabe wird auf EC2 Amazon-Instances oder einer externen Instance gehostet. IAM-Rolle für Amazon-ECS-Container-Instance
Amazon ECS Anywhere Anywhere-Rolle Diese Rolle ermöglicht Ihren externen Instances den Zugriff AWS APIs. Ihre Aufgabe wird auf externen Instanzen gehostet. IAM-Rolle in Amazon ECS Anywhere
Amazon CodeDeploy ECS-Rolle Diese Rolle ermöglicht CodeDeploy es, Aktualisierungen an Ihren Diensten vorzunehmen. Sie verwenden den Bereitstellungstyp CodeDeploy Blau/Grün, um Dienste bereitzustellen. Amazon ECS CodeDeploy IAM-Rolle
Amazon EventBridge ECS-Rolle Diese Rolle ermöglicht EventBridge es, Aktualisierungen an Ihren Diensten vorzunehmen. Sie verwenden die EventBridge Regeln und Ziele, um Ihre Aufgaben zu planen. Amazon ECS EventBridge IAM-Rolle
Rolle in der Amazon ECS-Infrastruktur Diese Rolle ermöglicht es Amazon ECS, Infrastrukturressourcen in Ihren Clustern zu verwalten.
  • Sie möchten Amazon EBS-Volumes an Ihr Fargate anhängen oder Amazon ECS-Aufgaben EC2 starten. Die Infrastrukturrolle ermöglicht es Amazon ECS, Amazon EBS-Volumes für Ihre Aufgaben zu verwalten.

  • Sie möchten Transport Layer Security (TLS) verwenden, um den Verkehr zwischen Ihren Amazon ECS Service Connect-Services zu verschlüsseln.

  • Sie möchten VPC Lattice-Zielgruppen erstellen.

IAM-Rolle für die Amazon ECS-Infrastruktur

Aufgabenrolle

Wir empfehlen Ihnen, eine Aufgabenrolle zuzuweisen. Ihre Rolle kann von der Rolle der EC2 Amazon-Instance unterschieden werden, auf der sie ausgeführt wird. Die Zuweisung einer Rolle für jede Aufgabe entspricht dem Prinzip des Zugriffs mit der geringsten Berechtigung und ermöglicht eine differenzierte Kontrolle über Aktionen und Ressourcen.

Wenn Sie einer Aufgabendefinition eine Aufgabenrolle hinzufügen, erstellt der Amazon-ECS-Container-Agent automatisch ein Token mit einer eindeutigen Anmeldeinformations-ID (z. B. 12345678-90ab-cdef-1234-567890abcdef) für die Aufgabe. Dieses Token und die Rollen-Anmeldeinformationen werden dann dem internen Cache des Agenten hinzugefügt. Der Agent füllt die Umgebungsvariable AWS_CONTAINER_CREDENTIALS_RELATIVE_URI im Container mit der URI der Anmeldeinformations-ID auf (z. B. /v2/credentials/12345678-90ab-cdef-1234-567890abcdef).

Sie können die temporären Rollenanmeldedaten manuell aus einem Container abrufen, indem Sie die Umgebungsvariable an die IP-Adresse des Amazon-ECS-Container-Agenten anhängen und den curl-Befehl für die resultierende Zeichenfolge ausführen.

curl 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI

Die erwartete Ausgabe sieht wie folgt aus:

{ "RoleArn": "arn:aws:iam::123456789012:role/SSMTaskRole-SSMFargateTaskIAMRole-DASWWSF2WGD6", "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "Token": "IQoJb3JpZ2luX2VjEEM/Example==", "Expiration": "2021-01-16T00:51:53Z" }

Neuere Versionen von rufen diese Anmeldeinformationen bei AWS API-Aufrufen AWS SDKs automatisch aus der AWS_CONTAINER_CREDENTIALS_RELATIVE_URI Umgebungsvariablen ab. Informationen zum Erneuern von Anmeldeinformationen finden Sie unter Erneuern von AWS Anmeldeinformationen auf RePost.

Die Ausgabe enthält ein Zugriffsschlüsselpaar, das aus einer geheimen Zugriffsschlüssel-ID und einem geheimen Schlüssel besteht, das Ihre Anwendung für den Zugriff auf Ressourcen verwendet. AWS Es enthält auch ein Token, mit dem überprüft AWS wird, ob die Anmeldeinformationen gültig sind. Standardmäßig sind Anmeldeinformationen, die Aufgaben mithilfe von Aufgabenrollen zugewiesen wurden, sechs Stunden lang gültig. Danach werden sie automatisch vom Amazon-ECS-Container-Agenten rotiert.

Aufgabenausführungsrolle

Die Rolle „Aufgabenausführung“ wird verwendet, um dem Amazon ECS-Container-Agenten die Erlaubnis zu erteilen, bestimmte AWS API-Aktionen in Ihrem Namen aufzurufen. Wenn Sie beispielsweise verwenden AWS Fargate, benötigt Fargate eine IAM-Rolle, die es ermöglicht, Bilder aus Amazon ECR abzurufen und Protokolle in Logs zu schreiben. CloudWatch Eine IAM-Rolle ist auch erforderlich, wenn eine Aufgabe auf ein Geheimnis verweist, das in gespeichert ist AWS Secrets Manager, z. B. ein Image-Pull-Secret.

Anmerkung

Wenn Sie Images als authentifizierter Benutzer abrufen, ist es weniger wahrscheinlich, dass Sie von den Änderungen an den Pull-Rate-Limits von Docker Hub betroffen sind. Weitere Informationen finden Sie unter Private Registrierungsauthentifizierung für Container-Instances.

Durch die Verwendung von Amazon ECR und Amazon ECR Public können Sie die von Docker auferlegten Beschränkungen umgehen. Wenn Sie Images von Amazon ECR abrufen, trägt dies auch dazu bei, die Netzwerk-Pull-Zeiten zu verkürzen und Datenübertragungsänderungen zu reduzieren, wenn der Datenverkehr Ihre VPC verlässt.

Wichtig

Wenn Sie Fargate verwenden, müssen Sie sich bei einer privaten Image-Registry mit repositoryCredentials authentifizieren. Es ist nicht möglich, die Umgebungsvariablen ECS_ENGINE_AUTH_TYPE oder ECS_ENGINE_AUTH_DATA für den Amazon-ECS-Container-Agenten festzulegen oder die ecs.config-Datei für auf Fargate gehostete Aufgaben zu ändern. Weitere Informationen finden Sie unter Private Registrierungsauthentifizierung für Aufgaben.

Rolle für Container-Instances

Die von AmazonEC2ContainerServiceforEC2Role verwaltete IAM-Richtlinie muss die folgende Berechtigungen umfassen. Nach den standardmäßigen Sicherheitshinweisen zur Erteilung von geringsten Privilegien kann die von AmazonEC2ContainerServiceforEC2Role verwaltete Richtlinie als Leitfaden verwendet werden. Wenn Sie eine der in der verwalteten Richtlinie erteilten Berechtigungen für Ihren Anwendungsfall nicht benötigen, erstellen Sie eine benutzerdefinierte Richtlinie und fügen Sie nur die erforderlichen Berechtigungen hinzu.

  • ec2:DescribeTags— (Optional) Ermöglicht einem Principal, die Tags zu beschreiben, die einer EC2 Amazon-Instance zugeordnet sind. Diese Berechtigung wird vom Amazon-ECS-Container-Agent verwendet, um die Weitergabe von Ressourcen-Tags zu unterstützen. Weitere Informationen finden Sie unter So werden Ressourcen markiert.

  • ecs:CreateCluster— (Optional) Ermöglicht es einem Prinzipal, einen Amazon ECS-Cluster zu erstellen. Diese Berechtigung wird vom Amazon-ECS-Container-Agenten verwendet, um einen default-Cluster zu erstellen, falls noch keiner vorhanden ist.

  • ecs:DeregisterContainerInstance— (Optional) Ermöglicht einem Principal, eine Amazon ECS-Container-Instance von einem Cluster abzumelden. Der Amazon ECS-Container-Agent ruft diesen API-Vorgang nicht auf, aber diese Berechtigung bleibt bestehen, um die Abwärtskompatibilität sicherzustellen.

  • ecs:DiscoverPollEndpoint— (Erforderlich) Diese Aktion gibt Endpunkte zurück, die der Amazon ECS-Container-Agent verwendet, um Updates abzufragen.

  • ecs:Poll— (Erforderlich) Ermöglicht dem Amazon ECS-Container-Agenten, mit der Amazon ECS-Steuerebene zu kommunizieren, um Änderungen des Aufgabenstatus zu melden.

  • ecs:RegisterContainerInstance— (Erforderlich) Ermöglicht einem Principal, eine Container-Instance bei einem Cluster zu registrieren. Diese Berechtigung wird vom Amazon ECS-Container-Agenten verwendet, um die EC2 Amazon-Instance bei einem Cluster zu registrieren und die Weitergabe von Ressourcen-Tags zu unterstützen.

  • ecs:StartTelemetrySession— (Optional) Ermöglicht dem Amazon ECS-Container-Agenten die Kommunikation mit der Amazon ECS-Steuerebene, um Statusinformationen und Metriken für jeden Container und jede Aufgabe zu melden.

    Diese Berechtigung ist zwar nicht erforderlich, wir empfehlen jedoch, sie hinzuzufügen, damit die Metriken der Container-Instance Skalierungsaktionen starten und auch Berichte zu Befehlen zur Zustandsprüfung erhalten können.

  • ecs:TagResource— (Optional) Ermöglicht dem Amazon ECS-Container-Agenten, Cluster bei der Erstellung zu taggen und Container-Instances zu taggen, wenn sie in einem Cluster registriert sind.

  • ecs:UpdateContainerInstancesState: Ermöglicht es einem Prinzipal, den Status einer Amazon-ECS-Container-Instance zu ändern. Diese Berechtigung wird vom Amazon-ECS-Container-Agent für Spot-Instance Draining verwendet.

  • ecs:Submit*— (Erforderlich) Dazu gehören die SubmitTaskStateChange API-Aktionen SubmitAttachmentStateChangesSubmitContainerStateChange, und. Sie werden vom Amazon-ECS-Container-Agent verwendet, um Statusänderungen für jede Ressource an die Amazon-ECS-Steuerungsebene zu melden. Die SubmitContainerStateChange Berechtigung wird nicht mehr vom Amazon ECS-Container-Agenten verwendet, sondern dient weiterhin dazu, die Abwärtskompatibilität sicherzustellen.

  • ecr:GetAuthorizationToken— (Optional) Ermöglicht einem Prinzipal, ein Autorisierungstoken abzurufen. Ein Autorisierungs-Token stellt Ihre Anmeldeinformationen zur IAM-Authentifizierung dar und kann verwendet werden, um auf jede Amazon ECR-Registrierung zuzugreifen, auf die das IAM-Prinzipal Zugriff hat. Das erhaltene Autorisierungs-Token ist 12 Stunden gültig.

  • ecr:BatchCheckLayerAvailability— (Optional) Wenn ein Container-Image in ein privates Amazon ECR-Repository übertragen wird, wird jede Image-Ebene überprüft, um sicherzustellen, dass sie bereits übertragen wurde. Wenn dies der Fall ist, wird die Image-Ebene übersprungen.

  • ecr:GetDownloadUrlForLayer— (Optional) Wenn ein Container-Image aus einem privaten Amazon ECR-Repository abgerufen wird, wird diese API einmal für jede Bildebene aufgerufen, die noch nicht zwischengespeichert ist.

  • ecr:BatchGetImage— (Optional) Wenn ein Container-Image aus einem privaten Amazon ECR-Repository abgerufen wird, wird diese API einmal aufgerufen, um das Image-Manifest abzurufen.

  • logs:CreateLogStream— (Optional) Ermöglicht einem Principal, einen CloudWatch Logs-Log-Stream für eine angegebene Protokollgruppe zu erstellen.

  • logs:PutLogEvents— (Optional) Ermöglicht einem Prinzipal, einen Stapel von Protokollereignissen in einen angegebenen Protokolldatenstrom hochzuladen.

Service-verknüpfte Rollen

Sie können die serviceverknüpfte Rolle für Amazon ECS verwenden, um dem Amazon ECS-Service die Erlaubnis zu erteilen, in APIs Ihrem Namen andere Services anzurufen. Amazon ECS benötigt die Berechtigungen zum Erstellen und Löschen von Netzwerkschnittstellen sowie zum Registrieren und Abmelden von Zielen bei einer Zielgruppe. Außerdem benötigt es die erforderlichen Berechtigungen, um Skalierungsrichtlinien zu erstellen und zu löschen. Diese Berechtigungen werden durch die serviceverknüpfte Rolle erteilt. Diese Rolle wird in Ihrem Namen erstellt, wenn Sie den Service zum ersten Mal verwenden.

Anmerkung

Wenn Sie die serviceverknüpfte Rolle versehentlich löschen, können Sie sie neu erstellen. Anweisungen dazu finden Sie unter Die serviceverknüpfte Rolle erstellen.

Empfehlungen für Rollen

Wir empfehlen Ihnen, bei der Einrichtung Ihrer IAM-Rollen und -Richtlinien für Aufgaben wie folgt vorzugehen.

Zugriff auf EC2 Amazon-Metadaten blockieren

Wenn Sie Ihre Aufgaben auf EC2 Amazon-Instances ausführen, empfehlen wir Ihnen dringend, den Zugriff auf EC2 Amazon-Metadaten zu blockieren, um zu verhindern, dass Ihre Container die diesen Instances zugewiesene Rolle erben. Wenn Ihre Anwendungen eine AWS API-Aktion aufrufen müssen, verwenden Sie stattdessen IAM-Rollen für Aufgaben.

Um zu verhindern, dass Aufgaben, die im Bridge-Modus ausgeführt werden, auf EC2 Amazon-Metadaten zugreifen, führen Sie den folgenden Befehl aus oder aktualisieren Sie die Benutzerdaten der Instance. Weitere Anweisungen zum Aktualisieren der Benutzerdaten einer Instance finden Sie in diesem AWS -Support-Artikel. Weitere Informationen zum Bridge-Modus für Aufgabendefinitionen finden Sie unter Netzwerkmodus für Aufgabendefinitionen.

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

Damit diese Änderung nach einem Neustart bestehen bleibt, führen Sie den folgenden Befehl aus, der für Ihr Amazon Machine Image (AMI) spezifisch ist:

  • Amazon Linux 2

    sudo iptables-save | sudo tee /etc/sysconfig/iptables && sudo systemctl enable --now iptables
  • Amazon Linux

    sudo service iptables save

Für Aufgaben, die den awsvpc-Netzwerkmodus verwenden, setzen Sie die Umgebungsvariable ECS_AWSVPC_BLOCK_IMDS in der /etc/ecs/ecs.config-Datei auf true.

Sie sollten die ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST Variable false in der ecs-agent config Datei auf setzen, um zu verhindern, dass die Container, die im host Netzwerk laufen, auf die EC2 Amazon-Metadaten zugreifen.

Verwenden Sie den awsvpc Netzwerkmodus

Verwenden Sie den awsvpc-Netzwerkmodus, um den Verkehrsfluss zwischen verschiedenen Aufgaben oder zwischen Ihren Aufgaben und anderen Services, die in Ihrer Amazon VPC ausgeführt werden, einzuschränken. Dies fügt eine zusätzliche Sicherheitsebene hinzu. Der awsvpc Netzwerkmodus bietet Netzwerkisolierung auf Aufgabenebene für Aufgaben, die auf Amazon ausgeführt werden. EC2 Dies ist der Standardmodus aktiviert AWS Fargate. Es ist der einzige Netzwerkmodus, den Sie verwenden können, um Aufgaben eine Sicherheitsgruppe zuzuweisen.

Verwenden Sie Informationen, auf die zuletzt zugegriffen wurde, um Rollen zu verfeinern

Wir empfehlen, alle Aktionen zu entfernen, die nie oder seit einiger Zeit nicht mehr verwendet wurden. Dadurch wird verhindert, dass unerwünschter Zugriff erfolgt. Überprüfen Sie dazu die von IAM bereitgestellten Informationen, auf die zuletzt zugegriffen wurde, und entfernen Sie dann Aktionen, die nie oder in letzter Zeit nicht verwendet wurden. Gehen Sie dazu wie folgt vor.

Führen Sie den folgenden Befehl aus, um einen Bericht mit Informationen über den letzten Zugriff für die betreffende Richtlinie zu erstellen:

aws iam generate-service-last-accessed-details --arn arn:aws:iam::123456789012:policy/ExamplePolicy1

Verwenden Sie die JobId, die in der Ausgabe enthalten war, um den folgenden Befehl auszuführen. Nachdem Sie dies getan haben, können Sie die Ergebnisse des Berichts einsehen.

aws iam get-service-last-accessed-details --job-id 98a765b4-3cde-2101-2345-example678f9

Weitere Informationen finden Sie unter Verfeinern von Berechtigungen bei der AWS Verwendung von Informationen, auf die zuletzt zugegriffen wurde.

Achten Sie AWS CloudTrail auf verdächtige Aktivitäten

Sie können AWS CloudTrail nach verdächtigen Aktivitäten Ausschau halten. Die meisten AWS API-Aufrufe werden AWS CloudTrail als Ereignisse protokolliert. Sie werden von AWS CloudTrail Insights analysiert, und Sie werden über jedes verdächtige Verhalten im Zusammenhang mit write API-Aufrufen informiert. Dies kann einen Anstieg des Anrufvolumens beinhalten. Diese Benachrichtigungen enthalten Informationen wie den Zeitpunkt, zu dem die ungewöhnliche Aktivität aufgetreten ist, und den ARN mit der höchsten Identität, der dazu beigetragen hat APIs.

Sie können Aktionen identifizieren, die von Aufgaben mit einer IAM-Rolle in AWS CloudTrail ausgeführt werden, indem Sie sich die userIdentity-Eigenschaft des Ereignisses ansehen. Im folgenden Beispiel besteht das arn aus dem Namen der übernommenen Rolle, s3-write-go-bucket-role, gefolgt vom Namen der Aufgabe, 7e9894e088ad416eb5cab92afExample.

"userIdentity": { "type": "AssumedRole", "principalId": "AROA36C6WWEJ2YEXAMPLE:7e9894e088ad416eb5cab92afExample", "arn": "arn:aws:sts::123456789012:assumed-role/s3-write-go-bucket-role/7e9894e088ad416eb5cab92afExample", ... }
Anmerkung

Wenn Aufgaben, die eine Rolle annehmen, auf EC2 Amazon-Container-Instances ausgeführt werden, wird eine Anfrage vom Amazon ECS-Container-Agenten im Audit-Protokoll des Agenten protokolliert, das sich an einer Adresse im /var/log/ecs/audit.log.YYYY-MM-DD-HH Format befindet. Weitere Informationen finden Sie unter Aufgaben-IAM-Rollenprotokoll und Protokollieren von Insights-Ereignissen für Trails.