1. AWS IAM 무엇인가?
AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스이다.
쉽게 말해, AWS 내에 존재하는 사용자 및 그룹 또는 서비스가 액세스할 수 있는 AWS 서비스에 대하여 권한을 관리할 수 있는 서비스 이다.
예를 들어서 "전산실에 출입가능한 인원은 보안팀만 출입가능하다." 이때 전산실에 출입하기 위해 키가 필요할 것이고, 키를 지니고 있는 사람은 보안팀 인원이다. 이때 인증할 수 있는 키를 IAM 서비스가 부여해준다고 생각하면 된다.
AWS 서비스에서 매우 중요하고 또 중요한 서비스임으로 잘 공부하는게 좋다.
또한, 이 서비스에는 AWS 계정에 대한 공유 액세스, 세분화된 권한, 자격 증명 연동(Active Directory 통합 포함), 다단계 인증(MFA), 사용자에게 임시 액세스 제공 등의 기능이 포함되어 있다.
IAM은 범용 시스템이다. 즉, 전 세계적으로 액세스할 수 있으며 특정 지역에 의존하지 않는다.
IAM 작동방식?
1. 실제 사용자나 애플리케이션이 AWS를 통해 로그인 보안 인증을 사용하여 인증
2. AWS 계정에서 신뢰하는 보안 주체(IAM 사용자, 페더레이션 사용자, IAM 역할 또는 애플리케이션)와 로그인 보안 인증 정보를 일치 시키는 방식으로 인증이 제공됨
3. 보안 주체에게 리소스 액세스 권한을 부여하도록 요청
4. 권한 부여 요청에 대한 응답을 통해 권한 부여
5. 인증된 후에는 리소스에 대하여 접근 권한을 획득하여 조치 또는 작업을 할 수 있는 상태로 변함
IAM 리소스는 크게 이렇게 존재한다.
- 사용자: 모든 AWS 서비스 및 리소스에 대한 완전한 액세스 권한이 있는 단일 로그인 자격 증명의 경우 이를 Root 사용자라고 정의, Root 사용자 내에 존재하는 사용자는 IAM 사용자라고 정의한다. 사용자의 유형에는 Console, 프로그래밍 두 가지 유형이 존재한다.
- 사용자 그룹: 사용자를 묶어놓은 개념이 가장 알맞다.
묶는 이유는 무엇일까? 예를 들어보자. 한명의 관리자가 여러 사용자에 대해서 권한을 관리하면 어떻게 될까? 당연히 업무적으로 과부하가 생길 것이다. 이를 사용자 그룹을 통해 사용자를 묶고 해당 그룹에 대한 기준을 세워 Admin 그룹은 Admin 권한 부여, Devops 그룹은 Developer 이런식으로 관리면에서 효율적이기 때문이다.
즉, 많은 사용자에게 공통적인 권한을 부여해야할 때 용이하다. - 역할: 특정 사용자 또는 그룹과 직접 연결되지 않는 안전한 액세스 제어의 한 형태이다. 액세스 권한이 없는 사용자나 서비스에게 일시적으로 권한을 위임해주는 개념이다.
- 정책: 정책은 자격 증명이나 리소스와 연결될 때 해당 권한을 정의하는 AWS의 객체이다. 정책을 통해 사용자 및 역할마다 어떤 서비스에 접근할 수 있는지, 접근 불가하도록 한다든지, MFA가 미활성화되어있는 사용자의 경우 모든 권한을 Deny 시킨다든지 등등의 권한을 정의할 수 있다. JSON으로 정의한다.
정책에 대해서 좀 더 알아보자.
IAM 정책에는 아래와 같은 종류가 있다.
1. 자격증명기반 정책
- 관리형 정책
- AWS 관리형 정책: AWS에서 생성 및 관리하는 관리형 정책이다.
- 고객 관리형 정책: 사용자가 자신의 AWS 계정에서 생성 및 관리하는 관리형 정책이다. AWS 관리형 정책보다 더 세밀하게 제어가 가능하다.
- 인라인 정책: 단일 사용자, 그룹 또는 역할에 직접 추가하는 정책이다. 1대1 관계를 유지한다.
2. 리소스 기반 정책: 인라인 정책을 리소스에 연결하는 정책 유형이다. 기존에 자격증명기반 정책과는 다르게 직접 리소스한테 정책을 부여할 수 있다. Amazon S3 버킷과 같은 리소스에 연결할 수 있는 정책이다.
3. 권한 경계: 자격 증명 기반 정책을 통해 IAM 엔터티에 부여할 수 있는 최대 권한을 설정하는 고급 기능이다. 예를 들어 Admin 권한이 부여된 권한이 있다고 생각해보자. 권한 경계를 사용해서 모든 권한이 부여되어있지만 특정 서비스에 대해서만 경계선을 그을 수 있다.
즉, 자격 증명 기반 정책 및 관련 권한 경계 모두에서 허용되는 작업만 수행할 수 있다는 의미이다.
4. Organizations SCP: AWS Organizations는 기업이 소유하는 AWS 계정을 그룹화하고 중앙에서 관리할 수 있는 서비스이다.
5. 액세스 제어 목록: 리소스에 액세스할 수 있는 다른 계정의 보안 주체를 제어할 수 있는 서비스 정책이다.
6. 세션 정책: 역할 또는 페더레이션 사용자에 대해 임시 세션을 프로그래밍 방식으로 생성할 때 파라미터로 전달하는 고급 정책이다.
주로 많이 사용되는 정책은 자격증명기반 정책, 리소스 기반 정책, Organizations SCP 유형 총 크게 3가지로 분류해도 된다고 생각한다.
다음 글에서 자격증명기반 정책과 리소스 기반 정책을 비교해보겠다.