AWS IAM 완전 정복
IAM은 CLF-C02 시험에서 거의 매번 등장하는 핵심 서비스입니다. 이 글에서는 IAM의 구성 요소, 권한 구조, 보안 도구를 체계적으로 정리합니다.
---
IAM이란?
IAM(Identity and Access Management)은 AWS 리소스에 대한 접근을 안전하게 제어하는 서비스입니다. 쉽게 말해 "누가 AWS에서 무엇을 할 수 있는지"를 결정하는 역할을 합니다.
IAM이 관리하는 주요 개념은 다음 세 가지입니다.
Users(사용자): AWS와 상호작용하는 개별 계정 Groups(그룹): 공통 권한을 가진 사용자 묶음 Roles(역할): AWS 서비스나 애플리케이션에 부여하는 임시 권한
IAM은 추가 비용 없이 사용할 수 있는 글로벌 서비스입니다. 리전을 별도로 선택할 필요가 없습니다.
---
사용자와 그룹
| 구분 | 설명 | |------|------| | IAM User | 개별 사람이나 서비스를 위한 고유 자격증명 (아이디/비밀번호, 액세스 키) | | IAM Group | 여러 사용자에게 동일한 권한을 쉽게 적용하는 논리적 묶음 |
사용자와 그룹의 관계에서 기억해야 할 규칙이 있습니다. 사용자는 그룹에 속하지 않아도 되며, 동시에 여러 그룹에 속할 수 있습니다. 반면 그룹 안에 다른 그룹을 포함시키는 것은 허용되지 않습니다.
---
권한과 정책
권한은 JSON 형식의 정책 문서로 정의됩니다. 정책에는 허용(Allow) 또는 거부(Deny)할 액션을 명시합니다.
정책 구조
| 요소 | 설명 | |------|------| | Version | 정책 언어 버전 (항상 2012-10-17 사용) | | Effect | Allow 또는 Deny | | Action | 허용/거부할 AWS 서비스 액션 | | Resource | 대상 AWS 리소스 (ARN) |
정책을 설계할 때는 최소 권한 원칙(Principle of Least Privilege)을 따르는 것이 중요합니다. 업무에 필요한 최소한의 권한만 부여하면 보안 위험을 크게 줄일 수 있습니다.
정책 유형
| 유형 | 설명 | |------|------| | AWS 관리형 정책 | AWS가 미리 만들어 제공하는 재사용 가능한 정책 | | 고객 관리형 정책 | 고객이 직접 만들고 관리하는 정책 | | 인라인 정책 | 특정 사용자/그룹/역할에만 1:1로 직접 연결된 정책 |
---
IAM 역할
IAM 역할은 AWS 서비스가 다른 서비스에 접근할 때 사용합니다. 코드에 자격증명을 직접 입력하지 않아도 되기 때문에 훨씬 안전한 방식입니다.
대표적인 사용 사례는 다음과 같습니다.
EC2 인스턴스가 S3 버킷에 접근해야 할 때 Lambda 함수가 DynamoDB를 읽거나 쓸 때
애플리케이션에는 IAM User 대신 IAM Role을 사용하는 것이 권장됩니다. 장기 자격증명이 코드에 남지 않으므로 유출 위험이 없습니다.
---
MFA(다단계 인증)
MFA는 비밀번호에 추가 인증 수단을 결합하는 이중 보안 방식입니다. 비밀번호가 유출되더라도 MFA가 활성화되어 있으면 계정을 보호할 수 있습니다.
AWS에서 지원하는 MFA 장치
| 유형 | 설명 | |------|------| | Virtual MFA | Google Authenticator, Authy 등 스마트폰 앱 (TOTP) | | Hardware MFA | 물리적 토큰 장치 (Gemalto 등) | | U2F Security Key | USB 기반 보안 키 |
루트 계정과 관리자 권한이 있는 IAM 사용자에게는 반드시 MFA를 활성화해야 합니다.
---
비밀번호 정책
AWS IAM에서는 다음과 같은 비밀번호 규칙을 설정할 수 있습니다.
최소 길이 지정 대문자/소문자/숫자/특수문자 필수 포함 비밀번호 재사용 방지 만료 기간 설정 (예: 90일)
---
AWS 접근 방법 세 가지
| 방법 | 설명 | |------|------| | AWS Management Console | 웹 브라우저 기반 GUI | | AWS CLI | 터미널에서 명령어로 AWS 서비스 제어 | | AWS SDK | Python, JavaScript 등 프로그래밍 언어로 AWS 제어 |
CLI 예시
SDK 예시 (Python boto3)
CLI와 SDK를 사용할 때는 액세스 키(Access Key ID + Secret Access Key)가 필요합니다. 이 키는 절대 공유하거나 코드에 직접 입력하지 마세요.
---
IAM 보안 도구
| 도구 | 용도 | |------|------| | IAM Credential Report | 계정 내 모든 IAM 사용자의 자격증명 현황 (감사용) | | IAM Access Advisor | 사용자가 마지막으로 서비스를 사용한 시점 확인 → 불필요한 권한 제거 | | IAM Policy Simulator | 정책 적용 전 테스트 및 검증 |
Credential Report는 정기적인 감사에 활용하고, Access Advisor는 실제로 사용되지 않는 권한을 찾아 최소 권한 원칙을 유지하는 데 도움이 됩니다.
---
공동 책임 모델
| AWS 책임 | 고객 책임 | |----------|----------| | IAM 서비스 인프라 보호 | IAM 사용자/그룹/역할 관리 | | 서비스 가용성 보장 | 강력한 비밀번호 정책 및 MFA 설정 | | AWS 관리형 정책 제공 | 최소 권한 원칙 적용 및 정기 감사 |
---
IAM 모범 사례
루트 계정 사용을 최소화하고, 일상 작업에는 IAM 사용자를 활용합니다 최소 권한 원칙을 일관되게 적용합니다 루트 계정 및 관리자 계정에 MFA를 활성화합니다 애플리케이션에는 IAM Role을 사용하고 액세스 키를 코드에 직접 입력하지 않습니다 액세스 키를 정기적으로 교체합니다 Credential Report와 Access Advisor로 주기적으로 권한을 감사합니다
---
시험 핵심 키워드 정리
IAM은 글로벌 서비스 — 리전 선택 불필요 정책은 JSON 문서 — Effect, Action, Resource가 핵심 요소 그룹 안에 그룹 중첩 불가 MFA는 비밀번호 도난 시 마지막 방어선 IAM Role은 서비스에 권한을 부여하는 안전한 방법 Credential Report는 감사 도구, Access Advisor는 불필요한 권한을 찾는 도구