[AWS] 리소스 생성할 때 Tag 강제하기

pokcha's·2022년 10월 20일
0

aws

목록 보기
4/8

태그를 사용하면 리소스를 쉽게 정리하거나 식별하고 검색할 수 있다.
중요한 태그는 리소스를 생성할 때 무조건 기입 하도록 강제해 보자.

리소스 중 EC2 생성 시 Tag를 강제하는 것을 알아보자.
EC2 생성 시 지정된 태그가 없다면 인스턴스 생성이 Deny 되도록 해보자.

IAM에 EC2를 생성할 수 있는 권한을 Allow 하는 정책을 먼저 연결해야 한다.

1. Tag를 추가 하도록 IAM 정책 생성

Allow 정책은 세분화가 어려워 Deny 정책을 사용했다.
Deny 정책은 우선 순위가 제일 높아 EC2의 모든것을 Allow 하더라도 Deny 조건을 먼저 적용한다.
Deny 정책은 복잡하게 하는 것 보다는 원하는 조건을 하나씩 추가하는게 효율적이다.

key가 'AutoSchedule'이고 value가 'Y', 'N'인 태그를 달아야 생성이 되도록 정책을 주었다.
"RuninstanceKeyRestriction" 는 key에 대한 정책이다.
인스턴스를 생성하고 EBS Volume을 생성할 때 지정된 Key(AutoSchedule)가 있어야 한다.
Key(AutoSchedule)가 없다면 Deny 된다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "RuninstanceKeyRestriction",
            "Effect": "Deny",
            "Action": [
                "ec2:RunInstances",
                "ec2:CreateVolume"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:instance/*",
                "arn:aws:ec2:*:*:volume/*"
            ],
            "Condition": {
                "ForAllValues:StringNotLike": {
                    "aws:Tagkeys": "AutoSchedule"
                }
            }
        },

"RuninstanceValueRestriction" 는 value에 대한 정책이다.
인스턴스를 생성하고 EBS Volume을 생성할 때 지정된 Key(AutoSchedule)가 있다면 Value에 "Y", "N" 이 있어야 한다.
Value(Y, N)가 없다면 Deny 된다.

{
            "Sid": "RuninstanceValueRestriction",
            "Effect": "Deny",
            "Action": [
                "ec2:RunInstances",
                "ec2:CreateVolume"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:instance/*",
                "arn:aws:ec2:*:*:volume/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:RequestTag/AutoSchedule": [
                        "Y",
                        "N"
                    ]
                }
            }
        }

2. 인스턴스 생성

  1. 태그를 달지 않고 인스턴스를 생성하니 오류가 났다.
  2. 인스턴스에만 태그를 했더니 오류가 났다. resource를 instance와 volume으로 지정 했기 때문에 tag를 인스턴스와 볼륨에 모두 지정해 주어야 한다.

아래는 전체 json 내용이다. 상황에 맞게 커스텀 해서 사용하면 된다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "RuninstanceKeyRestriction",
            "Effect": "Deny",
            "Action": [
                "ec2:RunInstances",
                "ec2:CreateVolume"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:instance/*",
                "arn:aws:ec2:*:*:volume/*"
            ],
            "Condition": {
                "ForAllValues:StringNotLike": {
                    "aws:Tagkeys": "AutoSchedule"
                }
            }
        },
        {
            "Sid": "RuninstanceValueRestriction",
            "Effect": "Deny",
            "Action": [
                "ec2:RunInstances",
                "ec2:CreateVolume"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:instance/*",
                "arn:aws:ec2:*:*:volume/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:RequestTag/AutoSchedule": [
                        "Y",
                        "N"
                    ]
                }
            }
        }
    ]
}

Tag 관련 조건에 자주 사용되는 IAM 정책 요소를 참고 해 IAM 을 이해해보자.

❗️집합 연산자
ForAllValues : 요청의 모든 키 값이 정책에 있는 하나 이상의 값과 일치하면 true
ForAnyValue : 요청의 키 값 중 하나가 정책의 조건 값 중 하나와 일치하면 true
❗️문자열 조건 연산자
StringEquals / StringNotEquals : 정확하게 일치, 대소문자 구분
StringLike / StringNotLike : 와일드카드( * 또는 ?) 사용 가능
❗️태그 조건 키
aws:RequestTag/tag-key : 어떤 Tag가 요청에 전달될 수 있는지 제어
aws:TagKeys : 특정 Tag가 키를 리소스 또는 요청에서 사용할 수 있는지 여부 제어

profile
AWS 운영기록 💾

0개의 댓글