Wie konfiguriere ich meine IAM-Aufgabenrolle in Amazon ECS, um Fehler "Access Denied" zu vermeiden, wenn ich API-Aufrufe tätige?
Ich möchte meine AWS Identity and Access Management (IAM)-Aufgabenrolle in Amazon Elastic Container Service (Amazon ECS) so konfigurieren, dass ich bei API-Aufrufen keine Fehler "Access Denied" erhalte.
Kurzbeschreibung
Um den Fehler Zugriff verweigert zu vermeiden, nimm die IAM-Rolle in die Amazon ECS-Aufgabendefinition auf.
Du musst die IAM-Rolle in der ECS-Container-Agent-Konfigurationsdatei aktivieren. Stelle außerdem sicher, dass die IAM-Rolle über alle erforderlichen Berechtigungen verfügt, damit die Aufgabe die Rolle für die API-Aufrufe verwenden kann.
Hinweis: Wenn eine Aufgabe die IAM-Aufgabenrolle aufgrund von Konfigurationsproblemen nicht finden kannst, verwendet die Aufgabe die Amazon Elastic Compute Cloud (Amazon EC2)-Instance-Rolle.
Lösung
Sicherstellen, dass der ECS-Container-Agent läuft
Führe den Befehl docker ps aus:
docker ps
Hinweis: Wenn du die Instance neu startest, werden die Regeln für iptables auf die Standardwerte zurückgesetzt. Um ein Zurücksetzen zu vermeiden, führe einen der folgenden Befehle aus, um die Regeln zu speichern.
Amazon ECS-optimiertes Amazon Linux Amazon Machine Image (AMI):
sudo service iptables save
Amazon ECS-optimiertes Amazon Linux 2-AMI:
sudo iptables-save | sudo tee /etc/sysconfig/iptables && sudo systemctl enable --now iptables
Die IAM-Rolle in der ECS-Container-Agent-Konfigurationsdatei aktivieren
Führe die folgenden Schritte aus:
-
Öffne die Datei /etc/ecs/ecs.config.
-
Um die IAM-Rolle für Aufgaben in Containern mit Bridge- und Standard-Netzwerkmodus zu aktivieren, setze ECS_ENABLE_TASK_IAM_ROLE auf wahr:
ECS_ENABLE_TASK_IAM_ROLE=true -
Um die IAM-Rolle für Aufgaben in Containern mit dem Host-Netzwerkmodus zu aktivieren, setze ECS_ENABLE_TASK_IAM\ _ROLE_NETWORK_HOST auf wahr:
ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true -
Um die Konfigurationsdatei zu aktualisieren, führe einen der folgenden Befehle aus, um den ECS-Container-Agenten neu zu starten:
Amazon ECS-optimiertes Amazon Linux AMI:sudo stop ecs sudo start ecsAmazon ECS-optimiertes Amazon Linux 2-AMI:
sudo systemctl restart ecs
Die IAM-Rollenvertrauensrichtlinie aktualisieren
Um die IAM-Rolle den Amazon ECS-Aufgaben zuzuweisen, aktualisiere die IAM-Rollenvertrauensrichtlinie:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
Die HTTP_PROXY-Einstellungen für den ECS-Container-Agenten aktualisieren
Wenn du HTTP_PROXY in der Amazon ECS-Container-Agent-Konfiguration verwendest, wende die folgende NO_PROXY-Einstellung an:
NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock
Die neueste AWS-SDK-Version verwenden
Die Anwendung, die im Container ausgeführt wird, muss eine Version 2016 oder höher des AWS-SDK verwenden. Informationen zur Aktualisierung des AWS findest du unter Versionsunterstützung für AWS-SDKs und Tools und Tools zum Erstellen auf AWS.
iptables-Regeln für ein AMI konfigurieren, das nicht für Amazon ECS optimiert ist
Wenn du ein nicht für Amazon ECS optimiertes AMI verwendest, lege die erforderlichen Regeln für iptables fest.
Die Umgebungsvariable für Nicht-PID-1-Prozesse verfügbar machen
Die Umgebungsvariable AWS_CONTAINER_CREDENTIALS_RELATIVE_URI ist nur für PID 1-Prozesse innerhalb eines Containers verfügbar. Wenn der Container mehrere oder init-Prozesse ausführt, ist die Umgebungsvariable für Nicht-PID-1-Prozesse nicht verfügbar.
Um die Umgebungsvariable so einzustellen, dass sie für Nicht-PID-1-Prozesse verfügbar ist, exportiere die Umgebungsvariable in die Datei .profile. Führe beispielsweise den folgenden Befehl aus, um die Umgebungsvariable im Dockerfile für das Container-Image zu exportieren:
RUN echo 'export $(strings /proc/1/environ | grep AWS_CONTAINER_CREDENTIALS_RELATIVE_URI)' >> /root/.profile
Hinweis: Wenn du die Umgebungsvariable exportierst, besteht eine Abhängigkeit von den Zeichenketten und grep-Befehlen.
Ähnliche Informationen
- Themen
- Containers
- Sprache
- Deutsch
