클라우드/AWS

어려운 AWS IAM.. 너는 뭐니?

be-lgreen 2021. 10. 28. 22:34

처음 들어보는  사람은 IAM이라는 단어가 굉장히 생소할 것이이다.

IAM에 대해 알아보기에 앞서 사용자가 AWS를 사용하는 방법에 대해 알아보자.

 

1. 콘솔 기반  작업

2. 프로그래밍 방식 (SDK, CLI 사용)

3. 프로비저닝 엔진 (IaC, Cloud Formation, Terraform)

4. 원하는 언어로 형상관리 (CDK)

 

처음 접하는 사람은 1번을 활용할 것이고, 점점  AWS사용에 익숙해질 수록 프로그래밍 방식을 이용할 것이다.

어떤 방법을 이용하던 사용자가 자원을 만들고 변경하고 삭제하는 모든 작업은 물론

자원끼리 주고 받은 요청과 응답도 모두 API로 이루어진다.!! (Everything API) 

 

AWS Cloud Trail을 통해 AWS API의 거의 모든 기록을 확인할 수 있다. (감사)

 

IAM이란?

IAM의 full name은 Identity and Access Management이다. 번역하면 '인증'과 '인가'라고 할 수 있다.

 

나는 어드민 유저인데, S3 A버킷을 지울거야 ~ 

라고 어떤 사람이 주장하고 있다고  하자. 

인증(Identity)는 바로 이 사람이 진짜 어드민 유저인지 확인하는 과정이다. 

인가(Access Management)는 A버킷 을 지우는 행위가 실제로 해당 사용자에게 허가된 작업인지 확인하는 과정이다. 

 

IAM User는 뭐고 IAM Role은 뭘까? 헷갈린다. (인증)

우리가 AWS에 가입하고 프로젝트를 생성하면, 이메일과 동일한 아이디를 가진 '루트 유저'를 가지게 된다.

하지만 '루트 유저'는 모든 권한을 가지고 있기 때문에 실제로 루트유저를 가지고 AWS 프로젝트 관리하기에는 위험하다.

 

따라서 별도의 보안 주체를 만들 수 있는데 이것이 IAM User, IAM Role이다.

 

IAM User는 우리가 ID/ Password를 입력하고 콘솔에 로그인하는 보안 주체이다. 실제 사람 사용자라고 할 수 있다.

IAM User는 Access Key, Secret Key로 구성된 자격증명(Credential)을 사용하여 인증을 받게 되는데, 이때 이 자격증명은 장기 Credential이다.

 

반면,  IAM Role는 정의된 권한 범위 내 AWS API를 사용할 수 있는 '임시 자격증명'이다. Access Key, Secret Key에 더해 일정시간이 지나면  만료가 되는 Token값을  가진 자격증명이다. 

IAM User의 자격증명은 장기 자격증명이기 때문에 이 정보를 프로그램에 하드코딩하여 사용하는 것은 매우 위험하다.

 

따라서 루트 유저는 처음 계정을 만들 때 그리고 첫번째 IAM User를 만들 때만 사용하고 관리 업무에는 따로 IAM User를 만들어 사용해야한다. 또한 IAM User는 실제 사용자와 1:1 매핑 되어야 하며, 여러사람이 같은 IAM User를 사용하지 않는것이 좋다. 그래야 어떤 사용자가 어떤  행위를 했는지 추적하기 쉬워진다.  

 

 

Role? Policy? 헷갈린다. Policy란? (인가)

AWS의 모든 API호출은 접근제어 정책(policy)를  기반으로 인가가 수행된다. 따라서 접근제어 정책(policy)은 IAM User, IAM Role, IAM Group, AWS서비스에 연결될 수 있다. 

 

접근제어 정책은 어떤 행위를 Allow하고,  어떤 행위를 Deny할지에  대한 내용을 담고 있다. 디폴트는 Deny이다. 

 

예) IAM Role을 가진 EC가 DynamoDB에서 데이터를 읽고 쓰려고 하는 경우

허용한다, GetItem, PutItem액션을, DynamoDB중 특정 테이블인 MyTable에 대해, 요청자의 IP가 1.1.1.1인 경우에.

 

 

IAM 정책의 종류는 다양하다. 

앞서 살펴본 예시는 특정 보안 주체가 어떤 행위를 할 수 있는지에 대한 정책으로 Identity-based정책이다.

반면, 요청을 받는 AWS자원에 적용되는 Resource-based정책도 있다.

Identity-based :  접근을 하기위한 정책
Resource-based : 접근을 받기위한 정책

앞서 언급했듯이 Resource-based정책은 자원을 기준으로 어떤 보안 주체가 접근가능한지에 대한 정책으로 

Identity-based policy와 다르게 Principal 즉, 접근할 수 있는 보안 주체에 대한 정의가 필요하다.

 


기타 IAM 및 보안 관련 AWS서비스는 다음과 같다.

AWS IAM Access analyer

Amazon GuardDuty(Cloud Trail로그 ,DNS로그, VPC flow 로그를 활용하여 다양한 해킹시도나 보안 위협을 탐지해주는 서비스)

 

더 알아볼 개념은 다음과 같다.

RBAC, ABAC