Direkt zum Inhalt

Wie kann ich meine Amazon ECS-Aufgabe so konfigurieren, dass sie eine IAM-Rolle in einem anderen AWS-Konto übernimmt?

Lesedauer: 4 Minute
0

Ich möchte, dass meine Amazon Elastic Container Service (Amazon ECS)-Aufgabe eine AWS Identity and Access Management (IAM)-Rolle in einem anderen Konto übernimmt.

Kurzbeschreibung

Du kannst deine Amazon ECS-Aufgabe so einrichten, dass sie eine IAM-Rolle in einem anderen Konto übernimmt, um Folgendes zu tun:

  • Auf Ressourcen zugreifen, z. B. auf einen Amazon Simple Storage Service (Amazon S3)-Bucket
  • Aufgaben ausführen wie das Beschreiben einer Ressource und das Starten oder Stoppen von Instances über API-Aufrufe

Gehe wie folgt vor, damit deine Amazon ECS-Aufgabe eine IAM-Rolle in einem anderen AWS-Konto übernehmen kann:

  1. Konfiguriere eine IAM-Rolle im Quellkonto.
  2. Ändere die Vertrauensrichtlinie der IAM-Rolle des Zielkontos, damit die IAM-Rolle des Quellkontos die IAM-Rolle des Zielkontos übernehmen kann.
  3. Erstelle eine Aufgabendefinition im Quellkonto und definiere die in Schritt 1 erstellte IAM-Rolle als Amazon ECS-Aufgabenrolle.

Lösung

Die in diesem Artikel verwendeten Beispiele beziehen sich auf zwei verschiedene AWS-Konten:

  • Ein Quellkonto, das die Amazon ECS-Aufgabe hostet: 1111222233334444
  • Ein Zielkonto, das die IAM-Rolle enthält, z. B. destination-account-role, die von der Amazon ECS-Aufgabe übernommen wird: 5555666677778888

IAM-Rolle im Quellkonto konfigurieren

Füge deiner Amazon ECS-Aufgabenrolle die folgende Richtlinienerklärung hinzu, damit die Rolle die IAM-Rolle im Zielkonto übernehmen kann:

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Resource": "arn:aws:iam::5555666677778888:role/destination-account-role"
  }
}

Hinweis: Ersetze 5555666677778888 durch die Konto-ID der kontoübergreifenden Rolle, die deine Aufgabe übernehmen muss. Ersetze destination-account-role durch den Namen der übernommenen Rolle.

Vertrauensrichtlinie der IAM-Rolle im Zielkonto ändern

Füge die folgende Richtlinienerklärung der Vertrauensrichtlinie deiner kontoübergreifenden IAM-Rolle (destination-account-role) im Zielkonto hinzu:

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": {
      "AWS": "arn:aws:iam::1111222233334444:role/my-ECS-task-role"
    },
    "Action": "sts:AssumeRole"
  }]
}

Hinweis: Ersetze 1111222233334444 durch die Konto-ID des Quellkontos, in dem die IAM-Rolle der ECS-Aufgabe existiert. Ersetze my-ECS-task-role durch den Namen deiner ECS-IAM-Aufgabenrolle.

Erstellen einer Aufgabendefinition

Erstelle eine Aufgabendefinitionsdatei, die der folgenden ähnelt:

{
  "containerDefinitions": [
    {
      "name": "test",
      "image": "your-test-image",
      "cpu": 100,
      "memory": 200,
      "essential": true
    }
  ],
  "family": "verify-assume-cross-account-role",
  "taskRoleArn": "arn:aws:iam::1111222233334444:role/my-ECS-task-role"
}

Hinweis: Verwende für taskRoleArn den ARN der IAM-Rolle des Quellkontos.

Um die Aufgabendefinition zu registrieren, führe den folgenden Befehl für die Datei example-task-def.json aus:

aws ecs register-task-definition --cli-input-json file://example-task-def.json

Hinweis: Wenn du beim Ausführen von Befehlen im AWS Command Line Interface (AWS CLI) Fehler erhältst, findest du weitere Informationen unter Troubleshoot AWS CLI errors (Beheben von AWS CLI-Fehlern). Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.

Verwende nach den vorherigen Schritten die AWS CLI, um eine eigenständige Aufgabe auszuführen und eine IAM-Rolle auf dem Zielkonto zu übernehmen. Du kannst auch die Einstellungen von credential_source in der Konfigurationsdatei verwenden. Gib an, wo die AWS CLI Anmeldeinformationen für die Übernahme der dem ECS-Container zugewiesenen IAM-Rolle finden kann. Weitere Informationen findest du unter Assume role credential provider (Anbieter von Anmeldeinformationen für die Rollenübernahme).

Sicherstellen, dass der Container innerhalb der Aufgabe die IAM-Rolle im Zielkonto übernehmen und auf die Ressource zugreifen kann

  1. Verwende die Aufgabendefinition, die du erstellt hast, um die Aufgabe auszuführen:
    Wenn du die Aufgabe in Amazon Elastic Compute Cloud (Amazon EC2) ausführst, verwende den Befehl docker exec, um die Tests durchzuführen.
    Wenn du die Aufgabe auf AWS Fargate ausführst, verwende ECS Exec, um die Tests durchzuführen.

  2. Konfiguriere die AWS-CLI-Konfigurationsdatei und stelle dann sicher, dass die Aufgabe die IAM-Rolle im Zielkonto übernimmt:

    Using the ECS exec command to access the container
    $ aws ecs execute-command --cluster example-cluster --task example-taskID --container test --interactive --command "/bin/bash"
    The Session Manager plugin was installed successfully. Use the AWS CLI to start a session.
    Starting session with SessionId: ecs-execute-command-064a40c5149cecc32
    # Create AWS CLI config file
    bash-4.2# mkdir /root/.aws
    bash-4.2# cat < /root/.aws/config
    [profile cross-account]
    role_arn = arn:aws:iam::5555666677778888:role/destination-account-role
    credential_source = EcsContainer
    EOF
    # Check the current task IAM role
    bash-4.2# aws sts get-caller-identity
    {
      "UserId": "AROA4SHE6JAGEAYNUH6ST:8ee54a7f5c474a3f93ee28474486402f",
      "Account": "1111222233334444",
      "Arn": "arn:aws:sts::1111222233334444:assumed-role/my-ECS-task-role/8ee54a7f5c474a3f93ee28474486402f"
    }
    # Assume the cross-account IAM role
    bash-4.2# aws sts get-caller-identity --profile cross-account
    {
      "UserId": "AROA3A44JRHY6FFSMMJKN:botocore-session-1647426859",
      "Account": "5555666677778888",
      "Arn": "arn:aws:sts::5555666677778888:assumed-role/destination-account-role/botocore-session-1647426859"
    }
    # Verify that you can list the resources in cross-account in the task
    bash-4.2# aws ecs list-clusters --profile cross-account
    {
      "clusterArns": [
        "arn:aws:ecs:us-east-1:5555666677778888:cluster/default"
      ]
    }

Wenn deine Ausgaben dem vorherigen Beispiel ähneln, kann die ECS-Aufgabe im Konto 1111222233334444 die IAM-Rolle im Konto 5555666677778888 übernehmen. Die ECS-Aufgabe kann die IAM-Rolle übernehmen, um die ECS-Cluster-Ressourcen aufzulisten.

Weitere Informationen

x (IAM-Rolle für Amazon ECS-Aufgaben)

IAM-Tutorial: Delegate access across AWS accounts using IAM roles (Zugriff über AWS-Konten mithilfe von IAM-Rollen delegieren)

What is covered in the AWS SDKs and Tools Reference Guide (Was im AWS SDKs and Tools Reference Guide behandelt wird)

Using an IAM role in the AWS CLI (Verwenden einer IAM-Rolle in der AWS CLI)

AWS OFFICIALAktualisiert vor 5 Monaten