Post

[Cloud] AWS IAM의 이해

πŸ“Œ λ“€μ–΄κ°€λ©°

이번 κΈ€μ—μ„œλŠ” AWS의 IAM(Identity and Access Management)을 μ •λ¦¬ν•œλ‹€. λˆ„κ°€(μ‚¬μš©μž) AWS λ¦¬μ†ŒμŠ€μ— 무엇을(κΆŒν•œ) ν•  수 μžˆλŠ”μ§€λ₯Ό κ΄€λ¦¬ν•˜λŠ” μ„œλΉ„μŠ€λ‘œ, μ‚¬μš©μžΒ·κ·Έλ£ΉΒ·μ •μ±…Β·μ—­ν• μ˜ 관계와 μ‹€μŠ΅(Lab)κΉŒμ§€ 닀룬닀.

IAMμ΄λž€? AWS λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ μ•‘μ„ΈμŠ€λ₯Ό μ•ˆμ „ν•˜κ²Œ μ œμ–΄ν•˜λŠ” μ›Ή μ„œλΉ„μŠ€. 인증(둜그인)κ³Ό κΆŒν•œ λΆ€μ—¬(무엇을 ν•  수 μžˆλŠ”κ°€)λ₯Ό κ΄€λ¦¬ν•˜λ©°, AWS 계정에 무료둜 μ œκ³΅λœλ‹€.

IAM κ°œλ…


1. μ™œ IAM이 ν•„μš”ν•œκ°€ β€” root 곡유의 μœ„ν—˜

λͺ¨λ“  λ‹΄λ‹Ήμžκ°€ root 계정을 κ³΅μœ ν•˜λ©΄ μ‹¬κ°ν•œ λ¬Έμ œκ°€ 생긴닀.

역할별 λ‹΄λ‹Ήμž

⚠️ root 계정 곡유의 μœ„ν—˜

  • κ°œλ°œμžκ°€ μ‹€μˆ˜λ‘œ 운영 ν”Œλž«νΌμ„ μ‚­μ œν•  수 μžˆλ‹€.
  • QAκ°€ 운영 μž₯비에 ν…ŒμŠ€νŠΈν•΄ μ„œλΉ„μŠ€κ°€ 쀑단될 수 μžˆλ‹€.
  • 문제 λ°œμƒ μ‹œ λˆ„κ°€ 무엇을 ν–ˆλŠ”μ§€ 좔적 λΆˆκ°€ β†’ μ±…μž„ μ†Œμž¬ 뢈λͺ….

κ·Έλž˜μ„œ 역할에 λ§žλŠ” κ°œλ³„ IAM μ‚¬μš©μžλ₯Ό λ§Œλ“€κ³ , ν•„μš”ν•œ κΆŒν•œλ§Œ λΆ€μ—¬ν•œλ‹€.


2. IAM 4λŒ€ ꡬ성 μš”μ†Œ

IAM은 μ •μ±…(κΆŒν•œ)을 κ·Έλ£Ή/μ‚¬μš©μž/역할에 μ—°κ²°ν•˜λŠ” ꡬ쑰닀.

flowchart TD
    Policy["πŸ“œ μ •μ±…(Policy)<br/>κΆŒν•œ μ •μ˜(JSON)"]
    Group["πŸ‘₯ μ‚¬μš©μž κ·Έλ£Ή"]
    User["πŸ‘€ μ‚¬μš©μž"]
    Role["🎭 μ—­ν• (Role)"]
    Policy --> Group --> User
    Policy --> Role
    Role -. μœ„μž„ .-> Service["βš™οΈ AWS μ„œλΉ„μŠ€(EC2 λ“±)"]
ꡬ성 μš”μ†Œμ„€λͺ…
μ‚¬μš©μž κ·Έλ£Ήμ‚¬μš©μžλ“€μ˜ μ§‘ν•©(κΆŒν•œμ„ ν•œ λ²ˆμ— 관리). ν•œ μ‚¬μš©μžλŠ” μ—¬λŸ¬ κ·Έλ£Ή μ†Œμ† κ°€λŠ₯, 그룹은 그룹을 포함 λͺ» 함
μ‚¬μš©μžμ„œλΉ„μŠ€ 접속 κΆŒν•œμ„ κ°€μ§„ κ°œλ³„ 자격 증λͺ…(독립/κ·Έλ£Ή 쒅속)
μ •μ±…(Policy)μ„œλΉ„μŠ€λ₯Ό μ–΄λ–»κ²Œ μ‘°μž‘ν• μ§€ ν—ˆκ°€/κΈˆμ§€ν•˜λŠ” JSON μ •μ˜(예: AmazonVPCFullAccess)
μ—­ν• (Role)νŠΉμ • κΆŒν•œμ΄ μžˆλŠ” 자격 증λͺ…을 μž„μ‹œλ‘œ μœ„μž„(μ„œλΉ„μŠ€Β·λ‹€λ₯Έ 계정이 μˆ˜μž„)

πŸ’‘ κΆŒν•œ κ²°μ • 원칙 β€” 기본은 μ•”μ‹œμ  κ±°λΆ€(Deny). λͺ…μ‹œμ μœΌλ‘œ ν—ˆμš©(Allow)ν•˜μ§€ μ•Šμ€ λͺ¨λ“  κΆŒν•œμ€ κ±°λΆ€λœλ‹€. 그리고 λͺ…μ‹œμ  κ±°λΆ€λŠ” μ–΄λ–€ ν—ˆμš©λ³΄λ‹€ μš°μ„ ν•œλ‹€. 항상 μ΅œμ†Œ κΆŒν•œ 원칙(least privilege)을 λ”°λ₯΄λŠ” 것이 λͺ¨λ²” 사둀닀.

κΆŒν•œ κ²°μ •


3. μ—­ν• (Role)의 λŒ€ν‘œ μ‚¬μš© 예

μ‹œλ‚˜λ¦¬μ˜€ EC2μ—μ„œ μ‹€ν–‰λ˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ S3 버킷 μ ‘κ·Ό κΆŒν•œμ΄ ν•„μš”ν•˜λ‹€.

μ•‘μ„ΈμŠ€ ν‚€λ₯Ό μ½”λ“œμ— λ°•λŠ” λŒ€μ‹  역할을 μˆ˜μž„μ‹œν‚€λŠ” 것이 μ•ˆμ „ν•˜λ‹€.

1
2
3
4
β‘  S3 μ ‘κ·Ό κΆŒν•œμ„ λΆ€μ—¬ν•˜λŠ” IAM μ •μ±… μ •μ˜
β‘‘ 정책을 μ—­ν• (Role)에 μ—°κ²°
β‘’ EC2 μΈμŠ€ν„΄μŠ€κ°€ 이 역할을 μˆ˜μž„(assume) ν•˜λ„λ‘ ν—ˆμš©
   β†’ EC2 앱이 ν‚€ 없이 S3 μ ‘κ·Ό

EC2 β†’ S3 μ—­ν•  μœ„μž„

좜처: 원본 링크


4. Lab β€” μ‚¬μš©μžΒ·κ·Έλ£ΉΒ·κΆŒν•œΒ·μ—­ν•  μ‹€μŠ΅

μ‚¬μš©μž(user1, user2)λ₯Ό λ§Œλ“€μ–΄ 그룹에 μ†Œμ†μ‹œν‚€κ³  κΆŒν•œμ„ κ²€μ¦ν•œλ‹€.

IAM μ½˜μ†”

Taskλ‚΄μš©
Task1μ‚¬μš©μž 생성(μ½˜μ†” μ•‘μ„ΈμŠ€Β·νŒ¨μŠ€μ›Œλ“œ) + κ·Έλ£Ή(Data-Support, Cloud-Admin) 생성. Cloud-Admin에 EC2 Describe*Β·StartInstances*Β·StopInstances* μ»€μŠ€ν…€ μ •μ±…(cloud-admin-policy) λΆ€μ—¬
Task2ν…ŒμŠ€νŠΈ λ¦¬μ†ŒμŠ€ 생성(S3 버킷, EC2 μΈμŠ€ν„΄μŠ€)
Task3Eli 둜그인 β†’ S3 읽기/μ“°κΈ°, EC2 생성 κ°€λŠ₯ μ—¬λΆ€ 확인
Task4David β†’ 읽기 μ „μš© EC2 접속 μ—¬λΆ€ 확인
Task5Noah β†’ EC2 start/stop κ°€λŠ₯ μ—¬λΆ€ 확인

μ‚¬μš©μž κ·Έλ£Ή

μ‚¬μš©μž

πŸ’‘ 이 μ‹€μŠ΅μ˜ 핡심은 μ‚¬μš©μžλ§ˆλ‹€ λ‹€λ₯Έ 정책이 μ‹€μ œ λ™μž‘μ— μ–΄λ–»κ²Œ λ°˜μ˜λ˜λŠ”μ§€ ν™•μΈν•˜λŠ” 것이닀. DavidλŠ” 읽기만, NoahλŠ” start/stop만 λ˜λŠ” μ‹μœΌλ‘œ, κΆŒν•œμ— 따라 ν•  수 μžˆλŠ” μž‘μ—…μ΄ μ •ν™•νžˆ κ°ˆλ¦°λ‹€. μ‹€μŠ΅ ν›„μ—λŠ” S3Β·EC2 λ¦¬μ†ŒμŠ€λ₯Ό μ‚­μ œν•΄ κ³ΌκΈˆμ„ λ§‰λŠ”λ‹€.


πŸ“ 정리

1
2
3
4
5
IAM
β”œβ”€ ν•„μš”μ„±  root 곡유 μœ„ν—˜(μ‚­μ œ 사고·좔적 λΆˆκ°€) β†’ κ°œλ³„ μ‚¬μš©μž
β”œβ”€ ꡬ성    κ·Έλ£Ή / μ‚¬μš©μž / μ •μ±…(JSON) / μ—­ν• (μœ„μž„)
β”œβ”€ 원칙    κΈ°λ³Έ μ•”μ‹œμ  κ±°λΆ€ + μ΅œμ†Œ κΆŒν•œ
└─ μ—­ν•     EC2κ°€ μ—­ν•  μˆ˜μž„ β†’ ν‚€ 없이 S3 μ ‘κ·Ό
κ°œλ…ν•œ 쀄 μ •μ˜
μ •μ±…(Policy)κΆŒν•œμ„ μ •μ˜ν•˜λŠ” JSON
κ·Έλ£ΉκΆŒν•œμ„ μƒμ†μ‹œν‚€λŠ” μ‚¬μš©μž 묢음
μ—­ν• (Role)μž„μ‹œλ‘œ μœ„μž„λ˜λŠ” κΆŒν•œ

IAM의 핡심은 rootλ₯Ό λ‚˜λˆ  κ°œλ³„ μ‚¬μš©μžμ—κ²Œ μ΅œμ†Œ κΆŒν•œλ§Œ λΆ€μ—¬ν•˜κ³ , μ„œλΉ„μŠ€ κ°„ 접근은 ν‚€ λŒ€μ‹  μ—­ν•  μœ„μž„μœΌλ‘œ μ²˜λ¦¬ν•˜λŠ” 것이닀. 이 ꡬ쑰가 감사(좔적)와 λ³΄μ•ˆμ˜ 기본을 λ§Œλ“ λ‹€.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.