AWS

AWS IAM

2022. 7. 11. 16:34
728x90

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단계 인증과 비슷)

 

https://d1.awsstatic.com/howitworks_IAM_110321.8b2290727bb2022d54416e099c87ad9dc64be5d5.jpg

 

권한 부여

- 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에서 수행할 수 있는 작업과 수행할 수 없는 작업을 결정

- 역할은 필요한 모든 사람이 수임할 수 있도록 만들어짐

- 역할에는 암호 또는 액세스 키와 같은 표준 장기 자격 증명이 연결되지 않음

- 역할을 받은 사람에게 역할 세션에 대한 임시 보안 자격 증명이 발급된다

 

728x90