Fagner 씨가 IAM 정책 태그를 사용하여
EC2 인스턴스 생성을 제한하는 방법을
보여줍니다.

fagner_0518

IAM 사용자 또는 그룹의 액세스를 허용하여 새 Elastic Compute Cloud(Amazon EC2) 인스턴스를 시작하고 새 Elastic Block Store(Amazon EBS) 볼륨을 생성하되, 특정 태그가 적용될 때에만 사용하고 싶습니다. IAM 정책 조건을 사용하여 액세스를 제한하여 새 리소스를 만들려면 어떻게 해야 합니까?

리소스를 생성하는 API 호출의 일환으로 EC2 인스턴스 및 EBS 볼륨에 대한 태그를 지정할 수 있습니다. 이 원리를 이용하면 사용자는 IAM 정책에 조건을 적용하여 특정 리소스에 태그를 붙이도록 강제할 수 있습니다. 다음 예제의 정책에서는 사용자가 보안 그룹이나 키 페어를 생성하는 것이 허용되지 않으므로 사용자는 이미 존재하는 보안 그룹 및 키 페어를 선택해야 합니다. 보안 그룹 생성에 대한 자세한 내용은 첫 번째 IAM 관리자 및 그룹 생성을 참조하십시오.

3가지 예제에서 IAM 정책은 사용자에게 다음을 허용합니다.

  1. 일치하는 태그 키와 값이 있는 EC2 인스턴스 시작.
  2. 하나 이상의 일치하는 태그 및 값이 있는 EC2 인스턴스 시작.
  3. 하나 이상의 일치하는 태그 키가 있는 EC2 인스턴스 시작.

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

다음 예제의 정책은 사용자가 한정자 ForAllValues를 사용하여 정책에서 정의된 모든 태그를 적용할 경우에만 사용자가 EC2 인스턴스를 시작하고 EBS 볼륨을 생성하는 것을 허용합니다. 사용자가 정책에 포함되지 않은 태그를 적용할 경우, 작업은 거부됩니다. 대/소문자 구분을 적용하려면 조건 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/*"
            ],
            "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/*"
            ],
            "Condition": {
                "StringEquals": {
                    "ec2:CreateAction": "RunInstances"
                }
            }
        }
    ]
}

예제 결과

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

2.    하나 이상의 일치하는 태그 및 값이 있는 EC2 인스턴스 시작

첫 번째 정책 예제를 사용하여 문 ID(Sid) "AllowRunInstancesWithRestrictions"를 변경하여 사용자가 한정자 ForAnyValue를 사용하여 특정 태그를 하나 이상 적용할 경우 EC2 인스턴스를 시작하고 EBS 볼륨을 생성하는 것을 허용할 수 있습니다.

...
            "Sid": "AllowRunInstancesWithRestrictions",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/key1": "value1"
                },
                "ForAnyValue:StringEquals": {
                    "aws:TagKeys": [
                        "key1"
...

예제 결과

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

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

첫 번째 정책 예제를 사용하여 Sid "AllowRunInstancesWithRestrictions"를 변경하여 사용자가 한정자 key1이라는 태그 키를 하나 이상 적용할 경우 EC2 인스턴스를 시작하고 EBS 볼륨을 생성하는 것을 허용할 수 있습니다. 다음 예제의 정책에서는 특정 값이 필요하지 않습니다.

...
        {
            "Sid": "AllowRunInstancesWithRestrictions",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "aws:TagKeys": [
                        "key1"
...

예제 결과

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

참고: 예제의 정책에서 key1value1을 수정하여 리소스에 적용되는 태그와 값을 포함하도록 합니다.


페이지 내용이 도움이 되었습니까? | 아니요

AWS 지원 지식 센터로 돌아가기

도움이 필요하십니까? AWS 지원 센터를 방문하십시오.

게시된 날짜: 2018년 5월 8일