내용으로 건너뛰기

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

4분 분량
0

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

간략한 설명

다른 계정의 IAM 역할을 맡도록 Amazon ECS 작업을 설정하여 다음 작업을 수행할 수 있습니다.

  • 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 작업이 가정하는 대상 계정을 포함하는 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로 바꿉니다.
  • 대상 계정 역할을 가정된 역할의 이름으로 바꿉니다.

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

대상 계정의 교차 계정 IAM 역할의(대상 계정 역할) 신뢰 정책에 다음 정책 설명을 추가합니다.

{
  "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 역할을 맡습니다. 또는 구성 파일의 credential_source 설정을 사용할 수 있습니다. AWS CLI에서 ECS 컨테이너에 연결된 IAM 역할을 수임하기 위한 자격 증명을 찾을 수 있는 위치를 지정합니다. 자세한 내용을 보려면 역할 자격 증명 공급자 가정을 참조하십시오.

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

  1. 생성한 작업 정의를 사용하여 작업을 실행합니다.
    Amazon Elastic Compute Cloud (Amazon EC2)에서 작업을 실행하는 경우, docker exec 명령을 사용하여 테스트를 수행하십시오.
    AWS Fargate에서 작업을 실행하는 경우 ECS Exec을 사용하여 테스트를 수행하십시오.
  2. AWS CLI 구성 파일을 구성한 다음, 작업이 대상 계정의 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 <<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"
      ]
    }

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

관련 정보

아마존 ECS 태스크 역할

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

AWS SDK 및 도구 참조 가이드

AWS CLI에서 IAM 역할 사용

AWS 공식업데이트됨 2년 전