최근 프로젝트에서 ECS를 통한 인프라 배포를 맡은 적이 있는데, 겸사겸사 AWS에 대해 생각나는대로 정리해보려고 한다
우선 간단하게 IAM에 대해 알아보자
Identity and Access Management의 약자로, AWS 리소스에 대한 접근 제어를 담당하는 서비스이다
누가 어떤 리소스에 무슨 작업을 수행할 수 있는지 설정할 수 있고, 그룹을 생성하여 공통으로 묶거나 역할을 생성하여 여러 사용자/그룹에 부여하는 등의 권한 관리 작업을 할 수 있다
쉽게 말해 권한을 의미한다. 어떤 조건에서 누가 A에 대해 뭘 할 수 있는 권한이 있는지 없는지를 여부를 설정하며 역할을 생성할 때 기반이 되기도 한다
필요에 따라 특정 사용자들에게 권한을 줄 수도 있고, 비즈니스에 맞는 권한을 직접 만들 수도 있다
그럼 구성 요소에 대해 간단히 알아보자
Version
말 그대로 버전 관리의 버전을 말한다
Statement
하나하나 설정한 권한들을 Statement라고 하며, 이들의 집합을 말한다
Sid
해당 Statement의 이름을 지정한다
Effect
수행 가능 여부를 정하는 부분이다
가능하다면 ALLOW를, 안된다면 DENY를 설정한다
Principal
누가 이 정책의 해당자인지를 정한다
때문에 AWS 서비스가 될 수도, 외부 서비스가 될 수도, 사용자/계정가 될 수도 있다
Action / NotAction
대상이 되는 수행 작업들을 말한다
요컨대 Action: [A, B]라면 A, B 작업을 할 수 있다,
NotAction: [A, B]라면 A, B 작업 빼고 다 할 수 있다라는 의미이다
Resource
수행 작업의 대상을 정한다
S3, EC2 등 조작하고자 하는 것들을 적는다
Condition
추가로 필터링하고 싶을 때 사용한다
특정 이름을 가진 것만 적용한다던가, Tag를 가지고 판별하는 등의 작업이 가능하다
특정 권한들을 가지고 있는 자격 증명이다. 쉽게 말해서 정책이 A 권한, B 권한 등을 말한다면, 역할은 A 권한, B 권한을 가지고 ???을 수행할 수 있는 역할을 말한다
이렇게만 들으면 사용자와 비슷하다고 느낄 수 있다
하지만 사용자는 특정 누군가에게 주어진 권한이기에 어떤 사용자든 권한을 줄 수 없으나,
역할은 특정 기능을 수행하는 권한을 의미하므로 누구에게나 부여해 줄 수 있다
다만 IAM 사용자는 Access Key로 장기 자격 증명이 가능하지만, 역할은 권한을 잠시 부여하는 용도로 임시 자격 증명(STS)만이 가능하다
역할을 만들 때는 신뢰 정책과 권한 정책을 설정하게 된다
신뢰 정책은 지금 생성하려는 역할을 누가맡을 수 있는지를 정하는 것이고,
권한 정책은 그래서 뭘 할 수 있는지를 정하는 것이라고 보면 된다