[AWS IAM] 최소 권한 원칙을 지키는 IAM 사용자 생성기
왜 필요하지?
AWS 2024 Summit Seoul 에서 전시되었던 Amazon Bedrock Gallery 를 아시나요? Amazon Bedrock을 활용하여 사용자들이 AWS의 다양한 서비스와 함께 Generative AI를 경험할 수 있도록 만들어진 프로젝트입니다. Generative AI 란 무엇이고, 어떻게 활용될 수 있는지를 정말 쉽게 보여줄 수 있는 프로젝트라고 생각했습니다. 그래서? 인하대학교 컴퓨터 동아리 IGRUS 에서 개발을 하고 있습니다. 10월 중순에 학교에서 전시가 예정되어 있습니다.
개발 중에 한 팀원이 Rekognition 서비스에서 $508.29 라는 어마무시한 비용이 발생하는 사고(?)가 발생했습니다. 우선 Rekognition 서비스에서 이런 비용이 발생했기 때문에, Access Key 유출보다는 Rekognition API 무한 호출에 이유가 있을 것이라고 생각했습니다. 24학번인 팀원에게는 너무 부담되는 금액이기도 하고, 앞으로도 이런 일이 발생할 것 같다는 살짝 무서운 생각이 들었습니다.
IAM 사용자들을 생성해서 제공하고, 내가 리소스 및 비용을 관리해야겠다..!
그렇게 IAM 사용자를 생성하고, 정책 바운더리를 설정하게 되었습니다.
필요한 서비스들은?
현재 개발에 필요한 서비스들은 아래와 같습니다.
- EC2
- Lambda
- CloudWatch
- ECR
- SageMaker
- Bedrock
- Rekognition
아무래도 비용을 부담하는 입장이 되어보니 모든 서비스들이 다 무섭게 보이기 시작했습니다. 정책을 어떻게 설정해줘야 불필요한 비용이 발생하지 않을까? 에 대해서 고민해 볼 수 있었습니다.
정책 작성
우선 필요한 서비스들의 권한만을 제공하고자 합니다. 위에서 나열한 7개의 서비스들과 그 서비스들을 사용하여 개발을 진행할 때 필요한 IAM 권한만 부여하면, 개발하는 과정에서 권한 관련하여 막히는 일은 없을 것입니다.
EC2 정책 작성
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:RunInstances",
"ec2:StartInstances",
"ec2:StopInstances",
"ec2:TerminateInstances"
],
"Resource": "arn:aws:ec2:ap-northeast-1:*:instance/*",
"Condition": {
"StringEquals": {
"ec2:InstanceType": ["t3.micro", "t3.small"],
"aws:RequestedRegion": "ap-northeast-1"
}
}
},
{
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": [
"arn:aws:ec2:ap-northeast-1:*:volume/*",
"arn:aws:ec2:ap-northeast-1:*:network-interface/*",
"arn:aws:ec2:ap-northeast-1:*:subnet/*",
"arn:aws:ec2:ap-northeast-1:*:security-group/*"
],
"Condition": {
"StringEquals": {
"aws:RequestedRegion": "ap-northeast-1"
}
}
},
{
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"ec2:DescribeInstanceStatus"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestedRegion": "ap-northeast-1"
}
}
}
]
}
위 정책은 EC2 와 관련한 정책입니다. EC2와 관련한 모든 작업을 도쿄 리전(ap-northeast-1)으로 제한하여, 추후에 리소스 관리에 용이하도록 하였습니다. 또한 ec2:InstanceType 조건을 사용해서 생성할 수 있는 인스턴스 타입을 제한하였습니다. 현재 개발 중인 애플리케이션은 높은 사양의 인스턴스 타입을 필요로 하지 않기에, 기본적인 t3.small 의 사양이면 충분하기에 이와 같이 설정하였습니다.
이렇게 필요한 서비스들에 대해서 모두 권한 정책을 작성한 줄 알았는데..?
User groups 에 할당할 수 있는 정책에는 제한이 있다..?
하나의 사용자 그룹에 위 사진과 같이 각각의 서비스에 대한 정책을 작성하는 방식으로 진행했습니다. SageMaker 서비스에 대한 권한 정책을 작성하고 저장하는 도중에 에러가 발생하였습니다.
하나의 사용자 그룹에 할당할 수 있는 정책 사이즈가 5120 바이트로 제한되어 있고, 더이상 정책을 추가할 수 없다는 내용의 에러입니다. 이 과정에서 권한을 부여하는 방식에 대해서 다시 한 번 고민하고, 찾아보게 되었습니다.
IAM 정책의 상속의 특징에 의해서, 2개의 그룹에 속한 사용자는 2개의 그룹에 부여된 권한을 모두 부여받게 됩니다. 하나의 그룹에 필요한 모든 권한을 부여하는 것이 아닌, 사용하는 서비스 혹은 그룹에 맞게 권한을 부여하고, 사용자마다 필요한 그룹에 속하게 하는 방향이 옳다고 생각했습니다. 그래서 AWS 에서도 사용자 그룹에 부여할 수 있는 정책의 크기에 제한을 둔 것이 아닐까.. 라는 의심을 해봅니다!
댓글
이 글 공유하기
다른 글
-
[AWS] 개인 URL Shortener 만들기
[AWS] 개인 URL Shortener 만들기
2024.04.22 -
[AWS] Windows 개발 환경에서 Serverless Framework 오류 (Runtime.ImportModuleError)
[AWS] Windows 개발 환경에서 Serverless Framework 오류 (Runtime.ImportModuleError)
2024.03.10