본문 바로가기
공부

AWS) IAM에 대해서

by son_i 2024. 6. 22.
728x90

IAM 이란 ? )

하나의 AWS 계정 내에서 사용자 별로 권한을 분리하고 인증방식을 제어하는 통합관리 체계 서비스를 IAM(Identity and Access Management) 이라고 한다.


IAM에서 사용하는 객체

크게 2가지 영역으로 구성되어 있다.

 

사용자 정의 : IAM User, IAM Group, IAM Role

 

사용자의 권한 정의 : IAM Policy

 

사용자와 권한은 1:N 으로 매핑되며 IAM User + IAM Policy(s), IAM Group + IAM Policy(s), IAM Role + IAM Policy(s)

형태로 각 단위 객체에 권한을 붙여 사용한다.


루트 계정과 IAM 객체

맨 처음 만드는 AWS 계정은 루트계정이라고 부른다.

루트 계정은 이 계정 내에서 할 수 있는 모든 행위에 대한 권한을 태생적으로 갖고 있는 계정이다.

 

하나의 AWS 계정 내에서 각 포지션 별의 인원들이 각자의 역할을 제한적으로 수행해야 할 때 모두가 루트 계정만을 공용으로 사용한다면 자신의 역할 범위를 넘어서는 권한이 모든 사용자에게 주어짐으로써 인적실수가 발생할 수 있고, 어떤 작업을 어느 사용자가 수행했는지에 대한 추적(Cloudtrail에서 기록) 이 불가능하다.

 

보안적인 관점에서는

  1. 역할에 따라 사용자가 엄격하게 분리되어야 하고

  2. 해당 사용2자에게는 업무 수행에 필요한 최소한의 권한만 부여되어야 한다.

 

--> IAM 계정의 필요성

 

하나의 AWS 게정 내에서 분리된 하나의 사용자 단위를 IAM User 라고 부르고, 제한된 권한을 부여하기 위한 단위 권한 객체를 IAM Policy라고 부른다.

 

즉, 하나의 AWS 계정 내에는 모든 권한을 가진 하나의 루트계정 + 다수의 IAM User + 다수의 IAM Policy가 존재하게 된다.

 

반드시 Root Account를 사용해야만 하는 경우
-> EC2를 기반으로 또는 대상으로 수행하는 보안 침투테스트 고지, 특정 EC2의 TCP 프로토콜 25번 포트 사용제약사항 해제 신청, CloudFront 전용 인증 키 페어 생성 등의 작업들은 반드시 Root Account로만 신청할 수 있다.

IAM User, Group, Role

IAM User를 만들고 나면 해당 IAM User의 인증 방식을 설정할 수 있다.

 

하나는 AWS Management Console로그인용으로 사용하는 username/password 방식,

다른 하나는 AWS CLI나 AWS SDK에서 필요한 인증키쌍(Accesskey/SeceretKey) 방식이다.

 

필요에 따라 둘 중 하나만 사용할 수도 있고 두 가지 모두를 사용할 수도 있다.

각 IAM User에는 하나 or 하나 이상의 IAM Policy 객체를 연결 하여 권한을 정의한다.

 

IAM Group은 단순히 IAM User를 집합 단위로 묶어 권한을 통합 관리하기 위해 만들어진 개념이다.

 

각각의 IAM User에 각각의 IAM Policy를 붙여 사용할 수도 있지만,

하나의 IAM Group에 IAM User를 넣어놓고, IAM Group에 붙은 IAM Policy를 참ㅈ도하여 사용하도록 구성할 수도 있다.

 

* 하나의 IAM User는 복수의 IAM Group에 속할 수 있음.

 

 

IAM Role의 개념은 조금 복잡. 먼저 믿을 수 있는 객체(Trusted Entities)가 API Call이 필요할 때마다 일정주기로

1. STS 서비스에 임시키를 요청(AssumeRole)한다. STS서비스는 

2. 요청한 객체가 믿을 수 있는 객체인지 확인하고 임시키를 발급한다. 여기서 발급된 임시키는 지정된 유효시간을 가지며 시간이 경과된 후에는 무효화(Expire)되므로 IAM User에서 사용하는 영구 인증키쌍에 비해 보안성이 높다. 마지막으로

3. 임시 인증키 쌍을 사용하여 API Call을 수행한다.

 

IAM Role은 외부 인증과 연동하는 경우에 주로 사용된다.
예를 들어, 다른 AWS 계정의 인프라를 활용하여 서비스하는 모니터링 서비스가 있다고 할 때 내가 사용하고 있는 AWS 계정 내의 각종 모니터링 수치를 다른 AWS 계정에 백데이터로 제공해야한다.
이때 사용되는 것이 IAM Role 이다. IAM Role을 하나 만들어 데이터를 제공할 AWS 계정의 ID와 IAM Policy를 통해 제공할 정보의 범위를 정의하면, 별도의 IAM User 생성 없이도 손쉽게 내 계정의 리소스 정보를 타 AWS 계정 객체에게 전달할 수 있다.

 

IAM Role의 또 다른 활용 예 -  AWS 서비스간 권한을 제어

예를 들어 특정 EC2에서 지정된 S3 버킷에 주기적으로 접근하여 객체 읽기와 쓰기를 수행한다고 할 때

EC2내에 IAM User의 인증키 쌍을 입력하지 않고 IAM Role을 정의해놓으면 별도의 인증 정보 없이 (임시 인증 값을 주기적으로 재생성하는 방법으로) S3 접근 권한을 정의할 수 있다.

 

     

출처 - 예제를 통해쉽게 따라하는 아마존 웹 서비스