AWS IAM 정책에 대해 알아보려 합니다. 우선 5가지 형태의 구조를 가지고 있습니다.
Effect
Principal
Resources
Action
Condition
간단히 말해 누가(Principal) 대상(Resource)에 작업(Action)을 조건(Condition)에 따라 허용(Effect)할지 말지를 정해 놓은 정책입니다. 그런데 이 정책이 적용할 대상은 Identity 가 될 수도 resource 가 될 수도 있습니다.
Identity 기반 정책
누가(Principal) 대상(Resource)에 작업(Action)을 조건(Condition)에 따라 허용여부(Effect)를 결정하는 것
간단히 행위자(사람) 에게 부여하는 정책입니다.
위 정책은 "bizhub.hy 라는 S3 버킷에 읽기 권한을 부여함"라는 정책입니다. 그런데 누가? Principal 이 빠져 있습니다. 왜냐하면 이 정책은 사용자에게 부여하기만 하면 그 사용자는 "bizhub.hy라는 S3 버킷에 읽기 권한을 부여함"이라는 권한을 획득하기 때문입니다. 이 사용자는 IAM user, group, SAML 인증된 사용자 등을 의미합니다.
일일이 누가(Principal)를 정의하지 않아도 되기 때문에 모듈화 되어 재활용이 가능하다는 특징이 있습니다. 만약 100명의 유저에게 "bizhub.hy라는 S3 버킷에 읽기 권한을 부여함" 정책을 주려면 100개의 정책을 만들어 일일이 누구에게를 지정해야 할 것입니다.
사용자, 그룹등 대상에게 정책을 추가하기만 하면 됩니다.
Resource 기반 정책
대상(Resource) 이 누구(Principal) 에 작업(Action)을 조건(Condition)에 따라 허용 여부(Effect)를 결정하는 것
대상에게 부여되는 정책입니다.
위 정책은 "bizhub.hy 라는 S3 버킷에 읽기 권한을 계정 5998944169130의 a-user-1에게 부여함"이라는 정책입니다.
Identity 기반 정책과 다르게 Principal 이라는 누구가 정의되어야 합니다.
Identity 기반 정책인 정의된 정책들을 유저에게 부여했다면 리소스 기반 정책은 해당하는 대상에 직접 정의해야 합니다.
S3 콘솔의 버킷 정책에서 정의할 수 있습니다.
다시 한번 둘의 차이를 비교해 보면
Identity 기반 | 리소스 기반 |
사람에게 부여되는 정책 | 대상에게 부여되는 정책 |
Principal 을 넣을 필요가 없다. | 반드시 Principal 을 넣어야 한다. |
IAM console 에서 정책을 부여한다. | 대상 console 에 가서 설정 가능하다. |
이제는 사람에게 정책을 부여해야할지 또는 대상에게 정책을 부여해야 할지 또는 둘 다에게 부여해야 할지가 고민이 됩니다.
예를 들어 Account1 의 사용자 user-1과 s3 버킷 myS3 가 있다고 가정하고 이들에게 읽기 권한을 주고자 합니다.
Account1 의 user1는 Account1의 myS3에 대해 읽기 권한을 허용함 |
OR |
Account1 의 myS3에는 Account1의 user1에게 읽기 권한을 허용함 |
둘 중 하나의 정책만 부여되기만 하면 권한을 부여 받을 수 있습니다.
그런데 Account2 계정의 user-2 가 Account1 계정의 S3 버킷 myS3에 읽기 권한을 얻고자 한다면?
Account2의 user-2는 Account1의 myS3에 읽기 권한을 허용함 |
AND |
Account1의 myS3에는 Account2의 user-2에게 읽기 권한을 허용함 |
이 모두 정의되어 있어야 권한을 얻을 수 있다는 차이가 있습니다.
정리
이번 포스팅에서 IAM 의 정책이 사용자(Identity)와 자원(resource)에 부여됨과 차이점에 대해 알아봤습니다. 정책의 경우 한번 부여되게 되면 영구적으로 권한을 가지게 된다는 특징을 가지고 있어 보안상 우려가 되기도 합니다. 물론 Condition을 통해 특정 아이피, 특정 시간대에만 권한을 허용해 줄 수 있기는 하지만 기능이 한정적입니다. 다음 포스팅에서는 권한을 임시적으로 부여할 수 있는 역할(Role)에 대해 알아보겠습니다.
'AWS > IAM' 카테고리의 다른 글
[번역] 기존의 on-premise Active Directory를 클라우드와 연동해 클라우드 계정 로그인 연동, 각종 웹 어플리케이션 SSO를 하는 방법 (0) | 2022.07.20 |
---|---|
[번역] IAM 정책 타입들(SCP, IAM, Permission boundary): 언제 어떻게 써야하는 가 (0) | 2022.07.12 |
AWS SCP, OU, Policy 에 대해 알아보자 (0) | 2022.04.20 |
AWS IAM 정책(policy) 과 역할(role) 의 차이 (0) | 2022.04.05 |
제로 트러스트 아키텍처 Cloud IAM 기반 태그별 권한 할당 (0) | 2022.03.10 |