Wie greife ich von einer Amazon ECS-Aufgabe aus auf Ressourcen in einem anderen Konto zu?

Lesedauer: 4 Minute
0

Ich möchte, dass meine Amazon Elastic Container Service (Amazon ECS)-Aufgaben auf Ressourcen in einem anderen AWS-Konto zugreifen.

Behebung

Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version von AWS CLI verwendest.

Um den kontoübergreifenden Zugriff für eine Amazon ECS-Aufgabe einzurichten, verwende AWS Identity and Access Management (IAM)-Rollen und die kontoübergreifende Rollenübernahme.

Diese Auflösung verwendet die folgenden Konfigurationen:

  • Konto A ist das Konto des Ressourcenbesitzers.
  • Konto B ist das Konto mit der Amazon ECS-Aufgabe.

Voraussetzung: Die Amazon ECS-Aufgabendefinition in Konto B muss eine IAM-Aufgabenrolle haben. Nachdem du die IAM-Aufgabenrolle erstellt hast, aktualisiere die Amazon ECS-Aufgabendefinition, sodass sie den ARN der Aufgabenrolle enthält.

Konto A konfigurieren

Führe die folgenden Schritte aus:

  1. Erstelle eine IAM-Rolle für den Zugriff auf die Ressource und gib das folgende Vertrauensverhältnis für die benutzerdefinierte Vertrauensrichtlinie ein:
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::Account_B_ID:role/ECS_Task_Role_Name"
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    **Hinweis:**Ersetze Account_B_ID durch die Konto-ID für Konto B und ECS_Task_Role_Name durch den Namen der Amazon ECS-Aufgabenrolle für Konto B.
  2. Füge der neuen IAM-Rolle eine Inline-Richtlinie mit den erforderlichen Berechtigungen für den Zugriff auf die Ressource hinzu. Die folgende Beispielrichtlinie ermöglicht es der IAM-Rolle, Nachrichten an eine Amazon Simple Queue Service (Amazon SQS)-Warteschlange zu senden:
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "sqs:SendMessage"
                ],
                "Resource": "arn:aws:sqs:region:Account_A_ID:QueueName"
            }
        ]
    }
    Hinweis: Wenn deine Aufgabe auf AWS Fargate ausgeführt wird, stelle sicher, dass die IAM-Rolle über ECS Exec-Berechtigungen verfügt.

Konto B konfigurieren

Füge der Amazon ECS-Aufgabenrolle in der Aufgabendefinition eine Inline-Richtlinie hinzu, die es der Aufgabe ermöglicht, die IAM-Rolle in Konto A zu übernehmen:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::Account_A_ID:role/cross-account-role"
        }
    ]
}

**Hinweis:**Ersetze Account_A_ID durch die Konto-ID für Konto A.

Stelle sicher, dass der Container der Aufgabe in Konto B auf die Ressource in Konto A zugreifen kann.

Führe die folgenden Schritte aus:

  1. Wenn du die Aufgabe in Amazon Elastic Compute Cloud (Amazon EC2) ausführst, verwende den Befehl docker exec in der Container-Instance der Aufgabe. Weitere Informationen findest du auf der Docker Docs-Website unter Docker Exec auf einem laufenden Container ausführen. Fahre dann mit Schritt 3 fort.
    Wenn du die Aufgabe auf Fargate ausführst, aktiviere ECS Exec für deine eigenständige Aufgabe oder deinen eigenständigen Dienst.
    Hinweis: Ersetze in den folgenden Befehlen cluster-name durch deinen Cluster-Namen, your-task-definition durch die Aufgabendefinition in Konto B und region-name durch deine AWS-Region. Ersetze außerdem FARGATE durch deinen Starttyp.
    Führe für eine eigenständige Aufgabe den folgenden run-task-Befehl aus:

    aws ecs run-task --cluster cluster-name --task-definition your-task-definition:revision --enable-execute-command --network-configuration "awsvpcConfiguration={subnets=[subnet-12345678],securityGroups=[sg-12345678]}" --launch-type FARGATE

    Führe für einen Dienst den folgenden update-service-Befehl aus:

    aws ecs update-service --service service-name --cluster cluster-name --enable-execute-command --region region-name --force-new-deployment
  2. Um ECS Exec für die Remoteverbindung mit der Container-Instance zu verwenden, führe den folgenden execute-command-Befehl aus:

    aws ecs execute-command --cluster cluster-name --task taskID --container container-name --interactive --command "/bin/bash"

    **Hinweis:**Ersetze cluster-name durch den Clusternamen, taskID durch die Task-ID und container-name durch den Container-Namen.

  3. Führe im Container den folgenden Befehl aus, um ein kontoübergreifendes Profil in der Konfigurationsdatei zu erstellen:

    bash-4.2# mkdir /root/.aws
    bash-4.2# cat <<EOF > /root/.aws/config
    [profile cross-account]
    role_arn = arn:aws:iam::Account_A_ID:role/cross-account-role
    credential_source = EcsContainer
    EOF

    **Hinweis:**Ersetze Account_A_ID durch die Konto-ID für Konto A.

  4. Führe den folgenden Befehl aus, um die Rolle zu überprüfen, die der Container übernimmt:

    bash-4.2# aws sts get-caller-identity

    Stelle in der Ausgabe sicher, dass es sich bei der Rolle um die Aufgabenrolle in Konto B handelt.
    Beispielausgabe:

    {
        "Account": "Account_B_ID",
        "UserId": "AROATCLZDNI7EB3PZGY56:8db9330e660542b7b55595b06fef82cd",
        "Arn": "arn:aws:sts::Account_B_ID:assumed-role/task-role/8db9330e660542b7b55595b06fef82cd"
    }
  5. Führe den folgenden Befehl aus, um zu bestätigen, dass der Container die kontoübergreifende Rolle übernehmen kann:

    bash-4.2# aws sts get-caller-identity --profile cross-account

    Beispielausgabe:

    {
        "Account": "Account_A_ID",
        "UserId": "AROA4T5UFR272UVSKSA2Y:botocore-session-1736260779",
        "Arn": "arn:aws:sts::Account_A_ID:assumed-role/cross-account-role/botocore-session-1736260779"
    }
  6. Prüfe, ob du von Konto B aus auf die Ressource in Konto A zugreifen kannst. Der folgende Beispielbefehl greift auf eine SQS-Warteschlange zu:

    bash-4.2# aws sqs send-message --queue-url https://sqs.region.amazonaws.com/Account_A_ID/QueueName --message-body "Test message from ECS Task in Account B" --profile cross-account

    Hinweis: Ersetze region durch deine Region, Account_A_ID durch die Konto-ID für Konto A und QueueName durch den Namen deiner SQS-Warteschlange.
    Beispielausgabe:

    {
        "MD5OfMessageBody": "2b9297ac831d0f8aa655f41e6782898d",
        "MessageId": "4d5baf64-abb0-4f06-af95-d602a45326d2"
    }

    Die Ausgabe bestätigt, dass die Amazon ECS-Aufgabe in Konto B Nachrichten an die SQS-Warteschlange in Konto A senden kann.

Ähnliche Informationen

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

IAM-Tutorial: Delegieren des Zugriffs über AWS-Konten mithilfe von IAM-Rollen

Eine IAM-Rolle in der AWS CLI verwenden

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 3 Monaten