


IAM 역할 = 누군가가 ‘잠시’ 빌려 쓰는 권한 묶음
한 줄로:
자격증명(아이디/비밀번호) 없이
AWS 리소스가 AWS 리소스에 접근하게 해주는 방식
| 구분 | IAM 사용자 | IAM 역할 |
|---|---|---|
| 로그인 | O (ID/비번) | ❌ |
| 영구 자격증명 | 있음 | ❌ |
| 사용 주체 | 사람 | 사람/서비스 |
| 권한 사용 방식 | 항상 동일 | 임시로 Assume |
📌 역할은 “로그인 계정”이 아니라 “권한 상자”
👉 보안 최악
👉 보안 + 자동 + 관리 편함
"Service":"ec2.amazonaws.com"
→ EC2만 이 역할 사용 가능
"s3:GetObject"
→ S3 읽기 가능
Assume Role = “이 역할 좀 빌릴게요”
📌 이때 임시 보안 자격증명(STS) 이 발급됨
| 문제 문장 | 정답 힌트 |
|---|---|
| EC2가 S3에 접근 | IAM Role |
| 키를 저장하지 않고 접근 | IAM Role |
| 다른 AWS 계정 접근 | Assume Role |
| Lambda가 DynamoDB 접근 | Lambda Role |
IAM 역할 = 로그인 없이, 임시로, 안전하게 권한을 쓰는 방법


IAM 정책 = AWS에서 권한을 정의한 규칙 문서(JSON)
한 줄로:
“이 행동은 허용/거부한다”를 명확히 적어둔 약속
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-bucket/*"
}]
}
Allow 또는 Deny📌 예:
“이 사용자에게 S3 읽기 권한”
📌 예:
“이 버킷은 다른 계정에서도 접근 가능”
📌 예:
“이 OU에서는 EC2 Large 금지”
명시적 Deny > 모든 Allow
- Allow가 있어도
- Deny 하나면 무조건 거부
📌 암기:
Deny는 최종 보스
| 구분 | 관리형 정책 | 인라인 정책 |
|---|---|---|
| 재사용 | 가능 | ❌ |
| AWS 제공 | 있음 | ❌ |
| 관리 | 쉬움 | 번거로움 |
| 시험 추천 | ✅ | ❌ |
📌 SAA에서는 “관리형 정책”이 거의 정답
| 문제 표현 | 정답 힌트 |
|---|---|
| 여러 사용자에게 동일 권한 | 그룹 + 관리형 정책 |
| EC2가 S3 접근 | IAM 역할 + 정책 |
| 다른 계정 접근 허용 | 리소스 기반 정책 |
| 특정 리전만 허용 | Condition |
IAM 정책 = AWS에서 “누가 무엇을 할 수 있는지” 적은 규칙
📌 정책 = 내용, 역할 = 담는 그릇
| 구분 | IAM 정책 (Policy) | IAM 역할 (Role) |
|---|---|---|
| 정체 | 권한 규칙 문서 | 권한을 담는 객체 |
| 역할 | 행동 허용/거부 정의 | 권한을 누가 쓸 수 있는지 정의 |
| 단독 사용 | ❌ | ❌ (정책 필요) |
| 붙는 대상 | 사용자 / 그룹 / 역할 | 사용자 / AWS 서비스 |
| 로그인 가능 | ❌ | ❌ |
| 핵심 키워드 | Allow / Deny | Assume Role |
정책은 JSON 문서.
{"Effect":"Allow","Action":"s3:GetObject","Resource":"*"}
👉 의미:
“S3 객체 읽기 허용”
📌 하지만 이 정책만으로는 아무도 못 씀
→ 누군가(사용자/역할)에 붙여야 함
역할은 이렇게 말할 수 있다:
“이 역할을 쓰는 애는, 이 정책들을 쓸 수 있다”
📌 Access Key 없음, 하드코딩 없음 → 보안 최고
[정책] ──(붙는다)──▶[역할] ──(Assume)──▶[EC2 / Lambda / 사용자]
→ 정책 (Policy)
→ 역할 (Role) + 정책
→ 역할 (Assume Role) + 정책
정책은 ‘권한 내용’이고,
역할은 ‘그 권한을 쓰게 해주는 방식’이다