특정 리소스만 만질 수 있도록 IAM Policy를 설정하는 방법

특정 리소스만 만질 수 있도록 IAM Policy를 설정하는 방법에 대해서 정리해 봤습니다.
2024.01.07

안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 특정 리소스만 만질 수 있도록 IAM Policy를 설정하는 방법에 대해서 정리해 봤습니다.

하고 싶은 것

사용자에게 특정 리소스에 접근할 권한만을 할당하고 싶을 때는 어떻게 해야할까요?

예를 들어, 여러 사용자가 생성되어있는 상황에서, 특정 사용자에게 특정 리소스에 대한 권한만을 할당하고 싶은 경우를 가정해서 IAM Policy를 설정하고 싶다면 어떻게 설정해야 할까요?

EC2 인스턴스 전체에 대한 접근 권한을 부여하거나, RDS 전체에 대한 접근 권한을 부여하는 방법도 존재하지만, 더 좁은 범위로 EC2 Instance B에는 접근이 불가능하지만, EC2 Instance A만 접근할 수 있도록 설정하려면 어떻게 해야하는 지 알아보았습니다.

IAM Policy 태그로 접근 권한 제어

IAM Policy에서는 태그를 지정해서 액세스를 제어할 수 있도록 하는 기능이 존재합니다.

예를 들면, EC2 Instance A 리소스에 태그 키에는 classmethod 값에는 jaewook를 넣어서 접근 권한을 제어할 수 있습니다.

보다 자세한 IAM Policy 태그 접근 권한에 대해서는 아래 공식 문서를 참고해 주세요.

IAM Policy 생성해 보기

  • IAM 콘솔 화면으로 들어와「정책」을 클릭합니다.
  • 「정책 생성」을 클릭합니다.

  • JSON을 선택합니다.
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:Describe*"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:StartInstances",
                "ec2:StopInstances"
            ],
            "Resource": "arn:aws:ec2:ap-northeast-2:AWS Account ID:instance/*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/classmethod": "jaewook"
                }
            }
        }
    ]
}

테스트를 위해 태그 키가 classmethod, 값이 jaewook인 EC2 인스턴스의 리소스에 대한 시작, 중지 권한을 부여합니다.

AWS Account ID에는 숫자로 구성된 AWS 계정 ID를 입력합니다.

※ EC2 인스턴스 목록을 확인하기 위해 ec2:Describe 권한을 추가했습니다.

적당히 정책 이름을 입력합니다.

  • 허용된 권한을 살펴보면, classmethod = jaewook 리소스 태그가 설정되어 있는 것을 확인할 수 있습니다.
  • 정책의 태그 명을 지정합니다.
  • 「정책 생성」을 클릭합니다.

마지막으로, 사용자에게 조금 전 생성한 정책을 추가합니다.

권한 설정 확인

EC2 Instance A에만 키 값을 설정한 상태입니다.

즉 현재 EC2 Instance B에 대한 시작, 중지 권한은 없습니다.

EC2 Instance A를 중지하면, 문제 없이 중지 작업이 진행되는 것을 확인할 수 있습니다.

EC2 Instance B를 중지시키면, 중지에 실패했다고 뜨며, 중지시킬 권한이 없다는 에러 메시지가 표시됩니다.

이렇게 특정 리소스에 대한 권한을 사용자에게 부여할 수 있습니다. 만약 하나의 계정에 여러 환경 혹은 리소스가 존재하고, 각 사용자 별로 환경 혹은 리소스에 대한 권한을 나누어야 한다면 태그로 권한을 나누어 다른 환경은 만질 수 없도록 설정할 수 있습니다.

본 블로그 게시글을 보시고 문의 사항이 있으신 분들은 kim.jaewook@classmethod.jp 로 연락 주시면 회신 드릴 수 있도록 하겠습니다 !