AWS re:Post을(를) 사용하면 다음에 동의하게 됩니다. AWS re:Post 이용 약관

IAM 정책 태그를 사용하여 EC2 인스턴스 또는 EBS 볼륨의 생성 및 액세스 방법을 제한하려면 어떻게 해야 합니까?

5분 분량
0

AWS Identity and Access Management(IAM) ID에 액세스하여 새로운 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 시작할 수 있도록 하고 싶습니다. 또한 특정 태그를 적용할 때 IAM ID에 액세스하여 새 Amazon Elastic Block Store(Amazon EBS) 볼륨을 생성할 수 있도록 하고 싶습니다.

간략한 설명

리소스를 생성하는 API 호출의 일부로 EC2 인스턴스 및 Amazon EBS 볼륨의 태그를 지정합니다. 조건을 IAM 정책에 적용하여 IAM 사용자가 특정 리소스에 태그를 지정하도록 합니다.

다음 예시 정책은 사용자가 보안 그룹 또는 키 페어를 생성하는 것을 허용하지 않으므로 사용자는 기존 보안 그룹과 키 쌍을 선택해야 합니다.

다음 예시 IAM 정책은 사용자가 다음과 같은 구성을 가진 인스턴스를 시작할 수 있도록 허용합니다.

  • 일치하는 태그 키와 값
  • 하나 이상의 일치하는 태그와 값
  • 하나 이상의 일치하는 태그 키
  • 지정된 태그 목록만

또한 예시 IAM 정책을 통해 사용자는 태그 키와 값이 일치하는 인스턴스와 볼륨을 관리할 수 있습니다.

참고: 예시 정책을 사용하려면 예시 값을 사용자 값으로 바꾸십시오.

해결 방법

태그를 기반으로 EC2 인스턴스 및 EBS 볼륨 생성 제한

다음 예시 정책은 사용자가 인스턴스를 시작하고 태그를 기반으로 볼륨을 생성할 수 있도록 허용합니다.

일치하는 태그 키와 값이 있는 EC2 인스턴스 시작

다음 예시 정책에서는 RequestTag 조건이 태그 적용을 제어합니다. 사용자가 정책에 포함되지 않은 태그를 적용하면 작업이 거부됩니다. 대소문자를 구분하려면 aws:TagKeys 조건을 사용하십시오.

{  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowToDescribeAll",
      "Effect": "Allow",
      "Action": [
        "ec2:Describe*"
      ],
      "Resource": "*"
    },
    {
      "Sid": "AllowRunInstances",
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": [
        "arn:aws:ec2:*::image/*",
        "arn:aws:ec2:*::snapshot/*",
        "arn:aws:ec2:*:*:subnet/*",
        "arn:aws:ec2:*:*:network-interface/*",
        "arn:aws:ec2:*:*:security-group/*",
        "arn:aws:ec2:*:*:key-pair/*"
      ]
    },
    {
      "Sid": "AllowRunInstancesWithRestrictions",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateVolume",
        "ec2:RunInstances"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:volume/*",
        "arn:aws:ec2:*:*:instance/*",
        "arn:aws:ec2:*:*:network-interface/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:RequestTag/key1": "value1",
          "aws:RequestTag/key2": "value2"
        },
        "ForAllValues:StringEquals": {
          "aws:TagKeys": [
            "key1",
            "key2"
          ]
        }
      }
    },
    {
      "Sid": "AllowCreateTagsOnlyLaunching",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateTags"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:volume/*",
        "arn:aws:ec2:*:*:instance/*",
        "arn:aws:ec2:*:*:network-interface/*"
      ],
      "Condition": {
        "StringEquals": {
          "ec2:CreateAction": [
            "RunInstances",
            "CreateVolume"
          ]
        }
      }
    }
  ]
}

중요: EC2 인스턴스를 성공적으로 시작하려면 위 정책에 일치하는 태그 키와 값이 있어야 합니다. 키와 값 쌍이 일치하지 않으면 시작 실패 오류 또는 유사한 API 실패 메시지가 나타납니다.

결과 예시

키/값결과
key1/value1 및 key2/value2허용
key1/value1거부
key1/value2거부
키와 값 없음거부

하나 이상의 일치하는 태그 키가 있는 EC2 인스턴스 시작

다음 예시 정책에서 하나 이상의 태그 키 이름이 key1인 경우 AllowRunInstancesWithRestrictions 조건 블록을 바꾸십시오. key1 태그에는 특정 값이 필요하지 않으며 RunInstances 요청에서 태그를 추가할 수 있습니다.

"Condition": {  "StringEquals": {
    "aws:RequestTag/key1": "value1"
  },
  "ForAnyValue:StringEquals": {
    "aws:TagKeys": [
      "key1"
    ]
  }
}

결과 예시

키/값결과
key1/value1 및 key2/value2허용
key1/value1허용
key1/value2허용
키와 값 없음거부

지정된 태그 목록만 있는 EC2 인스턴스 시작

다음 예제 정책에서는 요청에 태그 키 key1key2가 제공된 경우 AllowRunInstancesWithRestrictions 조건 블록을 바꾸십시오. 각 태그 키에는 특정 값이 필요하지 않으며 RunInstances 요청에 태그를 추가할 수 없습니다.

"Condition": {  "StringLike": {
      "aws:RequestTag/key1": "*",
      "aws:RequestTag/key2": "*"
  },
  "ForAllValues:StringEquals": {
    "aws:TagKeys": [
        "key1",
        "key2"
    ]
  }
}

참고: 이전 정책에서 값에 다중 문자 일치 와일드카드(\ *)를 포함할 수 있도록 StringLike 조건이 필요합니다.

결과 예시

키/값결과
key1/AnyValue 및 key2/AnyValue허용
key1/AnyValue거부
key2/AnyValue거부
키 또는 값 없음거부
key1/AnyValue, key2/AnyValue, key3/AnyValue거부

태그 키와 값을 기반으로 EC2 인스턴스 및 EBS 볼륨 관리 제한

다음 예시 정책은 태그 키와 값을 기반으로 인스턴스 및 볼륨의 사용자 관리를 제한합니다.

일치하는 태그 키와 값이 있는 EC2 인스턴스 관리

다음 예시 정책은 IAM ID의 액세스를 EC2 인스턴스를 시작, 중지 또는 재부팅하는 것으로만 제한합니다. 인스턴스에는 Bob 태그 값을 가진 Owner 키 태그가 있어야 합니다.

{  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "ec2:Describe*",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2:StartInstances",
        "ec2:StopInstances",
        "ec2:RebootInstances"
      ],
      "Resource": [
        "arn:aws:ec2:*:111122223333:instance/*"
      ],
      "Condition": {
        "StringEquals": {
          "ec2:ResourceTag/Owner": "Bob"
        }
      }
    }
  ]
}

참고: Owner를 태그 키로, Bob을 IAM 사용자 이름으로, 리소스 ARN을 리소스의 ARN으로 바꾸십시오.

자세한 내용은 특정 Amazon EC2 리소스에 대한 IAM ID 액세스를 제한할 수 있습니까?를 참조하십시오.

일치하는 태그 키와 값이 있는 EBS 볼륨 관리

다음 예시 정책은 IAM ID로 EBS 볼륨을 분리하거나 삭제할 수 있도록 허용합니다. DeleteVolume API 작업의 경우 볼륨에 Mary 태그 값이 있는 Owner 태그 키가 있어야 합니다. DetachVolume API 작업의 경우 인스턴스와 볼륨 모두 태그 값이 Mary인 동일한 태그 키 Owner가 있어야 합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Action": [
                "ec2:DetachVolume",
                "ec2:DeleteVolume"
            ],
            "Resource": [
                "arn:aws:ec2:*:111122223333:volume/*",
                "arn:aws:ec2:*:111122223333:instance/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/Owner": "Mary"
                }
            }
        }
    ]
}

참고: Owner를 태그 키로, Mary를 IAM 사용자 이름으로, 리소스 ARN을 리소스의 ARN으로 바꾸십시오.

관련 정보

태그로 Amazon EC2 리소스에 액세스하는 것을 제어하는 IAM 정책을 생성하려면 어떻게 해야 합니까?

IAM ID 기반 정책의 예

아마존 EC2 리소스에 태그 지정

Amazon EC2의 작업, 리소스 및 조건 키

AWS 공식
AWS 공식업데이트됨 2달 전