내용으로 건너뛰기

Amazon ECS 작업에서 다른 계정의 리소스에 액세스하려면 어떻게 해야 합니까?

4분 분량
0

Amazon Elastic Container Service(Amazon ECS) 작업에서 다른 AWS 계정의 리소스에 액세스하도록 하고 싶습니다.

해결 방법

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

Amazon ECS 작업에 대한 교차 계정 액세스를 설정하려면 AWS Identity and Access Management (IAM) 역할과 교차 계정 역할 수임을 사용하십시오.

이 해결 방법에서는 다음 구성을 사용합니다.

  • 계정 A는 리소스 소유자 계정입니다.
  • 계정 B는 Amazon ECS 작업이 포함된 계정입니다.

전제 조건: 계정 B의 Amazon ECS 작업 정의에는 IAM 작업 역할이 있어야 합니다. IAM 작업 역할을 생성한 후 작업 역할 ARN을 포함하도록 ](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/update-task-definition-console-v2.html#update-task-definition-console-v2-procedure)Amazon ECS 작업 정의를 업데이트[하십시오.

계정 A 구성

다음 단계를 완료합니다.

  1. 리소스에 액세스할 IAM 역할을 생성하고 사용자 지정 신뢰 정책에 대해 다음과 같은 신뢰 관계를 입력합니다.
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::Account_B_ID:role/ECS_Task_Role_Name"
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    참고: Account_B_ID를 계정 B의 계정 ID로 바꾸고, ECS_Task_Role_Name을 계정 B의 Amazon ECS 작업 역할 이름으로 바꾸십시오.
  2. 리소스에 액세스하는 데 필요한 권한이 있는 새 IAM 역할에 인라인 정책을 연결합니다. 다음 예제 정책은 IAM 역할이 메시지를 Amazon Simple Queue Service(Amazon SQS) 대기열로 전송하도록 허용합니다.
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "sqs:SendMessage"
                ],
                "Resource": "arn:aws:sqs:region:Account_A_ID:QueueName"
            }
        ]
    }
    참고: 작업이 AWS Fargate에서 실행되는 경우 IAM 역할에 ECS Exec 권한이 있는지 확인하십시오.

계정 B 구성

작업 정의의 Amazon ECS 작업 역할에 작업이 계정 A의 IAM 역할을 맡을 수 있도록 하는 인라인 정책을 연결합니다.

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

참고: Account_A_ID를 계정 A의 계정 ID로 바꾸십시오.

계정 B의 작업 컨테이너가 계정 A의 리소스에 액세스할 수 있는지 확인

다음 단계를 완료합니다.

  1. Amazon Elastic Compute Cloud(Amazon EC2)에서 작업을 실행하는 경우 작업의 컨테이너 인스턴스 내에서 docker exec 명령을 사용합니다. 자세한 내용은 Docker Docs 웹사이트에서 실행 중인 컨테이너에서 docker exec 실행을 참조하십시오. 그런 다음, 3단계로 진행합니다.
    Fargate에서 작업을 실행하는 경우 독립 실행형 작업 또는 서비스에 대해 ECS Exec을 활성화하십시오.
    참고: 다음 명령에서 cluster-name을 클러스터 이름으로 바꾸고, your-task-definition을 계정 B의 작업 정의로 바꾸고, region-name을 AWS 리전으로 바꾸십시오. 또한 FARGATE를 해당 시작 유형으로 바꾸십시오.
    독립형 작업의 경우 다음 run-task 명령을 실행합니다.

    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

    서비스의 경우 다음 update-service 명령을 실행합니다.

    aws ecs update-service --service service-name --cluster cluster-name --enable-execute-command --region region-name --force-new-deployment
  2. ECS Exec을 사용하여 컨테이너 인스턴스에 원격으로 연결하려면 다음 execute-command 명령을 실행합니다.

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

    참고: cluster-name을 클러스터 이름으로, taskID를 작업 ID로, container-name을 컨테이너 이름으로 바꾸십시오.

  3. 컨테이너 내에서 다음 명령을 실행하여 구성 파일에 교차 계정 프로필을 생성합니다.

    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

    참고: Account_A_ID를 계정 A의 계정 ID로 바꾸십시오.

  4. 컨테이너가 맡은 역할을 확인하려면 다음 명령을 실행합니다.

    bash-4.2# aws sts get-caller-identity

    결과에서 역할이 계정 B의 작업 역할인지 확인합니다.
    출력 예시:

    {
        "Account": "Account_B_ID",
        "UserId": "AROATCLZDNI7EB3PZGY56:8db9330e660542b7b55595b06fef82cd",
        "Arn": "arn:aws:sts::Account_B_ID:assumed-role/task-role/8db9330e660542b7b55595b06fef82cd"
    }
  5. 컨테이너가 교차 계정 역할을 맡을 수 있는지 확인하려면 다음 명령을 실행합니다.

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

    출력 예시:

    {
        "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. 계정 B에서 계정 A의 리소스에 액세스할 수 있는지 확인합니다. 다음 예제 명령은 SQS 대기열에 액세스합니다.

    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

    참고: region을 해당 리전으로 바꾸고, Account_A_ID를 계정 A의 계정 ID로 바꾸고, QueueName을 SQS 대기열의 이름으로 바꾸십시오.
    출력 예시:

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

    출력은 계정 B의 Amazon ECS 작업이 계정 A의 SQS 대기열에 메시지를 전송할 수 있음을 확인합니다.

관련 정보

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

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

AWS CLI에서 IAM 역할 사용

AWS 공식업데이트됨 일 년 전