AWS IAM Role? RoleSwitch?

JIPA
10 min readJun 3, 2020

--

우리가 AWS IAM 을 사용하다 보면 IAM 사용자 그리고 IAM 역할(Role) 이라는 개념에 대해 접하게 되는데요. 이 글에서는 IAM 의 Role 이 무엇인지 그리고 이 Role 이라는 것을 사용하기 위한 RoleSwitch 의 개념에 대해 간단하게 설명해보려 합니다.

일반적으로 AWS 와 같은 클라우드에 익숙하지 않더라도 대부분의 AWS 사용자들은 “IAM 의 사용자(User)” 라는 개념에 대해서는 아주 쉽게 이해를 합니다. 우리가 웹사이트를 처음 방문하고 회원 가입 후에 생성하고 사용하는 계정처럼 AWS IAM 서비스에서 생성하여 정해진 ID 와 사용자가 관리하는 Password 를 갖는 AWS Identity 가 바로 IAM User 입니다.

그럼 IAM Role 은 어떤 개념일까요? AWS 온라인 공식 문서에 따르면 IAM Role 은 다음과 같은 특징들을 가지고 있습니다.

- IAM 역할은 특정 권한을 가진 계정에 생성할 수 있는 IAM 자격 증명입니다.
- 역할은 한 사람과만 연관되지 않고 그 역할이 필요한 사람이면 누구든지 맡을 수 있도록 고안되었습니다.
- 역할에는 그와 연관된 암호 또는 액세스 키와 같은 표준 장기 자격 증명이 없습니다.
- 역할을 사용하여 일반적으로 AWS 리소스에 액세스할 수 없는 사용자, 애플리케이션 또는 서비스에 액세스 권한을 위임할 수 있습니다.

AWS 환경에 익숙하지 않은 사람이라면 이렇게 글로 설명된 내용만으로는 IAM Role 이 어떤 개념인지 쉽게 와 닿지 않는 것이 사실인데요. 위 설명에서 언급된 IAM Role 의 특징 중 가장 중요한 한가지는 IAM Role 에는 정해진 표준장기자격증명 즉, Password 가 없다는 것입니다. IAM User 와는 다르게 IAM Role 은 IAM Role 을 생성할 때 Password 를 지정하지도 않고 Access Key/Secret Key 를 발급하지도 않습니다. 저는 이 점이 IAM Role 이 IAM User 와 가장 큰 차이점이라고 생각합니다.

그렇다면 Password 가 존재하지 않는 IAM Role 은 어떻게 사용할 수 있는 것일까요?

IAM Role 을 사용하기 위해서는 IAM Role 을 호출할 수 있는 권한을 가진 다른 IAM 자격증명이 필요합니다. 예를 들면, 다른 IAM User 나 혹은 다른 IAM Role 이 될 수도 있습니다. 이처럼 IAM User 나 Role 이 특정 IAM Role 을 호출하여 해당 Role 의 권한을 획득하는 것을 RoleSwitch 라고 하는데요. 이와 같은 Role Switching 은 Management Console 이나 AWS CLI 등을 통하여 사용하실 수 있습니다.

그럼 이제 IAM Role 의 개념을 좀 더 쉽게 설명하기 위해서 간단한 테스트 환경을 구성해보도록 하겠습니다.

먼저, IAM User 를 하나 생성하도록 하겠습니다. Username 은 “assume_user_a” 라고 하고 권한은 “sts:AssumeRole” 만 할당하도록 하겠습니다.

그리고 role_b, role_c 라는 IAM Role 을 만들어보도록 하겠습니다. 그리고 role_b 에는 EC2FullAccess 권한을 할당하고 role_c 에는 IAMFullAccess 권한을 할당하도록 하겠습니다.

정리하면, 저는 테스트를 위해서 하나의 IAM User 와 두개의 IAM Role 을 만들었습니다.

IAM User = assume_user_a ( STS 권한만 할당 )

IAM Role = role_b ( EC2 권한만 할당)

IAM Role = role_c ( IAM 권한만 할당)

그럼 이제 IAM User 를 통해서 Management Console 을 통해 로그인 후 권한을 확인하고 role_b 로 Role Switching 을 해보도록 하겠습니다.

  1. assume_user_a 로 로그인 후 EC2 인스턴스 메뉴에 접속하여 인스턴스 목록이 보이는지 확인해 보았습니다.

assume_user_a 로 로그인은 가능했지만 EC2 와 관련한 권한이 없기 아래와 같이 Error 화면이 나타나는 것을 확인하였습니다.

2. EC2 관련 정보를 확인하기 위해 EC2 관련 권한을 가지고 있는 role_b 로 Role Switching 을 시도하였습니다.

AWS Management Console 에서 Role Switch 메뉴를 통하면 아래와 같이 계정정보와 Role 이름을 입력하여 RoleSwitch 가 가능합니다.

RoleSwitch 가 성공적으로 이뤄지면 아래 화면과 같이 브라우저의 우측 상단에 IAM User 로 로그인했을때와는 다르게 Role 이름이 동그랗게 강조되어 있는 것을 확인할 수 있습니다.

role_b 에는 EC2 권한이 있기 때문에 RoleSwitch 이후에는 EC2 Instance 의 목록이 정상적으로 출력되는 것을 확인할 수 있습니다.

3. 이번에는 IAM 권한을 가지고 있는 role_c 로 RoleSwitch 를 해보도록 하겠습니다.

assume_user_a 에서 role_b 로 RoleSwitch 했던 것과 동일한 방법으로 수행하면 RoleSwitch 가 가능합니다.

아래 화면과 같이 role_c 는 IAM 관련 권한만 부여되어 있기 때문에 EC2 인스턴스 목록이 나타나지 않는 것을 확인할 수 있습니다.

4. 이번에는 role_c 에서 IAM 메뉴를 확인해보도록 하겠습니다.

role_c 는 IAM 권한을 가지고 있기 때문에 아래와 같이 IAM User 리스트가 정상적으로 출력되는 것을 확인할 수 있습니다.

여러분들은 여기까지 IAM Role 이 어떻게 IAM User 에서 사용이 될 수 있는지 Management Console 을 통해 살펴보았습니다. 그리고 IAM Role 이 AssumeRole 권한을 갖는 IAM 사용자에 RoleSwitch 에 의해 사용될 수 있다는 것을 확인하였습니다. 여기서 중요한 한가지는 이렇게 RoleSwitch 를 하는 것이 Management Console 뿐만 아니라 CLI 나 API 사용 환경에서도 가능하다는 것인데요. 이 때 기억하셔야 할 사항이 하나 있습니다.

이렇게 assume_user_a → role_b → role_c 로 전환이 되는 과정을 Role Chaining 이라고 하는데요. 이 Role Chaining 이 Management Console 에서 이뤄질 때와 CLI 에서 이뤄질 때 차이가 있습니다.

테스트 과정을 눈여겨 보신 분은 아시겠지만 사실 assume_user_a 에서 role_b 로 RoleSwitch 하고 다시 role_c 로 RoleSwitch 를 하였지만 role_b 에는 AssumeRole 권한이 없었습니다. 이상하죠? role_b 에서 role_c 로 분명 RoleSwitch 가 가능하였는데 role_b 에는 AssumeRole 권한이 없었다니..

사실 Management Console 에서 RoleSwitch 가 이뤄질 때는 최초 IAM 사용자의 권한에 따라 이후의 RoleSwitch 가 결정되게 됩니다. 다시 말하면, 눈으로 보기에는 assume_user_a → role_b → role_c 인 것처럼 보이지만 실제로는 assume_user_a → role_b, assume_user_a → role_c 와 같이 assume_user_a 의 권한을 통해 role_c 로의 RoleSwitch 가 이뤄졌다는 것입니다. 따라서, Management Console 에서 RoleSwitch 를 하실 때는 이와 같은 개념을 염두에 두시고 IAM Policy 를 구성하셔야 합니다.

그럼 이번에는 AWS CLI 를 이용하여 동일한 AWS IAM/Role 을 이용하여 RoleSwitch 를 해보도록 하겠습니다.

  1. assume_user_a 에서 role_b 로 RoleSwitch

아래 화면에 보이는 것처럼 Management Console 에서 작업하였던 것과 동일하게 RoleSwitch 가 성공하였습니다. (assume-role 명령을 통하여 role_b 를 호출하였고 성공적으로 AccessKey/SecretKey/Token 값을 받았습니다.) 응답으로 전달받은 AccessKey/SecretKey/Token 을 사용하면 정상적으로 EC2 와 관련한 작업이 가능할 것입니다.

2. 이번에는 role_b 의 권한을 이용하여 role_c 로 RoleSwitch 를 시도해보도록 하겠습니다.

아래 화면에 보이는 것처럼 role_b 의 권한을 이용하여(role_b 의 AccessKey/SecretKey/Token 을 이용하여) role_c 로 RoleSwitch 를 시도하면 권한이 없기때문에 Error 가 발생합니다. role_b 에는 EC2 권한만 있기 때문에 RoleSwitch 가 안되는 것은 당연하겠죠?

3. 마지막으로 role_b 에 AssumeRole 권한을 부여한 후 role_c 를 호출할 수 있는지 확인해보도록 하겠습니다.

아래와 같이 role_b 에 AssumeRole 이 가능한 IAM Policy 를 추가하였습니다.

AssumeRole 권한 추가 후 RoleSwitch 를 시도하면 아래 화면에 보이는 것처럼 role_b 도 AssumeRole 권한을 이용하여 role_c 호출이 가능한 것을 확인할 수 있습니다.

이처럼 AWS CLI 를 이용하게 되면 assume_user_a → role_b → role_c 관계의 Role Chaining 에서 각각의 단계에 해당하는 IAM 자격증명(IAM User 혹은 IAM Role)은 호출하고자 하는 Role 에 대한 호출 권한이 있어야 함을 알 수 있습니다.

AWS IAM 의 Role 의 사용 방법 및 RoleSwitch, Role Chaining 등에 대한 보다 자세한 사항은 아래 AWS IAM 공식 문서를 참고하시기 바랍니다.

감사합니다.

--

--

JIPA
JIPA

Written by JIPA

Always Day 1. Security is job zero.

No responses yet