Amazon EC2 리소스 생성 중 태그 지정 권한 부여

Amazon EC2 리소스 생성 중 태그 지정 권한 부여 (Grant permission to tag Amazon EC2 resources during creation)

리소스를 생성하는 일부 Amazon EC2 API 작업은 리소스를 만들 때 태그를 지정할 수 있게 해줘요. 리소스 태그를 사용해 속성 기반 제어(ABAC)를 구현할 수 있어요. 자세한 내용은 Tag your resources와 Control access using attribute-based access를 참고하세요.

출처: 문서

본문

사용자가 생성 시 리소스에 태그를 지정할 수 있게 하려면, ec2:RunInstances나 ec2:CreateVolume 같이 리소스를 생성하는 작업을 사용할 권한이 있어야 해요. 리소스 생성 작업에서 태그가 지정되면 Amazon은 ec2:CreateTags 작업에 대한 추가 권한 부여를 수행해 사용자가 태그를 만들 권한이 있는지 확인해요. 따라서 사용자에게 ec2:CreateTags 작업을 사용할 명시적 권한도 있어야 해요.

ec2:CreateTags 작업의 IAM 정책 정의에서 ec2:CreateAction 조건 키와 함께 Condition 요소를 사용해 리소스를 생성하는 작업에 태그 지정 권한을 부여해요.

다음 예시는 사용자가 인스턴스를 시작하고 시작 중에 인스턴스와 볼륨에 어떤 태그든 적용할 수 있게 허용하는 정책을 보여줘요. 사용자는 기존 리소스에는 태그를 지정할 수 없어요(ec2:CreateTags 작업을 직접 호출할 수 없음).

{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
         "ec2:RunInstances"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
         "ec2:CreateTags"
      ],
      "Resource": "arn:aws:ec2:us-east-1:111122223333:*/*",
      "Condition": {
         "StringEquals": {
             "ec2:CreateAction" : "RunInstances"
          }
       }
    }
  ]
}

마찬가지로, 다음 정책은 사용자가 볼륨을 만들고 볼륨 생성 중에 볼륨에 어떤 태그든 적용할 수 있게 허용해요. 사용자는 기존 리소스에는 태그를 지정할 수 없어요(ec2:CreateTags 작업을 직접 호출할 수 없음).

{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
         "ec2:CreateVolume"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
         "ec2:CreateTags"
      ],
      "Resource": "arn:aws:ec2:us-east-1:111122223333:*/*",
      "Condition": {
         "StringEquals": {
             "ec2:CreateAction" : "CreateVolume"
          }
       }
    }
  ]
}

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

ec2:CreateTags 작업은 시작 템플릿(launch template)에 태그가 제공되는 경우에도 평가돼요. 예시 정책은 Tags in a launch template을 참고하세요.

특정 태그에 대한 액세스 제어 (Control access to specific tags)

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

이 조건 키는 태그 지정을 지원하는 리소스 생성 작업뿐 아니라 ec2:CreateTags와 ec2:DeleteTags 작업에도 적용할 수 있어요. Amazon EC2 API 작업이 태그 지정을 지원하는지 알아보려면 Actions, resources, and condition keys for Amazon EC2를 참고하세요.

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

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

예시 IAM 정책은 Example policies to control access the Amazon EC2 API를 참고하세요. 자세한 내용은 IAM User Guide의 Conditions with multiple context keys or values를 참고하세요.

더 알아보기 (Learn more)