태스크 IAM 역할 - Amazon Elastic Container Service

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

태스크 IAM 역할

Amazon ECS 작업에는 IAM 역할이 연결될 수 있습니다. IAM 역할에서 부여된 권한은 작업에서 실행 중인 컨테이너에 위임됩니다. Amazon ECS가 컨테이너 이미지를 가져오고 작업을 실행하는 데 필요한 IAM 권한에 대해서는 Amazon ECS 태스크 실행 IAM 역할을 참조하세요.

컨테이너화된 애플리케이션이 AWS API를 호출해야 하는 경우 AWS 자격 증명으로 AWS API 요청에 서명해야 하며, 작업 IAM 역할은 Amazon EC2 인스턴스 프로필이 Amazon EC2 인스턴스에 자격 증명을 제공하는 방식과 유사하게 애플리케이션이 사용할 자격 증명을 관리하는 전략을 제공합니다. AWS 자격 증명을 생성하여 컨테이너에 배포하거나 Amazon EC2 인스턴스의 역할을 사용하는 대신, IAM 역할을 Amazon ECS 작업 정의 또는 RunTask API 작업과 연결할 수 있습니다. 그러면 컨테이너가 AWS SDK를 사용하거나 승인된 서비스에 API 요청을 보낼 수 있습니다 AWS CLI . AWS

다음은 작업에 IAM 역할을 사용할 때의 이점을 설명합니다.

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

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

  • 감사 가능성: 회고적 감사를 보장하기 CloudTrail 위해 액세스 및 이벤트 로깅을 사용할 수 있습니다. 작업 자격 증명에는 taskArn 해당 컨텍스트가 세션에 첨부되어 있으므로 CloudTrail 로그에는 어떤 작업이 어떤 역할을 사용하고 있는지 알 수 있습니다.

참고

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

작업 정의에 사용할 작업 IAM 역할을 정의하거나 RunTask API 작업을 사용하여 수동으로 작업을 실행할 경우 taskRoleArn 오버라이드를 사용할 수 있습니다. Amazon ECS 에이전트는 역할 자격 증명이 지정된 추가 필드를 사용하여 태스크를 시작하기 위한 페이로드 메시지를 수신합니다. Amazon ECS 에이전트는 태스크의 인증 토큰이 페이로드에서 수신된 역할 자격 증명을 가리키도록 고유한 태스크 자격 증명 ID를 인증 토큰으로 설정하고 내부 자격 증명 캐시를 업데이트합니다. Amazon ECS 에이전트는 다음 URI: /credential_provider_version/credentials?id=task_credential_id를 사용하여 이 태스크에 속하는 모든 컨테이너에 대해 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI 환경 변수를 Env 객체(docker inspect container_id 명령으로 사용 가능)에 채웁니다.

컨테이너 내부에서 다음 명령을 사용하여 자격 증명 엔드포인트를 쿼리할 수 있습니다.

curl 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI

출력:

{ "AccessKeyId": "ACCESS_KEY_ID", "Expiration": "EXPIRATION_DATE", "RoleArn": "TASK_ROLE_ARN", "SecretAccessKey": "SECRET_ACCESS_KEY", "Token": "SECURITY_TOKEN_STRING" }

Amazon EC2 인스턴스에서 최소 버전의 1.11.0 컨테이너 에이전트와 지원되는 버전의 AWS CLI 또는 SDK를 사용하는 경우 SDK 클라이언트는 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI 변수를 사용할 수 있음을 확인하고 제공된 자격 증명을 사용하여 API를 호출합니다. AWS 자세한 설명은 Amazon EC2 또는 외부 인스턴스에서 작업 IAM 역할 활성화 섹션을 참조하세요.

자격 증명 공급자가 사용될 때마다 요청이 /var/log/ecs/audit.log.YYYY-MM-DD-HH의 호스트 컨테이너 인스턴스에 로컬로 기록됩니다. 자세한 설명은 작업 자격 증명 감사 로그를 위한 IAM 역할 섹션을 참조하세요.

Amazon EC2 인스턴스에서 호스팅되는 태스크에 대한 고려 사항

Amazon EC2 인스턴스에서 실행 중인 태스크에 IAM 역할을 사용할 때 컨테이너는 Amazon EC2 인스턴스 메타데이터 서버를 통해 Amazon EC2 인스턴스 프로파일에 제공되는 자격 증명에 액세스할 수 있습니다. 컨테이너 인스턴스 역할의 권한을 AmazonEC2ContainerServiceforEC2Role 관리형 IAM 정책에서 사용되는 최소 권한 목록으로 제한하는 것이 좋습니다. 자세한 정보는 Amazon ECS 컨테이너 인스턴스 IAM 역할을 참조하세요.

Amazon EC2 인스턴스에서 호스팅되는 태스크에 태스크 IAM 역할을 사용할 때 다음 사항도 고려해야 합니다.

  • 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

Amazon EC2 또는 외부 인스턴스에서 작업 IAM 역할 활성화

작업 IAM 역할을 사용하려면 Amazon EC2 또는 외부 인스턴스에 버전 1.11.0 이상의 컨테이너 에이전트가 필요합니다. 하지만 최신 컨테이너 에이전트 버전을 사용할 것을 권장합니다. 에이전트 버전을 확인하고 최신 버전으로 업데이트하는 방법에 대한 자세한 정보는 Amazon ECS 컨테이너 에이전트 업데이트 섹션을 참조하세요. Amazon ECS 최적화 AMI를 사용하는 경우 해당 인스턴스에는 1.11.0-1 이상의 ecs-init 패키지가 필요합니다. 인스턴스가 Amazon ECS 최적화 AMI를 사용하는 경우 필요한 버전의 컨테이너 에이전트 및 ecs-init이(가) 포함되어 있습니다. 자세한 정보는 Amazon ECS 최적화 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 규칙을 저장하고 부팅 시 복원할 수 있습니다. 자세한 정보는 해당 운영 체제 설명서를 참조하세요.

작업에 대한 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 역할을 생성할 때는 역할과 관련된 신뢰 관계 aws:SourceAccount 또는 IAM 정책에서 또는 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. 다음을 선택합니다.

    참고

    언제든지 시각적 편집기 옵션과 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
작업에 대한 IAM 역할 생성 방법(AWS Management Console)
  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 창에서 역할(Roles), 역할 생성(Create role)을 선택합니다.

  3. 신뢰할 수 있는 엔터티 선택(Select trusted entity) 섹션에서 AWS 서비스를 선택합니다.

  4. 사용 사례(Use case)에서 드롭다운 메뉴를 사용하여Elastic Container Service, Elastic Container Service Task 사용 사례, 다음(Next)을 선택합니다.

  5. 권한 추가에서 생성한 정책을 검색하여 선택한 후 다음을 선택합니다.

  6. 단계 3: 이름, 검토 및 생성(Step 3: Name, review, and create)에서 다음을 수행합니다.

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

    2. (선택 사항) 설명(Description)에서 이 IAM 역할에 대한 설명을 지정합니다.

    3. 역할에 대한 신뢰할 수 있는 엔터티 및 권한 정책을 검토합니다.

    4. 태그 추가(Add tags)(선택 사항)에서 IAM 역할에 연결할 메타데이터 태그를 입력하고 역할 선택(Create role)을 선택합니다.

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에 필요한 IAM 권한

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

작업에 대한 IAM 역할 지정

역할을 생성하고 정책을 역할에 연결한 후 해당 역할을 수임하는 태스크를 실행할 수 있습니다. 이렇게 하기 위한 옵션은 여러 가지가 있습니다.

  • 태스크 정의에서 태스크에 대한 IAM 역할을 정의합니다. 새 태스크 정의를 생성하거나 기존 태스크 정의를 개정하고 앞서 생성한 역할을 지정합니다. 콘솔을 사용하여 태스크 정의를 생성하는 경우 태스크 역할 필드에서 IAM 역할을 선택합니다. 자세한 설명은 콘솔을 사용하여 작업 정의 생성 섹션을 참조하세요.

    AWS CLI 또는 SDK를 사용하는 경우 파라미터를 사용하여 taskRoleArn 작업 역할의 Amazon 리소스 이름 (ARN) 을 지정합니다. 자세한 내용은 TaskDefinitionAmazon ECS API 참조태스크 정의 파라미터 을 참조하십시오.

    참고

    Amazon ECS 서비스에서 IAM 태스크 역할을 사용하려는 경우 이 옵션이 필요합니다.

  • 태스크를 실행할 때 IAM 태스크 역할 재정의를 지정합니다. 태스크를 실행할 때 IAM 태스크 역할 오버라이드를 지정할 수 있습니다. AWS CLI 또는 SDK를 사용하는 경우 JSON 객체의 파라미터를 사용하여 작업 역할 taskRoleArn ARN을 지정하십시오. overrides overrides파라미터에 대한 자세한 내용은 Amazon ECS API 참조서 RunTaskTaskOverride을 참조하십시오. 콘솔을 사용한 재정의에 대한 자세한 내용은 을 참조하십시오. 애플리케이션을 Amazon ECS 태스크로 실행

참고

작업과 서비스를 실행하는 데 필요한 표준 Amazon ECS 권한 이외에, 사용자는 작업에 대한 IAM 역할을 사용하기 위한 iam:PassRole 권한도 필요합니다.