리소스 생성 시 태그 지정 권한 부여

리소스 생성 시 태그 지정 권한 부여

다음 태그-온-생성(tag-on create) Amazon ECS API 작업을 사용하면 리소스를 만들 때 태그를 지정할 수 있어요. 리소스 생성 작업에서 태그가 지정되면 AWS는 태그를 만들 수 있는 올바른 권한이 할당되었는지 확인하기 위해 추가 권한 부여를 수행합니다.

출처: 문서

본문

  • CreateCapacityProvider
  • CreateCluster
  • CreateService
  • CreateTaskSet
  • RegisterContainerInstance
  • RegisterTaskDefinition
  • RunTask
  • StartTask

리소스 태그를 사용해 속성 기반 제어(ABAC, attribute-based control)를 구현할 수 있어요. 자세한 내용은 리소스 태그로 Amazon ECS 리소스 액세스 제어(Control access to Amazon ECS resources using resource tags)와 Amazon ECS 리소스 태깅(Tagging Amazon ECS resources)을 참고하세요.

생성 시 태깅을 허용하려면 리소스를 만드는 작업(예: ecs:CreateCluster 또는 ecs:RunTask)을 사용할 권한과 ecs:TagResource 작업을 모두 포함하도록 정책을 만들거나 수정하세요.

다음 예시는 사용자가 클러스터를 만들고 클러스터 생성 중에 태그를 추가할 수 있도록 허용하는 정책입니다. 사용자는 기존 리소스에 태그를 지정할 수 없습니다(ecs:TagResource 작업을 직접 호출할 수 없어요).

{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
         "ecs:CreateCluster"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
         "ecs:TagResource"
      ],
      "Resource": "*",
      "Condition": {
         "StringEquals": {
                  "ecs:CreateAction": [
                      "CreateCluster",
                      "CreateCapacityProvider",
                      "CreateService",
                      "CreateTaskSet",
                      "RegisterContainerInstance",
                      "RegisterTaskDefinition",
                      "RunTask",
                      "StartTask"
                  ]
          }
       }
    }
  ]
}

ecs:TagResource 작업은 리소스 생성 작업 중에 태그가 적용될 때만 평가돼요. 따라서 리소스를 만들 권한이 있는 사용자(태깅 조건이 없다고 가정)는 요청에 태그가 지정되지 않으면 ecs:TagResource 작업을 사용할 권한이 필요하지 않습니다. 그러나 사용자가 태그와 함께 리소스를 만들려고 하면, 사용자에게 ecs:TagResource 작업을 사용할 권한이 없다면 요청이 실패해요.

Amazon ECS가 특정 태그에 대한 액세스를 제어하는 방법

IAM 정책의 Condition 요소에 추가 조건을 사용해 리소스에 적용할 수 있는 태그 키와 값을 제어할 수 있어요.

앞선 섹션의 예시와 함께 사용할 수 있는 조건 키는 다음과 같습니다:

  • aws:RequestTag — 특정 태그 키 또는 태그 키·값 조합이 요청에 있어야 함을 나타냅니다. 요청에 다른 태그도 지정할 수 있어요.
    • StringEquals 조건 연산자와 함께 사용해 특정 태그 키·값 조합을 적용합니다. 예를 들어 cost-center = cc123 태그를 적용하려면:
"StringEquals": { "aws:RequestTag/cost-center": "cc123" }
  • StringLike 조건 연산자와 함께 사용해 요청에 특정 태그 키를 적용합니다. 예를 들어 purpose 태그 키를 적용하려면:
"StringLike": { "aws:RequestTag/purpose": "*" }
  • aws:TagKeys — 요청에 사용되는 태그 키를 강제합니다.
    • ForAllValues 수정자와 함께 사용해 요청에 제공된 경우 특정 태그 키를 강제합니다(요청에 태그가 지정되면 특정 태그 키만 허용되고 다른 태그는 허용되지 않습니다). 예를 들어 environment 또는 cost-center 태그 키가 허용됩니다:
"ForAllValues:StringEquals": { "aws:TagKeys": ["environment","cost-center"] }
  • ForAnyValue 수정자와 함께 사용해 요청에 지정된 태그 키 중 하나 이상이 있어야 함을 강제합니다. 예를 들어 요청에 environment 또는 webserver 태그 키 중 하나 이상이 있어야 합니다:
"ForAnyValue:StringEquals": { "aws:TagKeys": ["environment","webserver"] }

이 조건 키는 태깅을 지원하는 리소스 생성 작업과 ecs:TagResource 작업 모두에 적용할 수 있어요. Amazon ECS API 작업이 태깅을 지원하는지 알아보려면 Amazon ECS의 작업, 리소스, 조건 키(Actions, resources, and condition keys for Amazon ECS)를 참고하세요.

리소스를 만들 때 사용자가 태그를 지정하도록 강제하려면 리소스 생성 작업에서 aws:RequestTag 조건 키 또는 ForAnyValue 수정자가 있는 aws:TagKeys 조건 키를 사용해야 해요. 사용자가 리소스 생성 작업에 태그를 지정하지 않으면 ecs:TagResource 작업은 평가되지 않습니다.

조건의 경우 조건 키는 대소문자를 구분하지 않고 조건 값은 대소문자를 구분해요. 따라서 태그 키의 대소문자 구분을 강제하려면 태그 키가 조건의 값으로 지정되는 aws:TagKeys 조건 키를 사용하세요.

다중 값 조건에 대한 자세한 내용은 IAM 사용자 가이드의 여러 컨텍스트 키 또는 값이 있는 조건(Conditions with multiple context keys or values)을 참고하세요.