[AWS-Security] 2.2. AWS IAM에서 일반적인 패턴 사용
[AWS-Security] 2.2. AWS IAM에서 일반적인 패턴 사용
1. AWS 관리형 정책
1.1. 관리형 정책
- 관리형 정책은 정책 문서(json)를 리소스로 캡슐화 한다.
- 여러 사용자에게 동일한 권한이 필요한 경우, 단일 관리형 정책을 만들어 필요한 유저들에게 연결할 수 있다.
1.2. AWS 관리형 정책의 장점
- AWS 관리형 정책은 특정 권한 요구 사항을 해결하기 위해 AWS에서 생성한 점을 제외하면 정확히 동일하다.
- 자체 관리형 정책을 생성하지 않고, AWS에서 미리 생성해 둔 AmazonDynamoDBFullAccess를 사용할 수 있다.
- 정책을 일일이 작성해야 하는 작업을 절약할 수 있으며, 실수할 가능성도 줄어든다.
1.3. AWS 관리형 정책의 단점
- 필요한 사용 사례에 적합한 AWS 관리형 정책이 있는 경우, 직접 작성하는 대신 이를 사용하는 것이 좋다.
- AWS 관리형 정책이 이상적이지 않은 경우가 많다.
- AWS 관리형 정책은 종종 서비스 내의 모든 작업에 대한 권한을 부여한다. AWS Console 사용 외의 사용자가 모든 작업에 대한 권한이 필요한 경우는 거의 없다.
- 필요한 것보다 더 많은 권한을 부여하지 않는 것이 절대적인 규칙이다.
- AWS 관리형 정책이 제공하는 구성 관리의 용이성과 부여된 불필요한 권한으로 인해 증가된 위험 사이의 장단점을 꼼꼼히 따져야 한다.
2. 마스터/매니저 권한 모델
2.1. 목적
- 이 모델의 가장 큰 목적은 ‘단일 사용자가 새 정책을 만들고, 그 권한을 스스로에게 부여하는 것을 막는 것’이다.
- 만약 한 사람이 정책 생성과 부여를 모두 할 수 있다면, 해커가 그 계정을 탈취했을 때 스스로에게 ‘모든 권한(Admin)’을 부여하여 시스템을 장악할 수 있을 것이다.
- 이를 방지하기 위해 권한 부여에 필요한 역할을 둘로 나눈 것이다.
2.2. 마스터/매니저
2.2.1. 개요
- 마스터 : 사용자, 그룹, 역할, 정책을 생성할 수 있는 권한을 부여한다.
- 매니저 : 사용자를 그룹에 추가하고 정책을 역할과 그룹에 연결할 수 있는 권한을 부여한다.
- 새 정책을 만들고 사용자에게 연결하려면 마스터 및 매니저 역할이 모두 필요하다.

2.2.2. 설정 방법
- 역할 생성(껍데기 만들기) -> 2. 마스터 권한 설정 -> 3. 매니저 권한 설정 -> 4. 적용 및 주의사항
2.2.2.1. IAMMaster 및 IAMManager 역할 생성
- IAMMaster와 IAMManager라는 빈 역할 생성
- “누가 이 역할을 맡을 수 있는가?”에 해당하는 신뢰 정책 정의
1
2
3
4
5
6
7
8
#!/bin/bash
aws iam create-role \
--role-name IAMMaster \
--assume-role-policy-document file://master_resource_policy.json
aws iam create-role \
--role-name IAMManager \
--assume-role-policy-document file://manager_resource_policy.json
- master_resource_policy.json
- Alice라는 사용자만 IAMMaster 역할을 맡을 수(Assume) 있음
1 2 3 4 5 6 7 8 9 10 11 12
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Alice" } } ] }
- Alice라는 사용자만 IAMMaster 역할을 맡을 수(Assume) 있음
- manager_resource_policy.json
- Bob라는 사용자만 IAMManager 역할을 맡을 수(Assume) 있음
1 2 3 4 5 6 7 8 9 10 11 12
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Bob" } } ] }
- Bob라는 사용자만 IAMManager 역할을 맡을 수(Assume) 있음
2.2.2.2. IAMMaster 관리형 정책 생성
- IAM 사용자, 그룹, 역할, 관리형 정책을 생성하고 삭제하는 모든 작업 허용
(iam:AttachRolePolicy, iam:CreateGroup, iam:CreatePolicy, iam:CreatePolicyVersion, iam:CreateRole, iam:CreateUser, iam:DeleteGroup, iam:DeletePolicy, iam:DeletePolicyVersion, iam:DeleteRole, iam:DeleteRolePolicy, iam:DeleteUser, iam:PutRolePolicy) - 해당 정책을 사용자 및 그룹에 연결하는 것과 관련된 모든 작업 거부
(iam:AddUserToGroup, iam:AttachGroupPolicy, iam:DeleteGroupPolicy, iam:DeleteUserPolicy, iam:DetachGroupPolicy, iam:DetachRolePolicy, iam:DetachUserPolicy, iam:PutGroupPolicy, iam:PutllserPolicy, iam:RemoveUserFromGroup, iam:llpdateGroup, iam:UpdateAssumeRolePolicy, iam:UpdateUser) 현재 상태를 확인하기 위한 조회 권한
(iam:GetPolicy, iam:ListPolicies, iam:GetPolicyVersion, iam:ListPoliciesGrantingServiceAccess, iam:GetRole, iam:ListPolicyVersions, iam:GetRolePolicy, iam:ListRolePolicies, iam:GetUser, iam:ListAttachedGroupPolicies, iam:GetUserPolicy, iam:ListAttachedRolePolicies, iam:ListEntitiesForPolicy, iam:ListAttachedUserPolicies, iam:ListGroupPolicies, iam:ListRoles, iam:ListGroups, iam:ListUsers, iam: ListGroupForUser)- 위 관리형 정책을 IAMMaster 역할에 연결
(master_policy.json 파일 안에는 위에 언급된 모든 권한이 포함되어야 한다.)1 2 3 4 5 6 7 8
#!/bin/bash aws iam create-policy \ --policy-name IAMMasterPolicy \ --policy-document file://master_policy.json aws iam attach-role-policy \ --role-name IAMMaster \ --policy-arn arn:aws:iam::123456789012:policy/IAMMasterPolicy
2.2.2.3. IAMManager 관리형 정책 생성
- IAM 사용자, 그룹 역할 관리형 정책을 생성하고 삭제하는 모든 작업 거부
(iam:AttachRolePolicy, iam:CreateGroup, iam:CreatePolicy, iam:CreatePolicyVersion, iam:CreateRole, iam:CreateUser, iam:DeleteGroup, iam:DeletePolicy, iam:DeletePolicyVersion, iam:DeleteRole, iam:DeleteRolePolicy, iam:DeleteUser, iam:PutRolePolicy) - 해당 정책을 사용자 및 그룹에 연결하는 것과 관련된 모든 작업 허용
(iam:AddUserToGroup, iam:AttachGroupPolicy, iam:DeleteGroupPolicy, iam:DeleteUserPolicy, iam:DetachGroupPolicy, iam:DetachRolePolicy, iam:DetachUserPolicy, iam:PutGroupPolicy, iam:PutllserPolicy, iam:RemoveUserFromGroup, iam:llpdateGroup, iam:UpdateAssumeRolePolicy, iam:UpdateUser) - 현재 상태를 확인하기 위한 조회 권한
(iam:GetPolicy, iam:ListPolicies, iam:GetPolicyVersion, iam:ListPoliciesGrantingServiceAccess, iam:GetRole, iam:ListPolicyVersions, iam:GetRolePolicy, iam:ListRolePolicies, iam:GetUser, iam:ListAttachedGroupPolicies, iam:GetUserPolicy, iam:ListAttachedRolePolicies, iam:ListEntitiesForPolicy, iam:ListAttachedUserPolicies, iam:ListGroupPolicies, iam:ListRoles, iam:ListGroups, iam:ListUsers, iam: ListGroupForUser) - 위 관리형 정책을 IAMMaster 역할에 연결
(manager_policy.json 파일 안에는 위에 언급된 모든 권한이 포함되어야 한다.)1 2 3 4 5 6 7 8
#!/bin/bash aws iam create-policy \ --policy-name IAMManagerPolicy \ --policy-document file://manager_policy.json aws iam attach-role-policy \ --role-name IAMManager \ --policy-arn arn:aws:iam::123456789012:policy/IAMManagerPolicy
2.2.2.4. 주의 사항
- 역할 리소스 정책(master_resource_policy.json, manager_resource_policy.json) 내에 어떤 사용자가 이 역할을 수임받을 수 있는지 정의 (principal 블록을 통해 사용자 추가, 위 2.2.2.1. 항목에서 이미 진행)
- 개별 사용자(Alice/Bob)가 두 역할을 함께 맡도록 허용하면 x
- IAM 리소스 수정을 허용하는 정책 제거 (각각의 사용자가 마스터/매니저 권한만 가질 수 있도록)
This post is licensed under CC BY 4.0 by the author.