조건 키가 여러 개 있는 명시적 거부 정책에 대한 IAM 평가 로직은 어떻게 작동하나요?

3분 분량
0

AWS Identity and Access Management (IAM)의 명시적 거부 정책을 만들고 싶습니다. 이 거부 정책은 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 및 Amazon Elastic Block Store(Amazon EBS) 볼륨의 생성을 제한해야 합니다.

간략한 설명

IAM 정책 태그를 사용하여 문자열 조건 연산자StringLike를 사용하는 Allow 또는 StringNotLike를 사용하는 Deny인 EC2 인스턴스 및 EBS 볼륨의 시작을 제한합니다.

자세한 내용을 보려면 IAM 정책 태그를 사용하여 EC2 인스턴스 또는 EBS 볼륨 생성 방법을 제한하려면 어떻게 해야 하나요?를 참조하세요.

해결 방법

EC2 인스턴스 및 EBS 볼륨 생성을 제한하려면 StringNotLike와 함께 Deny를 사용하는 다음 예제 IAM 정책을 사용하세요.

참고: 우발적인 권한 액세스를 방지하려면 DenyStringNotLike와 함께 사용하는 것이 좋습니다.

정책에 여러 조건 연산자 또는 단일 조건 연산자에 여러 개의 키가 연결된 경우 조건은 AND 논리로 평가됩니다. Deny 다중 태그 값을 사용하는 경우 각 RequestTag 키가 별도의 명령문을 사용하여 동일한 AND 로직을 가져와야 합니다.

참고: Deny 정책을 사용하여 한 조건에 설정된 모든 RequestTag 키 값이 예상대로 작동하지 않을 수 있습니다. 모든 조건이 충족될 때까지 작업이 허용되기 때문입니다. 모든 조건이 충족되면 조치가 거부됩니다.

다음 태그가 필요합니다.

  • cost_center 태그의 값은 null이 아닌 값이어야 합니다.
  • EC2 인스턴스에는 Production이라는 태그 키가 있습니다.
  • identifier 태그는 5자 중 하나의 조합이어야 합니다.
  • env 태그 값은 샌드박스, dev 또는 prod여야 합니다.

정책 예시:

{    "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": "AllowRunInstancesWithRestrictions1",
            "Effect": "Deny",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:RequestTag/cost_center": "?*"
                }
            }
        },
        {
            "Sid": "AllowRunInstancesWithRestrictions2",
            "Effect": "Deny",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "ForAllValues:StringNotLike": {
                    "aws:TagKeys": "Production"
                }
            }
        },
        {
            "Sid": "AllowRunInstancesWithRestrictions3",
            "Effect": "Deny",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:RequestTag/identifier": "?????"
                }
            }
        },
        {
            "Sid": "AllowRunInstancesWithRestrictions4",
            "Effect": "Deny",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:RequestTag/env": [
                        "sandbox",
                        "dev",
                        "prod"
                    ]
                }
            }
        },
        {
            "Sid": "AllowRunInstances1",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ]
        },
        {
            "Sid": "AllowCreateTagsOnRunInstance",
            "Effect": "Allow",
            "Action": "ec2:CreateTags",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "ec2:CreateAction": "RunInstances"
                }
            }
        }
    ]
}

다음 적용 값을 참고하세요.

  • aws:TagKeys 값은 Production 대소문자 구분을 적용합니다.
  • **????**값은 임의의 5개 값을 조합하여 사용하도록 합니다. 앞이나 뒤에 있는 공백은 무시됩니다.
  • ?* 값은 값 필드에 하나 이상의 문자를 사용하도록 강제하므로 EC2 인스턴스가 빈 태그 값으로 시작될 수 없습니다.

관련 정보

태그를 사용하여 Amazon EC2 리소스에 대한 액세스를 제어하는 IAM 정책을 만들려면 어떻게 해야 하나요?

아마존 EC2 리소스에 태그를 지정하세요

태그를 사용하여 AWS 리소스에 대한 액세스 제어

댓글 없음