본문 바로가기

AWS/IAM

AWS IAM Identity base 와 resource base policy 의 차이

반응형

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)에 대해 알아보겠습니다. 

 

 

 

 

 

 

반응형