AWS

IAM 서비스 알고 쓰자 - 1

엔지니어-여리 2023. 9. 28. 16:24
반응형

개요

 AWS에는 수 백 가지가 넘는 서비스가 존재합니다. 서버를 제공해 주는 서비스도 있고, 서버리스 서비스도 있고, 스토리지 서비스, 메일 서버, 로그, 모니터링 심지어는 인공 지능이나 인공위성, IoT 서비스 등이 있습니다. 이 모든 서비스를 aws에서 제공해 주고 접근할 수 있습니다. 반대로 말하면 이 모든 서비스에 접근할 권한이 필요합니다. 만약 조직에 소속된 누군가가 임의로 아주 값비싼 서비스의 자원을 생성하거나 운영 단계에 있는 서비스의 서버를 삭제시킨다면 어떻게 될까요? 분명 그 조직은 큰 타격을 입고 때에 따라 돌이킬 수 없는 상황에 닥칠 수도 있습니다. 누가 특정 서비스에 접근 가능한지 확인하고, 리소스에 대한 권한을 부여하는 것을 관리하려면 어떻게 해야할까요? AWS IAM(Identity Access and Management) 서비스는 리소스에 접근할 권한과 대상을 정의하는 서비스입니다. 

공식 문서에서는 다음과 같이 기술되어 있습니다. "You use IAM to control who is authenticated (signed in) and authorized (has permissions) to use resources."  (공식문서 바로가기)

 

살펴보기

그래서 IAM에서 뭘 할 수 있죠?

 

개요에서 `리소스에 접근할 권한과 대상을 정의하는 서비스입니다. ` 라고 언급했습니다.

좀 더 자세하게 풀어 쓰면

- 자원에 접근할 대상을 정의할 수 있습니다.

- 권한을 정의할 수 있습니다.

- 권한을 대상에 부여할 수 있습니다.

 

첫 번째로 자원에 접근할 대상을 어떻게 정의할 수 있는지 논의해봅시다.

IAM을 통해 권한을 부여 받는 대상(자격 증명, Identity)은 3가지 입니다.

- 사용자 (IAM User)

- 그룹 (IAM Group)

- 역할 (IAM Role)

 

사용자는  AWS 서비스를 사용하는 단일 사용자를 말합니다. 

사용자에 대한 주관적으로 제안하는 사용법 
- 사용자는 현실세계에 있는 사용자와 1:1 매칭되어야 합니다. (절대로 공유되어선 안되는)

 

그룹은 여러 사용자의 모듬입니다.  

역할은 사용자와 비슷한 자격증명입니다. 특정 사용자가 일정기간만 특정 권한이 필요할 수 있고, 사용자가 아닌 서비스가 스스로 권한이 필요한 경우 자격증명을 목적으로 역할을 가질 수 있습니다.

 

자원에 접근할 대상까지만 설명하면 아무것도 할 수 없습니다. 마치 운동장에 수십명을 불러다놓고 몇 몇씩 짝 찌어주거나, 이름표만 달랑 붙여놓은 것과 다르지 않습니다. 

두 번째로 설명할 권한을 정의하고, 권한을 부여하는 내용을 설명한 다음 다시 맨 처음으로 돌아가서 다시 논의해보도록 합시다.

IAM에서 권한을 정의하는 방법

IAM에서 권한을 정의하는 방법은 IAM Policy 라는 서비스에서 JSON 형식을 따릅니다.

JSON 정책에는 다음과 같은 요소들이 있습니다. (참고)

기본적으로 (많이) 사용되는 7가지 Key에 대해 간략히 짚고 넘어가겠습니다.

- Version: 가장 상단에 위치한 키 입니다. '2012-10-17' 값을 고정으로 사용하면 됩니다. 정책의 버전을 뜻합니다. 추후에 새로운 버전이 나온다면 변경될 수 있습니다.

- Statement: 가장 상단에 위치한 키 입니다. 아래 Effect, Principal, Action, Resource, Condition 키 하나의 권한으로 인식하는 권한 모음이라고 할 수 있습니다.

- Effect: 동일한 statement에서 허용(allow) 또는 명시적 거부(explicit deny) 중 하나를 지정합니다.

- Principal: 리소스에 대한 액세스가 허용되거나 거부되는 보안 주체를 지정합니다.

- Action: 어떤 기능인지 정의합니다. (ec2를 실행, sqs에 메시지 전송)

- Resource: Action에서 정의된 기능에 대한 대상을 결정합니다.

- Condition: 정책이 수행될 조건을 정의합니다.

 

정책은 굉장히 복잡하고 이해하기 어렵죠 ?

 

제가 설명을 잘 못해서 이렇게만 설명하면 굉장히 복잡하고 이해하기 어렵습니다.

보통 주변 사람들에게 정책에 정의되는 요소들을 설명할 때 영어 4형식에 빗대어 설명합니다.

영어 4형식은 다음과 같이 구성되어 있습니다.

주어(S) + 동사(V) + 간접 목적어(I.O) + 직접 목적어(D.O)  :

보통 해석할 때는 이렇게 하죠. -->  S가 I.O에게 D.O를 V 

여기서 주어는 Principal, 동사 Effect, 간접 목적어 Resource, 직접 목적어 Action 이렇게 구성한다고 생각하고 영어 문장을 만들어 보면 정책을 구성하는 요소들을 좀 더 쉽게 이해할 수 있을거라 봅니다.

 

마지막으로 권한을 대상에 부여할 수 있습니다.

IAM에서는 AWS에서 미리 만들어 둔 정책 혹은 관리자가 만들어 둔 정책을 사용자, 그룹, 역할에 부여할 수 있습니다. 

 

다시 처음으로,

아직 IAM 자격증명주체(사용자, 그룹, 역할)과 권한을 정의(정책)하는 것에 대해 이해가 잘 가지 않는다면 다음 시나리오를 함께 살펴봅시다.

시나리오를 하나 만들어서 살펴보죠.

- 회사가 처음 만들어지고, AWS 계정이 생성되었습니다. 

- AWS IAM 사용자가 필요해서 사용자를 만듭니다.

- 사용자에게 정책을 부여해서 사용합니다.

- 사용자가 늘어나면서 신규 사용자에게도 정책을 부여합니다.

- AWS IAM 관리 업무도 하던 SA는 다른 일보다 반복적인 IAM 사용자 생성 삭제 업무를 단순화 하기 위해 그룹을 만듭니다.

- 벤다이어그램을 그려서 사용자를 그룹화할 계획을 짭니다.

- 그룹에 정책을 포함하고 사용자를 그룹에 포함시키고 관리자는 생산성이 증가됨을 느끼며 업무를 합니다.

- 규모가 커지고 서비스가 세분화되면서, 기존 그룹을 활용한 방법도 한계가 다가옵니다. aws 계정이 2개 이상이 됩니다.

- 로그인 로그아웃에 굉장히 많은 시간을 빼앗깁니다.

- 다른 계정에서도 그룹을 설정하고 사용자를 정의하기엔 관리자의 업무가 과중됩니다.

- 역할을 도입해서 교차계정 역할전환을 합니다. 

- 개발자나 aws 사용자는 단일 사용자로 로그인하여 역할적환으로 업무 편이성이 증가합니다.

- 관리자는 aws 사용자에게 최소한의 정책 권한만 정의하고 미리 역할에 정책을 정의해둡니다. 

- 역할을 사용할 수 있는 사용자만 관리하게 되면서 더 고효율적인 관리를 할 수 있게 됩니다.

 

물론 사용자 혹은 사용자와 그룹만으로 관리하는 효율적인 방법이 물론 있겠지만 위 내용은 제가 경험해본 시나리오를 통해 IAM에서 사용자, 그룹, 역할에 대한 이해를 주기 위한 시나리오 정도로만 생각해주시면 좋겠습니다. 

 

읽어주셔서 감사합니다.

 

반응형

'AWS' 카테고리의 다른 글

SES가 꺼졌다.  (1) 2024.02.24
JIRA에서 IAM 권한 요청 관리하기  (0) 2024.02.12
EC2에서 로그 확인  (0) 2023.08.31
AWS CodeWhisperer를 활용하기  (0) 2023.04.18
다른 곳에서 구매한 도메인을 AWS로 변경하기  (0) 2023.02.23