IAM 란?
- Identify and Access Management의 약자로 AWS 리소스를 사용하는 유저, 그룹, 사용권한 등을 전체적으로 관리하는 서비스
메뉴 설명
- Groups : 그룹 추가, 삭제 및 그룹별 세부적인 리소스 사용권한을 부여하고 유저들을 그룹별로 묶어서 관리할 수 있음 (그룹에 소속된 유저는 자동으로 그룹이 가지고 있는 권한을 부여받음)
- Users : 유저 추가, 삭제 및 유저를 그룹에 소속시키거나 특정 유저에게만 권한 부여 가능
- Roles : 유저나 그룹에 권한을 부여하는 것이 아닌 AWS의 리소스에 권한을 부여하는 개념
(Ex. EC2 Instance에서 Lambda 리소스 함수를 부를 경우 EC2는 Lambda를 사용할 수 없는 권한이 없기 때문에 접근이 불가능하다. 이러한 경우 EC2 리소스에 Lambda 사용권한을 부여하게 되면 Lambda 서비스에 접근 가능)
- Policies : 정책이라는 의미지만 실질적으로는 권한 부여에 좀 더 가까운 메뉴
(Ex. EC2의 Nano2 Instance만 실행할 수 있도록 함 / S3의 특정 버켓만 읽기 전용으로 접근 등등)
- Account settings : 계정의 비밀번호 정책을 설정
용어 설명
용어
- 리소스 : IAM에 저장된 사용자, 역활, 그룹 및 정책 개체
- ID : 식별 및 그룹화에 사용되는 IAM 리소스 객체 (사용자, 그룹 및 역활이 포함)
- 개체 : AWS가 인증에 사용하는 IAM 리소스 객체 (사용자 및 역활이 포함)
- Principal : 엔티티를 사용하여 AWS에 로그인하고 요청하는 사람 또는 애플리케이션
보안 주체
- AWS 리소스에 대한 작업을 요청할 수 있는 사람 또는 애플리케이션
요청
- 작업 또는 작동 : 보안 주체가 수행하고자 하는 작업 또는 작동
- 리소스 : 수행된 작업 또는 작동에 따른 AWS 리소스 객체
- 보안 주체 : 엔티티(사용자 또는 역활)를 사용하여 요청을 보내는 사람 또는 애플리케이션 (보안 주체에 대한 정보는 보안 주체가 로그인하는데 사용된 엔티티와 관련된 정책이 포함)
- 환경 데이터 : IP 주소, 사용자 에이전트, SSL 사용 상태 또는 시간대와 같은 정보
- 리소스 데이터 : 요청되는 리소스와 관련된 데이터 (DynamoDB 테이블 이름 또는 EC2 인스턴스 태그와 같은 정보가 포함)
- AWS에서 요청을 평가하고 승인하는데 사용되는 요청 콘텍스트로 이 요청 정보를 수집
인증
- 보안 주체가 AWS에게 요청을 보내려면 IAM 엔티티를 사용하여 인증을 받아야함
- S3 및 STS와 같은 몇몇 서비스는 익명 사용자의 몇 가지 요청을 허용하지만 이것들은 규칙 예외
승인
- AWS는 요청 콘텍스트의 값을 사용하여 요청을 허용할지 거부할지 여부를 적용되는 정책을 점검하고 정책을 사용하여 허용 / 거부 결정
- 대부분의 정책은 AWS에 JSON 문서로 저장되며 보안 주체 엔티티에 대한 권한을 지정
- AWS는 요청 콘텍스트에 적용되는 각 정책을 확인하는데 단일 권한 정책에 거부된 작업이 포함된 경우 AWS는 전체 요청을 거부하고 평가를 중지 (명시적 거부)
- 요청은 기본적으로 거부되므로 AWS는 적용 가능한 권한 정책이 요청의 모든 부분을 허용하는 경우에 요청에 대한 권한을 부여
- 단일 계정 내 요청 평가 로직
-
기본적으로 모든 요청을 거부
-
권한정책 (자격 증명 기반 또는 리소스 기반) 에 포함된 명시적 허용은 이 기본 작동을 재정의
-
조직 SCP, IAM 권한 경계 또는 세션 정책이 있는 경우 허용이 재정의함, 하나 이상의 이러한 정책 유형이 존재하는 경우 이들 정책 유형 모두가 해당 요청을 허용해야함, 그렇지 않은 경우 이 값은 묵시적으로 거부
-
어떠한 정책의 명시적 거부는 허용을 무시함
작업 또는 연산
- 요청이 인증 및 권한이 부여된 후 AWS가 요청의 작업 또는 작동을 승인
- 작업은 서비스로 정의되며 리소스 보기, 생성, 편집 및 삭제와 같이 리소스에 대해 수행할 수 있는 사항
- 보안 주체가 작업을 수행할 수 있도록 허용하려면 보안 주체 또는 영향을 받은 리소스에 적용되는 필요한 작업을 정책에 포함해야함
리소스
- AWS가 요청의 작업을 승인하면 계정 내의 관련 리소스에서 해당 작업을 수행할 수 있음
- 리소스는 서비스 내에 존재하는 객체
아키텍처
- 인증 (Authentication) : 사용자의 신원을 증명하는 것 / 클라이언트가 자신이 주장하는 사용자와 같은 사용자인지를 확인하는 과정 (로그인한 사용자는 인증된 사용자)
- 인가 (Authorization) : 권한 부여, 클라이언트가 하고자 하는 작업이 해당 클라이언트에게 허가된 작업인지를 확인 / 특정 리소스에 접근할 수 있는 권한을 부여 (접근 제어)
작동 순서
1. Principal이 인증을 요청
2. Principal은 IAM의 자격 증명을 통해 사용자 확인 (인증)
3. 인증이 완료된 사용자는 요청 콘텍스트 값을 사용하여 JSON 파일로 정의된 정책의 권한을 확인 후 허가된 권한 부여 (인가)
4. 인증과 인가를 통해 사용자가 확인되고 지정된 권한이 부여되면 AWS는 부여된 정책에 따라 사용자에게 허용된 작업을 승인
5. 작업을 승인하고 사용자가 작업할 수 있는 작업 대상 리소스를 지정
IAM Role 사용자 접근 동작
1. 사용자는 자신에게 부여된 IAM Role에게 자신이 보유한 액세스 Key의 인증을 요청
2. IAM Role은 해당 요청에 정의된 정책을 확인하고 부여된 권한에 대한 인가 후 임시 접근 Key 발급
3. 사용자는 IAM Role에게 전달 받은 임시 접근 Key를 통해 리소스에 접근
IAM Role 리소스 접근 동작
1. 관리자가 IAM을 사용하여 역활을 만들고 이 역활의 정책에는 EC2 인스턴스 만이 해당 역활을 맡을 수 있도록 지정 (정책은 S3 Bucket에 대한 읽기 전용 권한만 부여)
2. 사용자가 EC2 인스턴스를 시작하고 관리자가 생성한 역활을 할당
3. 애플리케이션이 실행되면 인스턴스 메타데이터에서 보안 자격 증명 검색에 설명된 대로 EC2 인스턴스 메타데이터에서 임시 보안 자격 증명을 가져옴 (이 자격증명은 제한된 시간 동안에만 유효한 임시 보안자격증명으로 역활을 나타냄)
4. 애플리케이션은 가져온 임시 자격 증명을 사용하여 S3 Bucket에 접근 (역활에 정의된 정책대로 읽기 전용 권한만 사용 가능)
- 애플리케이션은 현재 자격 증명이 만료되기 전에 인스턴스 메타데이터에서 새 자격 증명을 가져와야함 (인스턴스에서 제공되는 임시 보안 자격 증명은 만료되기 전에 자동으로 교체되므로 항상 유효한 설정을 사용할 수 있음)
참조 URL
https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/intro-structure.html
https://www.slideshare.net/awskorea/20150109-aws-black-belt-iam-younjin
https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html
'AWS' 카테고리의 다른 글
AWS IAM Tag (0) | 2019.04.09 |
---|---|
AWS IAM 정책 설명 (0) | 2019.04.09 |
AWS ElasticSearch (0) | 2019.04.09 |
AWS CloudWatch (0) | 2019.04.09 |
AWS CloudWatch Logs (0) | 2019.04.09 |