내용으로 건너뛰기

Amazon ECS 작업이 다른 AWS 계정에서 IAM 역할을 맡도록 구성하려면 어떻게 해야 합니까?

4분 분량
0

Amazon Elastic Container Service(Amazon ECS)가 다른 계정에서 AWS Identity and Access Management(IAM) 역할을 맡게 하려고 합니다.

간략한 설명

Amazon ECS 작업이 다른 계정에서 IAM 역할을 맡도록 설정하여 다음과 같은 일을 할 수 있습니다.

  • Amazon Simple Storage Service(Amazon S3) 버킷과 같은 리소스에 액세스
  • API 호출을 통해 리소스 설명, 인스턴스 시작 또는 중지 등의 작업을 수행합니다.

Amazon ECS 작업이 다른 AWS 계정의 IAM 역할을 맡도록 허용하려면 다음 단계를 완료하십시오.

  1. 소스 계정에서 IAM 역할을 구성합니다.
  2. 소스 계정의 IAM 역할이 대상 계정의 IAM 역할을 맡도록 허용하려면 대상 계정의 IAM 역할 신뢰 정책을 수정하십시오.
  3. 소스 계정에서 작업 정의를 만들고, 1단계에서 만든 IAM 역할을 Amazon ECS 작업 역할로 정의합니다.

해결 방법

이 문서에서 사용한 예시에서는 두 개의 서로 다른 AWS 계정을 참조합니다.

  • Amazon ECS 작업을 호스팅하는 소스 계정: 1111222233334444
  • Amazon ECS 작업이 맡는 destination-account-role과 같은 IAM 역할이 포함된 대상 계정: 5555666677778888

소스 계정의 IAM 역할 구성

Amazon ECS 작업 역할에 다음 정책 문을 추가하여 해당 역할이 대상 계정에서 IAM 역할을 맡도록 허용합니다.

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

참고: 5555666677778888 을 작업이 맡아야 하는 교차 계정 역할의 계정 ID로 바꾸십시오. destination-account-role을 맡은 역할의 이름으로 바꾸십시오.

대상 계정에서 IAM 역할의 신뢰 정책 수정

대상 계정의 교차 계정 IAM 역할(destination-account-role) 신뢰 정책에 다음 정책 문을 추가합니다.

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

참고: 1111222233334444를 ECS 작업 IAM 역할이 존재하는 소스 계정의 계정 ID로 바꾸십시오. my-ECS-task-role을 ECS IAM 작업 역할의 이름으로 바꾸십시오.

작업 정의 만들기

다음과 비슷한 작업 정의 파일을 만듭니다.

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

참고: taskRoleArn의 경우, 소스 계정의 IAM 역할 ARN을 사용하십시오.

작업 정의를 등록하려면 example-task-def.json 파일에 다음 명령을 실행합니다.

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

참고: AWS Command Line Interface(AWS CLI) 명령 실행 시 오류가 발생하는 경우 AWS CLI 오류 문제 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

앞선 단계 이후, AWS CLI를 사용해 독립형 작업이 대상 계정에서 IAM 역할을 맡게 합니다. 또는 config 파일에서 credential_source 설정을 사용할 수 있습니다. AWS CLI가 ECS 컨테이너에 연결된 IAM 역할을 맡을 자격 증명을 어디에서 찾을지 지정하십시오. 자세한 내용은 역할 수임 자격 증명 공급자를 참조하십시오.

작업 내 컨테이너가 대상 계정의 IAM 역할을 맡을 수 있고 리소스에 액세스할 수 있는지 확인

  1. 앞서 만든 작업 정의를 사용해 작업을 실행합니다.
    작업을 Amazon Elastic Compute Cloud(Amazon EC2)에서 실행 중인 경우, docker exec 명령을 사용해 테스트를 수행합니다.
    작업을 AWS Fargate에서 실행 중인 경우, ECS Exec을 사용해 테스트를 수행합니다.

  2. AWS CLI config 파일을 구성하고, 작업이 대상 계정에서 IAM 역할을 맡는지 확인:

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

출력의 앞의 예시와 비슷한 경우, 계정 1111222233334444의 ECS 작업이 계정 5555666677778888의 IAM 역할을 맡을 수 있습니다. ECS 작업은 IAM 역할을 맡아 ECS 클러스터 리소스를 나열할 수 있습니다.

관련 정보

Amazon ECS 작업 IAM 역할

IAM 자습서: IAM 역할을 사용해 AWS 계정 전체에 대한 액세스 위임

What is covered in the AWS SDKs and Tools Reference Guide(AWS SDK 및 도구 참조 가이드에서 다루는 내용)

AWS CLI에서 IAM 역할 사용

AWS 공식업데이트됨 5달 전
1 댓글

This article was reviewed and updated on 2026-03-10.

전문가

답글을 게시함 6일 전