AWS 뿐만 아니라 대부분의 클라우드 환경에서 각 자원에 적절한 Tag 를 할당하고 해당 Tag 값에 따라 권한을 할당하거나 관리하는 것과 같은 Tag 정책을 다이나믹하게 생성되고 삭제되는 클라우드 자원을 관리하기 위한 중요한 기본 정책입니다.
이 블로그에서는 이와 같은 Tag 정책을 AWS 환경에서 구현할 때 사용할 수 있는 서비스 중 AWS Organizations 서비스에서 제공하는 Tag Policy 와 Service Control Policy 를 이용하여 AWS 클라우드 내의 각 자원에 필수 Tag 를 지정하고 지정된 Tag 에 허용된 값만을 사용할 수 있도록하는 정책을 구현해보도록 하겠습니다.
AWS Organizations 서비스는 여러개의 AWS 계정을 효율적으로 계층화하여 제어하는데 구성하는데 사용되는 서비스로 “Billing Only” 와 “All Feature Enabled” 모드를 선택하여 사용할 수 있습니다. SCP(Service Control Policy) 와 Tag Policy 를 사용하기 위해서는 AWS 각 계정이 AWS Organizations 서비스에 등록되어 있는 상태여야하며 또한 AWS Organizations 의 모드가 “All Feature Enabled” 모드여야 합니다.
다음은 SCP 와 Tag Policy 에 대한 간략한 설명입니다.
- SCP (Service Control Policy)
SCP 는 AWS Organizations에서 사용되는 IAM Policy 로 계정단위 혹은 AWS Organizations 에서 조직한 OU 단위로 권한을 부여하고 제한하는데 사용됩니다. SCP 는 여러가지 조건을 조합하여 다양한 자원에 대한 Tag 사용 정책을 정의할 수 있으며 지정된 Tag 없이 AWS 자원을 생성하려는 경우 해당 생성 작업을 차단하도록 구성할 수 있습니다.
- Tag Policy
Tag Policy 는 AWS Organizations 에서 사용되는 Tag 지정 정책으로 계정단위 혹은 AWS Organizations 에서 조직한 OU 단위로 사용되며 Tag Policy 에 지정된 Tag 값만을 허용하도록 구성하는데 사용될 수 있습니다.
단, Tag Policy 는 지정된 Tag 가 없는 경우에도 AWS 자원 생성을 차단하지는 않으며 지정된 Tag 가 있는 경우에 한하여 지정된 Tag 값을 사용하도록 제한할 수 있습니다. 즉, Tag 가 없는 경우에는 동작하지 않으며 Tag 가 있는 경우에 한하여 지정된 Tag 값 이외의 값을 생성하려고 하는 경우에 제한할 수 있습니다.
예를 들어, 아래와 같은 SCP 를 생성한 후 특정 AWS Organizations 서비스 내의 특정 OU 나 특정 계정에 적용하게 되면 해당 OU 나 계정에 속한 모든 IAM 자격증명(사용자 혹은 역할)은 AWS 자원 생성 시 “Service” 라는 이름의 Tag 를 지정하지 않으면 EC2 Instance 나 EC2 Volume 자원을 생성할 수 없게 됩니다.
{
"Version": "2012-10-17",
"Statement": {
"Sid": "DenyRunInstanceWithNoProjectTag",
"Effect": "Deny",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:*:*:instance/*",
"arn:aws:ec2:*:*:volume/*"
],
"Condition": {
"Null": {
"aws:RequestTag/Service": "true"
}
}
}
}
다음은 Tag Policy 예제입니다.
아래와 같은 Tag Policy 를 생성한 후 SCP 와 마찬가지로 특정 AWS Organizations 서비스 내의 특정 OU 나 특정 계정에 적용하게 되면 해당 OU 나 계정에 속한 모든 IAM 자격증명(사용자 혹은 역할)은 AWS 자원에 Tag 를 할당할 때 “Service” 라는 Tag 가 있는 경우에 한하여 지정된 Tag 값인 “Product” 과 “Demo” 만을 사용하도록 강제할 수 있습니다.
{
"tags": {
"Service": {
"tag_key": {
"@@assign": "Service"
},
"tag_value": {
"@@assign": [
"Product",
"Demo"
]
},
"enforced_for": {
"@@assign": [
"ec2:instance"
]
}
}
}
}
결론을 말씀드리면 AWS 다중 계정 환경에서 Tag 정책을 중앙 관리하기 위해서는 AWS Organizations 서비스에서 제공하는 SCP 와 Tag Policy 를 적절히 혼용하여 사용하여야 합니다.
Tag Policy 의 경우 지정된 Tag 를 설정하지 않고 AWS 자원을 생성할 때 차단하는 기능을 제공하지는 않으므로 여러 AWS 자원에 필수 Tag 가 존재하고 이 Tag 가 없는 경우에 AWS 자원 생성을 차단하고자 한다면 SCP 가 필요하게 됩니다. 그리고 Tag Policy 는 자원 생성 과정이나 생성된 이후 Tag 의 추가/변경과 같은 작업에서 지정된 Tag 에 한하여 지정된 값을 반드시 사용하도록 강제하는 목적으로 사용할 수 있습니다.
AWS Organizations 가 “Billing Only” 모드이거나 AWS Organizations 를 사용하지 않는 계정 환경이라면 IAM Policy 를 통해서 Tag 정책을 관리하실 수 있습니다.
감사합니다.