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

Letzte Aktualisierung: 21.03.2022

Ich möchte meine Aufgabe im Amazon Elastic Container Service (Amazon ECS) so einrichten, dass sie eine Rolle aus dem AWS Identity and Access Management (IAM) in einem anderen Konto übernehmen kann.

Kurzbeschreibung

Sie können Ihre Amazon ECS-Aufgabe so einrichten, dass sie eine IAM-Rolle in einem anderen Konto zu folgenden Zwecken übernehmen kann:

  • Zugriff auf Ressourcen wie einen Bucket im Amazon Simple Storage Service (Amazon S3).
  • Ausführen von Aufgaben wie das Beschreiben einer Ressource und das Starten oder Stoppen von Instances mithilfe von API-Aufrufen.

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

  1. Konfigurieren Sie eine IAM-Rolle im Quellkonto.
  2. Ändern Sie die Vertrauensrichtlinie der IAM-Rolle des Zielkontos, damit die IAM-Rolle des Quellkontos die IAM-Rolle im Zielkonto übernehmen kann.
  3. Erstellen Sie eine Aufgabendefinition im Quellkonto und definieren Sie die in Schritt 1 erstellte IAM-Rolle als Amazon ECS-Aufgabenrolle.

Auflösung

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

  • Ein Quellkonto, das die Amazon ECS-Aufgabe hostet (Beispiel: 1111222233334444)
  • Ein Zielkonto, das die IAM-Rolle enthält (Beispiel: destination-account-role), die die Amazon ECS-Aufgabe übernimmt (Beispiel: 5555666677778888)

Konfigurieren der IAM-Rolle im Quellkonto

Gehen Sie nach den Anweisungen unter Hinzufügen und Entfernen von IAM-Identitätsberechtigungen vor, um Ihrer Amazon ECS-Aufgabenrolle (Beispiel: my-ECS-task-role) die folgende Richtlinienanweisung hinzuzufügen. Dadurch kann die ECS-Aufgabenrolle die IAM-Rolle im Zielkonto übernehmen.

Hinweis:

  • Ersetzen Sie 5555666677778888 durch die Konto-ID der kontoübergreifenden Rolle, die Ihre Aufgabe übernehmen muss.
  • Ersetzen Sie destination-account-role durch den Namen der übernommenen Rolle.
{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Resource": "arn:aws:iam::5555666677778888:role/destination-account-role"
  }
}

Ändern der Vertrauensrichtlinie der IAM-Rolle im Zielkonto

Gehen Sie nach den Anweisungen unter Ändern einer Rollenvertrauensrichtlinie (Konsole) vor, um die folgende Richtlinienanweisung zur Vertrauensrichtlinie Ihrer kontoübergreifenden IAM-Rolle (destination-account-role) im Zielkonto hinzuzufügen.

Hinweis:

  • Ersetzen Sie 1111222233334444 durch die Konto-ID des Quellkontos, in dem die IAM-Rolle der ECS-Aufgabe vorhanden ist.
  • Ersetzen Sie my-ECS-task-role durch den Namen Ihrer ECS-IAM-Aufgabenrolle.
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": {
      "AWS": "arn:aws:iam::1111222233334444:role/my-ECS-task-role"
    },
    "Action": "sts:AssumeRole"
  }]
}

Erstellen der Aufgabendefinition

Erstellen Sie eine Aufgabendefinitionsdatei ähnlich der folgenden (example-task-def.json) und verwenden Sie den ARN der IAM-Rolle des Quellkontos (my-ECS-task-role) für taskRoleArn:

{
  "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"
}

Führen Sie den folgenden Befehl aus, um die Aufgabendefinition mithilfe der Datei example-task-def.json zu registrieren:

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

Hinweis: Wenn beim Ausführen von AWS CLI-Befehlen Fehler gemeldet werden, stellen Sie sicher, dass Sie die neueste Version der AWS CLI verwenden.

Nachdem Sie die vorherigen Schritte ausgeführt haben, können Sie eine eigenständige Aufgabe ausführen, um mithilfe der AWS Command Line Interface (AWS CLI) eine IAM-Rolle für das Zielkonto zu übernehmen. Oder Sie können anhand der Einstellungen für credential_source in der AWS CLI-Konfigurationsdatei angeben, wo die AWS CLI Anmeldeinformationen finden kann, um die an den ECS-Container angehängte IAM-Rolle zu übernehmen. Mit dieser Einstellung kann die Aufgabe die Rolle übernehmen, ohne neue Anmeldeinformationen exportieren zu müssen. Weitere Informationen finden Sie unter Rollenanmeldeinformationen annehmen.

Stellen Sie sicher, dass der Container innerhalb der Aufgabe die IAM-Rolle im Zielkonto übernehmen kann, und greifen Sie auf die Ressource zu

1.    Führen Sie die Aufgabe mit der von Ihnen erstellten Aufgabendefinition aus.

  • Wenn Sie die Aufgabe in der Amazon Elastic Compute Cloud (Amazon EC2) ausführen, verwenden Sie den Befehl docker execl, um in den Container zu gelangen und die Tests durchzuführen.
  • Wenn Sie eine Aufgabe auf AWS Fargate ausführen, verwenden Sie die Funktion ECS Exec, um in den Container zu gelangen und die Tests durchzuführen.

2.    Konfigurieren Sie die AWS CLI-Konfigurationsdatei, und stellen Sie anschließend 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 <<EOF > /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 Ihre Ausgaben den aufgeführten ähneln, kann die ECS-Aufgabe im Konto 1111222233334444 die IAM-Rolle im Konto 5555666677778888 übernehmen, um die ECS-Cluster-Ressourcen aufzulisten.