AWS

[AWS] EC2 인스턴스 Tag-based 관리 방법 - 1

동스토리 ㅣ 2023. 1. 27. 16:38

반응형

인스턴스를 운영하면서 특정 IAM user에게만 인스턴스를 제어하거나 multi-account 환경일 경우 특정 account에서는 인스턴스 작업을 하지 못하게 하는 방안에 대해 고려하고 있는 사용자들이 많을 것이라고 생각이 됩니다.

 

IAM 사용자에게 EC2 리소스를 사용할 수 있는 권한을 부여하는 IAM 정책을 생성할 때 정책의 Condition 요소에 태그 정보를 포함하여 태그를 기반으로 액세스를 제어할 수 있습니다. 이를 속성 기반 액세스 제어(ABAC)라고 합니다.

 

IAM Condition을 사용한 몇 가지 사례를 소개해 드리도록 하겠습니다.

 

Exam 1. 특정 IAM user가 "Env" Key를 보유하고 있을 경우에만 인스턴스 Start / Stop 가능하게 하기

 

 

Step 1) Policy 생성 후 IAM user에게 권한 추가

 

우선 인스턴스를 Start / Stop 하기 위한 Action을 확인하고 해당 Action이 지원하는 Resource, Condition을 확인하셔야 합니다.

다음 문서 [1] 에서 확인하실 수 있습니다.

[1] Amazon EC2에 사용되는 작업, 리소스 및 조건 키 - https://docs.aws.amazon.com/ko_kr/service-authorization/latest/reference/list_amazonec2.html

 

Amazon EC2에 사용되는 작업, 리소스 및 조건 키 - 서비스 승인 참조

 

docs.aws.amazon.com

 

우리는 이제 Action(StartInstances, StopInstances)이 aws:ResourceTag/${TagKey} Condition을 지원한다는 것을 알게 되었습니다.

aws:ResourceTag/${TagKey}: 리소스의 태그 키-값 페어를 기준으로 액세스를 필터링합니다.
[2]리소스 태그를 사용하여 EC2 리소스에 대한 액세스 제어 - https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/control-access-with-tags.html

 

다음으로 아래 생성 된 Policy를 IAM user에게 추가 해줍니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ec2:StartInstances",
                "ec2:StopInstances"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/Env": "prod"
                }
            }
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances"
            ],
            "Resource": "*"
        }
    ]
}
 

 

Step 2) 인스턴스 Start / Stop Test

 

제 환경에는 InstanceA와 InstanceB가 있습니다. InstanceA에는 Env태그가 없고 InstanceB에는 Env태그가 있습니다.

InstanceA Tag
InstanceB Tag

InstanceA를 Stop을 할 경우 아래와 같은 에러메시지를 확인하실 수 있습니다. 이를 복호화 해보겠습니다.

aws sts decode-authorization-message --encoded-message "message"

>> \"action\":\"ec2:StopInstances\",\"resource\": ~~

 

InstanceB를 Stop 할 경우 정상적으로 Stop이 되는 것을 확인할 수 있습니다.

 

Exam 2. 특정 IAM user가 지정된 Key와 Value를 보유하고 있을 경우에만 인스턴스를 생성 할 수 있도록 하기

https://ehdtn1219.tistory.com/193

 

[AWS] EC2 인스턴스 Tag-based 관리 방법 - 2

인스턴스를 운영하면서 특정 IAM user에게만 인스턴스를 제어하거나 multi-account 환경일 경우 특정 account에서는 인스턴스 작업을 하지 못하게 하는 방안에 대해 고려하고 있는 사용자들이 많을 것

ehdtn1219.tistory.com

 

질문이 있으시면 댓글 남겨주시면 확인 후에 답변해드리겠습니다.

 

감사합니다.

반응형