[Cloud] AWS IAM에 대하여

두비니

·

2021. 8. 2. 05:27

 

 


AWS IAM


 

 

 

1. AWS?

 

 

 

 

 

  AWS란 (Amazon Web Service) 아마존에서 개발한 클라우드 플랫폼입니다. 클라우드 컴퓨팅은 단순히 말해서 인터넷을 통해 IT 리소스와 애플리케이션을 일종의 종량 과금제로 제공하는 서비스이죠. 오늘은 AWS 자체에 대해서 이야기하는 것이 아니기 때문에 너무 깊게 짚고 넘어가지는 않도록 하겠습니다. 결론적으로 짚고 넘어갈 점은 AWS가 압도적으로 점유율이 높다는 점입니다. AWS의 글로벌 인프라가 현재 전세계에 총 24개의 지역(region)으로 나누어 제공되고 있으며, 편리하게 사용할 수 있다는 점에서 클라우드 인프라 시장에서도 점유율 1위를 계속해서 유지해오고 있습니다. [1]

 

2. AWS IAM

 

 

  클라우드의 보안을 중요시하지 않을 경우, 아무리 서비스 자체의 보안을 완벽하게 한다고 한들 클라우드의 취약점을 통해 기존의 보안들이 무용지물 될 수 있습니다. 이에 대해 AWS는 AWS의 리소스에 대해 권한 및 접근 제어를 리소스별로 세분화하여 제어할 수 있도록 IAM(Identity and Access Management)이라는 서비스를 제공합니다.[2] 밑에서 더 자세히 설명하겠지만 Group, User, Role, Policy로 나누어 설정할 수 있습니다. 보안의 관점에서는 이에 대해 고민해봐야 하는 이유는 권한상승이나 유출 문제 등의 취약점 분석 과정에서 가장 눈여겨봐야 하는 부분 중 하나이기 때문입니다.

 

 

  IAM은 총 Group, User, Role, Policy를 통해 권한을 분리합니다. 각각은 이름 그대로 그룹(Group)에 따라서, 유저(User)에 따라서, 역할(Role)에 따라서, 마지막으로 정책(Policy)에 따라서 IAM을 구축하게 됩니다. 보통 IAM을 사용한다면 Role이나 Policy에 기반하여 IAM을 작성하게 됩니다. 각각을 보통 RBAC(Role-based Access Control)과 PBAC(Policy-based Access Control)라고 칭합니다. 결론적으로 PBAC가 훨씬 더 효율적입니다.[3] 

 

  비유를 해봅시다. 종합병원에서의 권한을 RBAC방식으로 관리하여 의사선생님이 자신의 환자의 레코드를 열람할 수 있도록 IAM을 작성한다고 가정해봅시다. 모든 의사선생님은 각각 다른 환자들을 관리하기 때문에(role) 작성할 때 A선생님은 1번 환자, B선생님은 2번환자... 의 식으로 직접 작성해야합니다. 이렇게 작성할 경우 0의사가 0번 환자의 레코드에 접근할 수 있다는 것을 일일히 작성해줘야겠죠?

 

  반면에 PBAC방식을 사용한다면 더 효율적으로 관리할 수 있습니다. 말이 정책이지 일종의 규칙을 만드는 것이기 때문에, 모든 의사는 자신의 환자의 레코드에 접근할 수 있다 라는 policy를 하나 만들면 그만입니다. 이 방식의 가장 큰 장점은 유지하기 용이하다는 점입니다. 만약 환자가 기존 의사선생님이 아닌 다른 선생님에게 배정된다면, RBAC방식으로 운영된다면 다시 배정된 의사를 바꿔야 겠지만, PBAC방식을 사용한다면 다른 의사선생님에게 배정된다고해도 설정한 policy안에서 벗어나지 않기 때문에 다른 변경을 할 필요가 없습니다.

 

3. IAM Policy Structure (PBAC)

 

 

IAM은 json형태로 되어있습니다. 이건 줄글로 설명하는 것보다 직접 코드를 보면서 설명하는게 나을 것 같아서 정리합니다. 대신 모든 설명은 PBAC를 기준으로 설명됩니다. 

출처: 참고[4]

위 json형태는 IAM의 전형적인 형태입니다. 총 3개의 statement가 등록되어 있는 것을 볼 수 있습니다. 여기서 statement하나당 정책 하나라고 보면 편합니다. statement도 뜯어보면 각각 effect, action, resource로 나뉘어진걸 볼 수 있습니다. 이 세 가지의 관계를 한 줄로 정리하자면 "해당 범위(resources)에 대해서 행동(action)을 허가/비허가(effect)한다"라고 보시면 됩니다. 첫 번째 statement를 예를 들어 보겠습니다. 이걸 해석하면 모든 resource에 대해서 ListAllMyBuckets라는 행동을 허가(allow)하는 것이겠죠? 

  마지막으로 이 예시에는 포함되지 않았지만, 가끔 statement의 뒤에 'condition'이라는 구문이 붙을 때가 있는데, 이건 말 그대로 뒤에 서술된 조건을 만족해야 해당 policy를 실행할 수 있게 한다는 뜻입니다.

 

4. 결론

 

 

  오늘은 AWS에서 제공하는 IAM에 대해서 알아보았습니다. 개인적으로 많이 헷갈리는 개념 중 하나인 것 같습니다. IAM에 대한 기본적인 이해를 기반으로 보안 취약점에 대해서 testing할 수 있는 CloudGoat라던가, PACU등을 활용하여 더 공부할 예정입니다. 끝!

 

 

 

 

 

참고

 

[1] https://zdnet.co.kr/view/?no=20210205150215 

[2] https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/introduction.html

[3] https://www.youtube.com/watch?v=b-8CnhwQpkk 

[4] https://musma.github.io/2019/11/05/about-aws-iam-policy.html