Come posso configurare la mia attività Amazon ECS per assumere un ruolo IAM in un altro account AWS?

5 minuti di lettura
0

Desidero che la mia attività Amazon Elastic Container Service (Amazon ECS) assuma un ruolo AWS Identity and Access Management (IAM) in un altro account.

Breve descrizione

Potresti configurare l'attività Amazon ECS in modo che assuma un ruolo IAM in un altro account per eseguire le seguenti operazioni:

  • Accedere alle risorse, ad esempio un bucket Amazon Simple Storage Service (Amazon S3).
  • Eseguire attività, come descrivere una risorsa e avviare o interrompere le istanze, tramite chiamate API.

Per consentire alla tua attività Amazon ECS di assumere un ruolo IAM in un altro account AWS, completa i seguenti passaggi:

  1. Configura un ruolo IAM nell'account di origine.
  2. Modifica la policy di attendibilità del ruolo IAM dell'account di destinazione per consentire al ruolo IAM dell'account di origine di assumere il ruolo IAM dell'account di destinazione.
  3. Crea una definizione di attività nell'account di origine e definisci il ruolo IAM creato nella fase 1 come ruolo di attività Amazon ECS.

Soluzione

Gli esempi utilizzati in questo articolo fanno riferimento a due diversi account AWS:

  • Un account di origine che ospita l'attività Amazon ECS: 1111222233334444
  • Un account di destinazione che include il ruolo IAM, ad esempio destination-account-role, che l'attività Amazon ECS assume: 5555666677778888

Configurazione del ruolo IAM nell'account di origine

Aggiungi la seguente dichiarazione di policy al tuo ruolo di attività Amazon ECS per consentirgli di assumere il ruolo IAM nell'account di destinazione:

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

Nota:

  • Sostituisci 5555666677778888 con l'ID account del ruolo multi-account che l'attività deve assumere.
  • Sostituisci destination-account-role con il nome del ruolo assunto.

Modifica della policy di attendibilità del ruolo IAM nell'account di destinazione

Aggiungi la seguente dichiarazione di policy alla policy di attendibilità del tuo ruolo IAM (destination-account-role) multi-account nell'account di destinazione:

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

Nota:

  • Sostituisci 1111222233334444 con l'ID dell'account di origine in cui esiste il ruolo IAM dell'attività ECS.
  • Sostituisci My-ECS-Task-Role con il nome del tuo ruolo di attività ECS IAM.

Creazione della definizione dell'attività

Crea un file di definizione delle attività simile al seguente:

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

Nota: per TaskroleArn, usa l'ARN del ruolo IAM dell'account di origine.

Per registrare la definizione dell'attività, esegui il seguente comando nel file example-task-def.json"

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

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta la sezione Troubleshoot AWS CLI errors. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Dopo i passaggi precedenti, utilizza l'AWS CLI per eseguire un'attività autonoma per assumere un ruolo IAM sull'account di destinazione. In alternativa, puoi utilizzare le impostazioni credential\ _source nel file di configurazione. Specifica dove l'AWS CLI può trovare le credenziali per assumere il ruolo IAM collegato al container ECS. Per altre informazioni, consulta Assume role credential provider.

Verifica che il container all'interno dell'attività possa assumere il ruolo IAM nell'account di destinazione e accedere alla risorsa

  1. Quindi, utilizza la definizione dell'attività creata per eseguire l'attività:
    Se stai eseguendo l'attività su Amazon Elastic Compute Cloud (Amazon EC2), utilizza il comando docker exec per eseguire il test.
    Se stai eseguendo l'attività su AWS Fargate, utilizza ECS Exec per eseguire i test.
  2. Configura il file di configurazione AWS CLI, quindi verifica che l'attività assuma il ruolo IAM nell'account di destinazione:
    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"
      ]
    }

Se i tuoi output sono simili all'esempio precedente, l'attività ECS nell'account 1111222233334444 può assumere il ruolo IAM nell'account 5555666677778888. L'attività ECS può assumere il ruolo IAM di elencare le risorse del cluster ECS.

Informazioni correlate

Amazon ECS task role

IAM tutorial: Delegate access across AWS accounts using IAM roles

AWS SDKs and Tools Reference Guide

Use an IAM role in the AWS CLI

AWS UFFICIALE
AWS UFFICIALEAggiornata 10 mesi fa