AWS IAM : 개념과 안전하게 사용하는 방법

웹서버 코드를 작성할때 인증 인가를 구현하듯,
AWS에서도 사용자의 권한 인가를 위해서 IAM 이라는 서비스를 사용한다.
IAM이란
Identify and Access Management 의 약자인 IAM은
AWS의 리소스에 대한 접근을 안전하게 제어할 수 있는 서비스이다.
IAM을 사용하여 사용자,역할,그룹을 생성하고 관리하며 리소스에 대한 접근을 제어
할 수 있다.
또한 IAM은 글로벌 서비스
로, 리전에 상관없이 작동한다.
글로벌 서비스가 뭔지 모르겠다면? 개념 확인해보기
IAM의 구성 요소
- 사용자(User) : AWS와 상호작용하는 개인 또는 서비스 (일반적으로 조직의 한 사람과 매칭됨)
-
- 일반적으로 개인(사람) 사용자는 AWS 콘솔 접속 권한을 부여하고, 애플리케이션(서비스) 사용자는 AWS 콘솔 권한 없이 API를 통해 리소스에만 접근한다
-
- 사용자는 영구 자격 증명의 일종이다
영구 자격 증명이란?
명시적으로 취소하기 전까지 계속 유효한 장기 보안 인증
으로, 주로 액세스 키와 비밀 키로 구성된다.

- 그룹(Group) : 여러 사용자에게 공통 권한을 할당하기 위한 집합
-
- 다수의 사용자에게 일관된 권한 정책을 사용 가능하며, 한 사용자는 여러 그룹에 속할 수 있다

- 역할(Role) : 특정 권한을 가진 IAM 자격 증명으로, AWS 서비스나 외부 사용자가 일시적으로 사용
-
- 역할을 부여하면 1~12시간 이내로 임시 자격 증명을 부여한다
임시 자격 증명이란?
특정 기간(15분~12시간) 동안만 유효한 단기 보안 토큰
으로, 만료 후 재발급을 해야 다시 접근할 수 있다.

- 정책(Policy) : 사용자 , 그룹 , 역할의 권한을 정의하는 JSON 문서
-
- 사용자, 그룹, 역할이 어떤 AWS 리소스에 어떤 작업을 수행할 수 있는지 정의하는 JSON 형식의 권한 문서입니다.

- 자격 증명 공급자(Identy Provider) : 외부 자격 증명 시스템
-
- AWS 외부의 인증 시스템(회사 디렉토리, 소셜 로그인 등)을 통해 사용자를 인증하고 AWS 접근을 관리하는 메커니즘
IAM 정책(Policy)
IAM의 정책은 JSON 형식으로 작성된 문서를 사용하며 , AWS의 리소스에 대한 권한을 정의한다.
정책(JSON)의 기본 구조

- Version : 정책 언어 버전, 항상 "2012-10-17" 사용 권장
- Statement : 정책 내용을 포함하는 배열
- Sid (필수 X) : Statement ID, 정책 설명 문자열
- Effect : 명시된 리소스를 허용/거부 할지 여부. "Allow" 또는 "Deny"
- Action : 허용/거부되는 API 작업 목록
- Resource : 적용되는 AWS 리소스의 ARN(Amazon Resource Name)
- Condition (필수 X) : 정책이 적용되는 조건
정책의 종류
위에 있는 JSON 정책 문서의 종류에도 여러가지가 있다.
- 자격 증명 기반 정책: 사용자, 그룹, 역할에 직접 연결
- AWS 관리형: AWS가 미리 만들어 제공하는 정책 (예: AmazonS3ReadOnlyAccess)
-
- AWS가 만들고 관리하므로 사용자는 수정할 수 없으며, 서비스 업데이트에 따라
자동으로 정책이 업데이트됨
- AWS가 만들고 관리하므로 사용자는 수정할 수 없으며, 서비스 업데이트에 따라
- 고객 관리형: 사용자가 직접 생성 관리하는 정책
-
- 특정 사용 사례에 맞춤화할 수 있으며,
여러 IAM 엔티티에 연결하여 재사용
가능
- 특정 사용 사례에 맞춤화할 수 있으며,
- 인라인: 특정 사용자/그룹/역할에만 포함되는 정책
-
해당 엔티티에만 직접 포함
되어 있어 다른 곳에서 재사용할 수 없으며, 엔티티 삭제 시 함께 삭제됨
- 리소스 기반 정책: S3 버킷, Lambda 함수 등 리소스에 직접 연결되는 정책
-
- 리소스 자체에 연결되어
누가 해당 리소스에 접근할 수 있는지 정의
한다. 이는크로스 계정 접근 제어에 유용
하다
- 리소스 자체에 연결되어
크로스 계정 접근 제어란?
여러 AWS 계정 사이에서
내 계정의 리소스를 다른 계정이 사용할 수 있게
안전하게 허용하는 방법이다
예시 : A계정의 S3 버킷을 B계정에서도 읽을 수 있게 허용
- 권한 경계 - 사용자/역할이 가질 수 있는 최대 권한 제한을 정의한 정책
-
- 한 사용자가 가질수 있는
최대 권한의 한도
를 설정하여 더욱 보안을 높일 수 있다
- 한 사용자가 가질수 있는
- 서비스 제어 정책(SCP) - AWS Organizations에서 조직 전체 계정 권한을 제어하는 정책
-
- 조직 내 모든 계정에 적용되며, 루트 사용자도 SCP정책에서 허용하지 않은 리소스는 사용할 수 없다
IAM 안전하게 관리하기
비밀번호 정책 설정하기
- 최소 비밀번호 길이
- 최소 비밀번호 요구사항 설정
- 비밀번호 만료시간 설정
- 이전에 사용한 비밀번호 사용 제한
IAM MFA 적용하기
MFA란? Multi Factor Autication의 줄임말!
설정한 비밀번호 + 소유한 보안 장비
를 통해 인증하기 때문에 비밀번호가 도난 당하여도 해커가 소유한 보안 장치까지 확보해야 계정에 접근할 수 있으므로 계정의 보안을 향상시킬 수 있다!
MFA를 사용하여 계정을 보호할 수 있다.
AWS에서 사용 가능한 MFA 디바이스는 크게 3가지 종류로 나눌 수 있다
- 가상 MFA 디바이스: 스마트폰에 Google Authenticator, Authy 같은
인증 앱을 설치
하여 시간 기반 일회용 암호(TOTP)를 생성하여 인증 - Universal 2nd Factor (U2F) 보안 키: YubiKey와 같은
물리적 USB 장치
로, 컴퓨터에 연결하고 버튼을 눌러 인증 - 하드웨어 MFA 디바이스(Key Fob): 작은 물리적인 장치로,
디스플레이에 표시되는 일회용 코드를 입력
하여 인증
최소 권한의 원칙 적용하기
AWS의 IAM은 "최소 권한의 원칙(Principle of Least Privillege)" 을 따르는 것이 베스트 케이스이다.
최소 권한의 원칙에 따라 각 IAM사용자에게 작업에 필요한 최소한의 권한만을 부여하는 것이다
루트 계정을 사용하지 않기
AWS 계정을 처음 만든다면 IAM 사용자 없이 루트 계정만이 만들어진다.
이 루트 계정은 AWS의 모든 액세스 권한을 가지고 있기에 일반적인 작업에 사용하지 않는 것이 좋다. 공식 문서
권한 경계 사용하기
권한 경계(Permissions Boundary)는 IAM 사용자 또는 역할이 가질 수 있는 최대 권한을 설정
하는 기능이다.
권한 경계를 설정하면 사용자가 자신에게 추가할 수 있는 권한의 상한선이 정해진다.