Amazon ECS 작업 IAM 역할 - Amazon Elastic Container Service

Amazon ECS 작업 IAM 역할

Amazon ECS 작업에는 IAM 역할이 연결될 수 있습니다. IAM 역할에서 부여된 권한은 작업에서 실행 중인 컨테이너에 위임됩니다. 이 역할을 통해 컨테이너의 애플리케이션 코드가 다른 AWS 서비스를 사용할 수 있습니다. 애플리케이션이 Amazon S3와 같은 다른 AWS 서비스에 액세스할 때 작업 역할이 필요합니다. Amazon ECS가 컨테이너 이미지를 가져오고 작업을 실행하는 데 필요한 IAM 권한에 대해서는 Amazon ECS 태스크 실행 IAM 역할을 참조하세요.

다음은 작업 역할 사용 시 이점입니다.

  • 자격 증명 격리: 컨테이너만 해당 컨테이너가 속하는 태스크 정의에 정의된 IAM 역할에 대한 자격 증명을 검색할 수 있습니다. 다른 작업에 속하는 다른 컨테이너에 대해 정의된 자격 증명에는 액세스할 수 없습니다.

  • 권한 부여: 권한이 없는 컨테이너는 다른 태스크에 대해 정의된 IAM 역할 자격 증명에 액세스할 수 없습니다.

  • 감사: CloudTrail을 통한 액세스 및 이벤트 로깅을 사용하여 소급적 감사를 보장합니다. 태스크 자격 증명은 세션에 연결된 taskArn의 컨텍스트가 있으므로 CloudTrail 로그에 어느 태스크가 어느 역할을 사용하는지 표시됩니다.

참고

작업에 대한 IAM 역할을 지정할 때 해당 작업에 대한 컨테이너의 AWS CLI 또는 다른 SDK는 작업 역할에 의해 단독으로 제공된 AWS 자격 증명을 사용하며 Amazon EC2 또는 실행 중인 외부 인스턴스에서 IAM 권한을 더 이상 상속하지 않습니다.

작업 IAM 역할 생성

작업에서 사용할 IAM 정책을 생성할 때 작업의 컨테이너에서 수임하려는 권한을 정책에 포함해야 합니다. 기존 AWS 관리형 정책을 사용하거나 특정 요구 사항에 맞는 사용자 지정 정책을 새로 생성할 수 있습니다. 자세한 내용은 IAM 사용자 설명서에서 IAM 정책 생성을 참조하세요.

중요

(모든 시작 유형에 대한) Amazon ECS 태스크의 경우 태스크에 대해 IAM 정책과 역할을 사용하는 것이 좋습니다. 이 자격 증명을 사용하면 태스크가 sts:AssumeRole을 호출하지 않고 AWS API 요청을 보내고 태스크와 이미 연결된 것과 동일한 역할을 수입할 수 있습니다. 태스크가 자체적으로 역할을 수임하는 경우 해당 역할이 자체적으로 수임하도록 명시적으로 허용하는 신뢰 정책을 생성해야 합니다. 자세한 내용은 IAM 사용 설명서역할 트러스트 정책 업데이트를 참조하세요.

IAM 정책이 생성되면 Amazon ECS 작업 정의에 참조하는 정책을 포함하는 IAM 역할을 생성할 수 있습니다. IAM 콘솔에서 Elastic Container Service Task 사용 사례를 사용해 역할을 생성할 수 있습니다. 그런 다음, 작업의 컨테이너에 필요한 권한을 부여하는 특정 IAM 정책을 역할과 연결할 수 있습니다. 아래 절차에 이렇게 하는 방법이 나와 있습니다.

IAM 권한이 필요한 태스크 정의 또는 서비스가 여러 개인 경우 각 태스크 정의 또는 서비스에 대해 태스크에 필요한 권한을 최소한으로 포함하는 역할을 생성하여 각 태스크에 제공하는 액세스를 최소화할 것을 고려해야 합니다.

리전의 서비스 엔드포인트에 대한 자세한 내용은 Amazon Web Services 일반 참조 참조 가이드의 Service endpoints를 참조하세요.

IAM 작업 역할에는 ecs-tasks.amazonaws.com 서비스를 지정하는 신뢰 정책이 있어야 합니다. sts:AssumeRole 권한을 사용하면 작업이 Amazon EC2 인스턴스에서 사용하는 것과 다른 IAM 역할을 맡을 수 있습니다. 이렇게 하면 작업이 Amazon EC2 인스턴스와 연결된 역할을 상속하지 않습니다. 다음은 신뢰 정책 예시입니다. 리전 식별자를 바꾸고 작업을 시작할 때 사용하는 AWS 계정 번호를 지정합니다.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":[ "ecs-tasks.amazonaws.com" ] }, "Action":"sts:AssumeRole", "Condition":{ "ArnLike":{ "aws:SourceArn":"arn:aws:ecs:us-west-2:111122223333:*" }, "StringEquals":{ "aws:SourceAccount":"111122223333" } } } ] }
중요

작업 IAM 역할을 생성할 때는 혼동된 대리인 보안 문제를 방지하기 위해 추가로 권한 범위를 지정하도록 신뢰 관계 또는 역할에 연결된 IAM 정책에서 aws:SourceAccount 또는 aws:SourceArn 조건 키를 사용하는 것이 좋습니다. aws:SourceArn 조건 키를 사용하여 특정 클러스터를 지정하는 작업은 현재 지원되지 않으므로 와일드카드를 사용하여 모든 클러스터를 지정해야 합니다. 혼동되는 대리인 문제 및 AWS 계정 보호 방법에 대해 자세히 알아보려면, IAM 사용 설명서혼동되는 대리인 문제를 참조하세요.

다음 절차에서는 예제 정책을 사용하여 Amazon S3에서 객체를 검색하는 정책을 생성하는 방법을 설명합니다. 모든 사용자 입력을 고유한 값으로 바꿉니다.

AWS Management Console
JSON 정책 편집기를 사용하여 정책을 생성하려면
  1. AWS Management Console에 로그인하여 https://console.aws.amazon.com/iam/ 에서 IAM 콘솔을 엽니다.

  2. 왼쪽의 탐색 창에서 정책을 선택합니다.

    정책을 처음으로 선택하는 경우 관리형 정책 소개 페이지가 나타납니다. 시작을 선택합니다.

  3. 페이지 상단에서 정책 생성을 선택합니다.

  4. 정책 편집기 섹션에서 JSON 옵션을 선택합니다.

  5. 다음 JSON 정책 문서를 입력합니다.

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObject" ], "Resource":[ "arn:aws:s3:::my-task-secrets-bucket/*" ], "Condition":{ "ArnLike":{ "aws:SourceArn":"arn:aws:ecs:region:123456789012:*" }, "StringEquals":{ "aws:SourceAccount":"123456789012" } } } ] }
  6. Next(다음)를 선택합니다.

    참고

    언제든지 시각적 편집기 옵션과 JSON 편집기 옵션 간에 전환할 수 있습니다. 그러나 변경을 적용하거나 시각적 편집기에서 다음을 선택한 경우 IAM은 시각적 편집기에 최적화되도록 정책을 재구성할 수 있습니다. 자세한 내용은 IAM 사용 설명서정책 재구성을 참조하십시오.

  7. 검토 및 생성 페이지에서 생성하는 정책에 대한 정책 이름설명(선택 사항)을 입력합니다. 이 정책에 정의된 권한을 검토하여 정책이 부여한 권한을 확인합니다.

  8. 정책 생성을 선택하고 새로운 정책을 저장합니다.

AWS CLI

모든 사용자 입력을 고유한 값으로 바꿉니다.

  1. 다음 콘텐츠를 통해 s3-policy.json이라는 파일을 생성합니다.

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObject" ], "Resource":[ "arn:aws:s3:::my-task-secrets-bucket/*" ], "Condition":{ "ArnLike":{ "aws:SourceArn":"arn:aws:ecs:region:123456789012:*" }, "StringEquals":{ "aws:SourceAccount":"123456789012" } } } ] }
  2. 다음 명령을 사용하여 JSON 정책 문서 파일을 사용해 IAM 정책을 생성합니다.

    aws iam create-policy \ --policy-name taskRolePolicy \ --policy-document file://s3-policy.json

다음 절차에서는 사용자가 생성한 IAM 정책을 연결하여 작업 IAM 역할을 생성하는 방법을 설명합니다.

AWS Management Console
Elastic Container Service에 대한 서비스 역할을 생성하는 방법(IAM 콘솔)
  1. AWS Management Console에 로그인하여 https://console.aws.amazon.com/iam/ 에서 IAM 콘솔을 엽니다.

  2. IAM 콘솔의 탐색 창에서 역할을 선택하고 역할 생성을 선택합니다.

  3. 신뢰할 수 있는 엔터티 유형AWS 서비스를 선택합니다.

  4. 서비스 또는 사용 사례의 경우 Elastic Container Service를 선택하고 Elastic Container Service 작업 사용 사례를 선택합니다.

  5. Next(다음)를 선택합니다.

  6. 권한 추가에서 사용자가 생성한 정책을 검색하고 선택합니다.

  7. Next(다음)를 선택합니다.

  8. 역할 이름에 역할의 이름을 입력합니다. 이 예에서는 역할 이름에 AmazonECSTaskS3BucketRole을(를) 입력합니다.

  9. 역할을 검토한 다음 역할 생성을 선택합니다.

AWS CLI

모든 사용자 입력을 고유한 값으로 바꿉니다.

  1. 작업 IAM 역할에 사용할 신뢰 정책을 포함하는 ecs-tasks-trust-policy.json 이름의 파일을 생성합니다. 파일에 다음을 포함해야 합니다. 리전 식별자를 바꾸고 작업을 시작할 때 사용하는 AWS 계정 번호를 지정합니다.

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":[ "ecs-tasks.amazonaws.com" ] }, "Action":"sts:AssumeRole", "Condition":{ "ArnLike":{ "aws:SourceArn":"arn:aws:ecs:us-west-2:111122223333:*" }, "StringEquals":{ "aws:SourceAccount":"111122223333" } } } ] }
  2. 이전 단계에서 만든 신뢰 정책을 사용하여 ecsTaskRole이라는 IAM 역할을 생성합니다.

    aws iam create-role \ --role-name ecsTaskRole \ --assume-role-policy-document file://ecs-tasks-trust-policy.json
  3. 다음 명령을 사용하여 생성한 IAM 정책의 ARN을 검색합니다. taskRolePolicy를 사용자가 생성한 정책 이름으로 바꿉니다.

    aws iam list-policies --scope Local --query 'Policies[?PolicyName==`taskRolePolicy`].Arn'
  4. 생성한 IAM 정책을 ecsTaskRole 역할에 연결합니다. policy-arn을 사용자가 생성한 정책의 ARN으로 바꿉니다.

    aws iam attach-role-policy \ --role-name ecsTaskRole \ --policy-arn arn:aws:iam:111122223333:aws:policy/taskRolePolicy

역할을 생성한 후 다음 기능에 대한 추가 권한을 역할에 추가합니다.

기능 추가 권한

ECS Exec 사용

ECS Exec 권한

EC2 인스턴스 사용(Windows 및 Linux)

Amazon EC2 인스턴스 추가 구성

외부 인스턴스 사용

외부 인스턴스 추가 구성

Windows EC2 인스턴스 사용

Amazon EC2 Windows 인스턴스 추가 구성

ECS Exec 권한

ECS Exec 기능을 사용하려면 관리형 SSM 에이전트(execute-command 에이전트)와 SSM 서비스 간의 통신에 필요한 권한을 컨테이너에 부여하기 위한 작업 IAM 역할이 필요합니다. 작업 IAM 역할에 다음 권한을 추가하고 태스크 정의에 작업 IAM 역할을 포함해야 합니다. 자세한 내용은 IAM 사용 설명서IAM 정책 추가 및 제거를 참조하세요.

작업 IAM 역할에 대해 다음 정책을 사용하여 필수 SSM 권한을 추가합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssmmessages:CreateControlChannel", "ssmmessages:CreateDataChannel", "ssmmessages:OpenControlChannel", "ssmmessages:OpenDataChannel" ], "Resource": "*" } ] }

Amazon EC2 인스턴스 추가 구성

컨테이너 인스턴스 역할의 권한을 AmazonEC2ContainerServiceforEC2Role 관리형 IAM 정책에서 사용되는 최소 권한 목록으로 제한하는 것이 좋습니다.

작업 역할을 사용하려면 Amazon EC2 인스턴스에 버전 1.11.0 이상의 컨테이너 에이전트가 필요합니다. 하지만 최신 컨테이너 에이전트 버전을 사용할 것을 권장합니다. 에이전트 버전을 확인하고 최신 버전으로 업데이트하는 방법에 대한 자세한 정보는 Amazon ECS 컨테이너 에이전트 업데이트 섹션을 참조하세요. Amazon ECS 최적화 AMI를 사용하는 경우 인스턴스에는 1.11.0-1 이상의 ecs-init 패키지가 필요합니다. 인스턴스가 Amazon ECS 최적화 AMI를 사용하는 경우 필요한 버전의 컨테이너 에이전트 및 ecs-init이(가) 포함되어 있습니다. 자세한 내용은 Amazon ECS 최적화 Linux AMI 단원을 참조하십시오.

컨테이너 인스턴스에 Amazon ECS 최적화 AMI를 사용하지 않는 경우 에이전트를 시작하는 --net=host 명령에 docker run 옵션과 원하는 구성에 대한 다음 에이전트 변수를 추가합니다(자세한 내용은 Amazon ECS 컨테이너 에이전트 구성 참조).

ECS_ENABLE_TASK_IAM_ROLE=true

bridgedefault 네트워크 모드의 컨테이너 작업에 대한 IAM 역할을 활성화합니다.

ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true

host 네트워크 모드의 컨테이너 작업에 대한 IAM 역할을 사용합니다. 이 변수는 에이전트 버전 1.12.0 이상에서만 지원됩니다.

예제 실행 명령은 Amazon ECS 컨테이너 에이전트를 수동으로 업데이트하는 방법(비 Amazon ECS 최적화 AMI) 섹션을 참조하세요. 또한 태스크의 컨테이너가 AWS 자격 증명을 검색할 수 있도록 컨테이너 인스턴스에서 다음 네트워킹 명령을 설정해야 합니다.

sudo sysctl -w net.ipv4.conf.all.route_localnet=1 sudo iptables -t nat -A PREROUTING -p tcp -d 169.254.170.2 --dport 80 -j DNAT --to-destination 127.0.0.1:51679 sudo iptables -t nat -A OUTPUT -d 169.254.170.2 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 51679

재부팅 시 이러한 iptables 규칙이 유지되게 하려면 규칙을 컨테이너 인스턴스에 저장해야 합니다. iptables-save 명령과 iptables-restore 명령을 사용하여 iptables 규칙을 저장하고 부팅 시 복원할 수 있습니다. 자세한 정보는 해당 운영 체제 설명서를 참조하세요.

awsvpc 네트워크 모드를 사용하는 작업이 실행하는 컨테이너가 Amazon EC2 인스턴스 프로파일에 제공된 자격 증명 정보에 액세스하지 못하게 방지하려면(단, 작업 역할에 제공된 권한은 허용) 에이전트 구성 파일의 ECS_AWSVPC_BLOCK_IMDS 에이전트 구성 변수를 true(으)로 설정하고 에이전트를 다시 시작합니다. 자세한 정보는 Amazon ECS 컨테이너 에이전트 구성을 참조하세요.

bridge 네트워크 모드를 사용하는 작업이 실행하는 컨테이너가 Amazon EC2 인스턴스 프로파일에 제공된 자격 증명에 액세스하지 못하게 방지하려면(단, 작업 역할에 제공된 권한은 허용) Amazon EC2 인스턴스에서 다음 iptables 명령을 실행합니다. 이 명령은 host 또는 awsvpc 네트워크 모드를 사용하는 작업 내 컨테이너에는 영향을 미치지 않습니다. 자세한 정보는 네트워크 모드을 참조하세요.

  • sudo yum install -y iptables-services; sudo iptables --insert DOCKER-USER 1 --in-interface docker+ --destination 169.254.169.254/32 --jump DROP

    재부팅 시 이 iptables 규칙이 유지되게 하려면 규칙을 Amazon EC2 인스턴스에 저장해야 합니다. Amazon ECS 최적화 AMI를 사용하는 경우 다음 명령을 사용할 수 있습니다. 다른 운영 체제의 경우 해당 운영 체제 설명서를 참조하세요.

    sudo iptables-save | sudo tee /etc/sysconfig/iptables && sudo systemctl enable --now iptables

외부 인스턴스 추가 구성

작업 IAM 역할을 사용하려면 외부 인스턴스에 버전 1.11.0 이상의 컨테이너 에이전트가 필요합니다. 하지만 최신 컨테이너 에이전트 버전을 사용할 것을 권장합니다. 에이전트 버전을 확인하고 최신 버전으로 업데이트하는 방법에 대한 자세한 정보는 Amazon ECS 컨테이너 에이전트 업데이트 섹션을 참조하세요. Amazon ECS 최적화 AMI를 사용하는 경우 해당 인스턴스에는 1.11.0-1 이상의 ecs-init 패키지가 필요합니다. 인스턴스가 Amazon ECS 최적화 AMI를 사용하는 경우 필요한 버전의 컨테이너 에이전트 및 ecs-init이(가) 포함되어 있습니다. 자세한 내용은 Amazon ECS 최적화 Linux AMI 단원을 참조하십시오.

컨테이너 인스턴스에 Amazon ECS 최적화 AMI를 사용하지 않는 경우 에이전트를 시작하는 --net=host 명령에 docker run 옵션과 원하는 구성에 대한 다음 에이전트 변수를 추가합니다(자세한 내용은 Amazon ECS 컨테이너 에이전트 구성 참조).

ECS_ENABLE_TASK_IAM_ROLE=true

bridgedefault 네트워크 모드의 컨테이너 작업에 대한 IAM 역할을 활성화합니다.

ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true

host 네트워크 모드의 컨테이너 작업에 대한 IAM 역할을 사용합니다. 이 변수는 에이전트 버전 1.12.0 이상에서만 지원됩니다.

예제 실행 명령은 Amazon ECS 컨테이너 에이전트를 수동으로 업데이트하는 방법(비 Amazon ECS 최적화 AMI) 섹션을 참조하세요. 또한 태스크의 컨테이너가 AWS 자격 증명을 검색할 수 있도록 컨테이너 인스턴스에서 다음 네트워킹 명령을 설정해야 합니다.

sudo sysctl -w net.ipv4.conf.all.route_localnet=1 sudo iptables -t nat -A PREROUTING -p tcp -d 169.254.170.2 --dport 80 -j DNAT --to-destination 127.0.0.1:51679 sudo iptables -t nat -A OUTPUT -d 169.254.170.2 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 51679

재부팅 시 이러한 iptables 규칙이 유지되게 하려면 규칙을 컨테이너 인스턴스에 저장해야 합니다. iptables-save 명령과 iptables-restore 명령을 사용하여 iptables 규칙을 저장하고 부팅 시 복원할 수 있습니다. 자세한 정보는 해당 운영 체제 설명서를 참조하세요.

Amazon EC2 Windows 인스턴스 추가 구성

중요

이는 작업 역할을 사용하는 EC2의 Windows 컨테이너에만 적용됩니다.

Windows 기능이 포함된 작업 역할을 사용하려면 EC2에서 추가 구성이 필요합니다.

  • 컨테이너 인스턴스를 시작할 때 컨테이너 인스턴스 사용자 데이터 스크립트에 -EnableTaskIAMRole 옵션을 설정해야 합니다. EnableTaskIAMRole은 태스크에 대한 태스크 IAM 역할 기능을 켭니다. 예:

    <powershell> Import-Module ECSTools Initialize-ECSAgent -Cluster 'windows' -EnableTaskIAMRole </powershell>
  • Amazon ECS 컨테이너 부트스트랩 스크립트에서 제공되는 네트워킹 명령을 사용하여 컨테이너를 부트스트랩해야 합니다.

  • 태스크를 위한 IAM 역할과 정책을 생성해야 합니다. 자세한 내용은 작업 IAM 역할 생성 단원을 참조하십시오.

  • 작업 자격 증명 공급자를 위한 IAM 역할은 컨테이너 인스턴스에서 포트 80을 사용합니다. 따라서 컨테이너 인스턴스에서 태스크에 대한 IAM 역할을 구성하면 컨테이너는 어떤 포트 매핑에서도 호스트 포트로 포트 80을 사용할 수 없습니다. 포트 80에서 컨테이너를 노출하려면 로드 밸런싱을 사용하는 컨테이너를 위한 서비스를 구성하는 것이 좋습니다. 로드 밸런서에서 포트 80을 사용할 수 있습니다. 이렇게 하면 트래픽을 컨테이너 인스턴스 상의 다른 호스트 포트로 라우팅할 수 있습니다. 자세한 정보는 로드 밸런싱을 사용하여 Amazon ECS 서비스 트래픽 분산 섹션을 참조하세요.

  • Windows 인스턴스가 다시 시작되면 프록시 인터페이스를 삭제하고 Amazon ECS 컨테이너 에이전트를 다시 초기화하여 자격 증명 프록시를 다시 불러와야 합니다.

Amazon ECS 컨테이너 부트스트랩 스크립트

컨테이너가 컨테이너 인스턴스에서 자격 증명 프록시에 액세스하여 자격 증명을 얻으려면 먼저 필요한 네트워킹 명령을 사용하여 컨테이너를 부트스트랩해야 합니다. 다음 코드 예제 스크립트는 시작할 때 컨테이너에서 실행되어야 합니다.

참고

Windows에서 awsvpc 네트워크 모드를 사용할 때 이 스크립트를 실행할 필요가 없습니다.

Powershell이 포함된 Windows 컨테이너를 실행하는 경우 다음 스크립트를 사용하세요.

# Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"). You may # not use this file except in compliance with the License. A copy of the # License is located at # # http://aws.amazon.com/apache2.0/ # # or in the "license" file accompanying this file. This file is distributed # on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language governing # permissions and limitations under the License. $gateway = (Get-NetRoute | Where { $_.DestinationPrefix -eq '0.0.0.0/0' } | Sort-Object RouteMetric | Select NextHop).NextHop $ifIndex = (Get-NetAdapter -InterfaceDescription "Hyper-V Virtual Ethernet*" | Sort-Object | Select ifIndex).ifIndex New-NetRoute -DestinationPrefix 169.254.170.2/32 -InterfaceIndex $ifIndex -NextHop $gateway -PolicyStore ActiveStore # credentials API New-NetRoute -DestinationPrefix 169.254.169.254/32 -InterfaceIndex $ifIndex -NextHop $gateway -PolicyStore ActiveStore # metadata API

Command 셸만 있는 Windows 컨테이너를 실행하는 경우 다음 스크립트를 사용합니다.

# Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"). You may # not use this file except in compliance with the License. A copy of the # License is located at # # http://aws.amazon.com/apache2.0/ # # or in the "license" file accompanying this file. This file is distributed # on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language governing # permissions and limitations under the License. for /f "tokens=1" %i in ('netsh interface ipv4 show interfaces ^| findstr /x /r ".*vEthernet.*"') do set interface=%i for /f "tokens=3" %i in ('netsh interface ipv4 show addresses %interface% ^| findstr /x /r ".*Default.Gateway.*"') do set gateway=%i netsh interface ipv4 add route prefix=169.254.170.2/32 interface="%interface%" nexthop="%gateway%" store=active # credentials API netsh interface ipv4 add route prefix=169.254.169.254/32 interface="%interface%" nexthop="%gateway%" store=active # metadata API