AWS IAM
AWS Identity and Access Management(IAM)
: 사용자를 정의하고 사용자에게 허용되는 액세스 유형을 정의할 수 있는 서비스
- 무료(사용자, 그룹, 역할 및 액세스 제어 정의)
- 글로벌 서비스(IAM 리소스는 AWS 클라우드의 모든 리전에서 사용 가능)
- 정책을 사용하여 모든 AWS 서비스에 대한 액세스 제어
- 시스템 관리자, 데이터베이스 관리자, 스토리지 관리자, 보안 관리자 등의 운영 그룹을 정할 수 있음
- 사용자, 역할 또는 특정 리소스에 대한 액세스 인증과 확인을 처리
- AWS 계정에서 리소스의 시작, 구성, 관리, 종료에 대한 액세스 권한을 중앙에서 관리하는 서비스
필수 구성 요소
사용자 | AWS 계정으로 인증할 수 있는 사람 or 애플리케이션 |
그룹 | 동일한 권한 부여를 받은 IAM 사용자의 모음(고객이 그룹을 정의하고 액세스 정책을 적용) |
정책 | 하나 이상의 서비스에 대한 액세스를 정의하는 문서, 사용자 및 그룹과 독립적으로 생성 됨 |
역할 | AWS 서비스에 대한 임시 액세스 권한을 부여하는 메커니즘, 사용자가 역할을 부여받아 통상적으로 이용할 수 없는 서비스에 액세스할 수 있음(ex. 리눅스의 sudo 권한과 비슷) |
액세스 유형
1. 프로그래밍 방식 액세스
- 액세스 키 ID와 보안 액세스 키(키 페어)로 인증한다
- AWS CLI 및 AWS SDK 액세스를 제공
2. AWS Management Console 액세스
- 12자리 계정ID나 별칭, IAM 사용자 이름, IAM 암호로 인증
- 활성화하면 MFA(Multi-Factor Authentication)에 의해 인증 코드를 입력하라는 메시지가 표시됨
MFA : 사용자 이름과 암호에 추가로 고유한 인증코드를 제시하여 AWS 서비스에 액세스하는 것(ex. 2단계 인증과 비슷)
권한 부여
- IAM 정책을 생성하여 권한을 할당
- 기본적으로 모든 권한은 암시적으로 거부되고, 명시적으로 거부된 항목은 절대 허용되지 않는다. 그래서 권한은 허용되는 리소스와 작업을 결정한다
- IAM 사용자에게는 액세스 권한이 없다. 정책을 생성한 후 사용자에게 적절하게 연결하여 권한을 명시적으로 부여해야 한다.
- 최소 권한 원칙 : 특정 작업을 수행하는 데 필요한 최소한의 권한 집합을 적용한다는 원칙. 사용자의 요구 사항에 따라 사용자에게 필요한 최소한의 사용자 권한만 부여하도록 유도
즉, 사용자가 수행해야하는 작업에 대해 수행할 수 있도록 하는 권한만을 제공해야 한다
정책
- IAM 정책 : 권한을 정의하는 문서
- 자격 증명 기반 정책 : IAM 사용자, 역할, 그룹과 같은 보안 주체 또는 자격 증명에 연결할 수 있는 권한 정책
- 리소스 기반 정책 : 예를 들어 S3 버킷과 같은 리소스에 연결하는 정책
- JSON 형식
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "dynamodb:*",
"Resource": "arn:aws:dynamodb:us-east-2:123456789012:table/Books"
}
}
"Effect"는 "Allow"로 명시적 허용을, "Deny"로 명시적 거부를 정의할 수 있다.
"Resource": "arn:aws:dynamodb:us-east-2:123456789012:table/Books"
위 문장처럼 사용자에게 특정 DynamoDB 테이블에 대한 권한을 부여할 수 있다
"Effect": "Deny",
"Action": ["dynamodb:*", "s3:*"],
"NotResource": ["arn:aws:dynamodb:us-east-2:123456789012:table/Books",
"arn:aws:s3:::bucket-name",
"arn:aws:s3:::bucket-name/*"]
(들여쓰기가 좀 이상하지만 코드만 보자면) 위처럼 명시적 거부를 할 수 있는데, 명시적 거부는 사용자가 테이블과 해당 버킷을 제외하고 다른 AWS 작업 또는 리소스를 사용할 수 없게 한다
상충하는 경우, 명시적 거부문은 허용문보다 우선 적용된다.
리소스 기반 정책
- 자격 증명 기반 정책은 사용자 그룹 또는 역할에 연결됨
- 리소스 기반 정책은 s3 버킷과 같은 리소스에 연결됨
- 이러한 버킷 정책은 리소스에 액세스할 수 있는 사용자와 리소스에서 수행할 수 있는 작업을 지정
권한
IAM은 권한의 허용 여부를 결정할 때 먼저 명시적 거부 정책이 있는지 확인
-> 명시적 거부가 없는 경우, 명시적 허용 정책이 있는지 확인
--> 명시적 거부나 명시적 허용문이 없는 경우 IAM은 기본값(암시적 거부)으로 돌아감
그룹
IAM 그룹 : IAM 사용자의 모음
- 그룹은 여러 사용자에게 동일한 권한을 부여하는데 사용
- 한 사용자가 여러 그룹에 속할 수 있음
- 그룹은 중첩될 수 없음
- 기본 그룹 또는 기본 정책이라는 것은 없다
역할
IAM 역할 : 특정 권한이 있는 계정에 생성할 수 있는 IAM 자격 증명
- 역할은 권한 정책을 연결할 수 있는 AWS 자격 증명이라는 점에서 사용자와 비슷
- 해당 권한은 자격 증명을 사용하여 AWS에서 수행할 수 있는 작업과 수행할 수 없는 작업을 결정
- 역할은 필요한 모든 사람이 수임할 수 있도록 만들어짐
- 역할에는 암호 또는 액세스 키와 같은 표준 장기 자격 증명이 연결되지 않음
- 역할을 받은 사람에게 역할 세션에 대한 임시 보안 자격 증명이 발급된다