Cert Notes/ 출퇴근 학습 노트
로드맵
KOEN
CLF-C02 · FoundationalCloud Practitioner - Foundational
DVA-C02 · AssociateDeveloper - Associate
SAA-C03 · AssociateSolutions Architect - Associate
SOA-C02 · AssociateCloudOps Engineer - Associate
SAP-C02 · ProfessionalSolutions Architect - Professional
  • Week 1
    • 1.SAP 시험이라는 게임: 시나리오를 분해하는 손기술
    • 2.IAM·STS·Federation: 권한이라는 단어를 여섯 층으로 쪼개기
    • 3.VPC의 해부학: 라우팅 테이블이 진짜로 결정하는 것
    • 4.컴퓨팅 4종의 깊이: Nitro, EBS, ELB, Auto Scaling을 Pro 시야로 다시 보기
    • 5.1주차 통합: IAM·VPC·EC2가 한 시나리오에서 만날 때
  • Week 2
    • 1.AWS Organizations: 멀티 계정이라는 새로운 사고 단위
    • 2.Service Control Policy: 천장(Ceiling)이라는 사고 도구
    • 3.Control Tower와 Landing Zone: 거버넌스의 자동화
    • 4.IAM Identity Center, Permission Set, 통합 결제: 멀티 계정 SSO의 표준
    • 5.2주차 통합: Organizations·SCP·CT·IDC가 한 시나리오에서 만날 때
  • Week 3
    • 1.VPC Peering vs Transit Gateway: 네트워크 토폴로지의 선택
    • 2.Direct Connect 아키텍처와 이중화: 전용선의 물리학
    • 3.Site-to-Site VPN과 Client VPN: IPsec 터널의 모든 것
    • 4.PrivateLink와 VPC Endpoint: 서비스 추상화 네트워킹
    • 5.Week 3 복습: 고급 네트워킹 아키텍처 종합
  • Week 4
    • 1.AWS Outposts, Local Zones, Wavelength: 클라우드 경계의 확장
    • 2.Storage Gateway 4종 비교: 온프레미스 스토리지를 클라우드로 확장하는 방법
    • 3.Snow Family와 대규모 데이터 전송: 물리학이 인터넷을 이기는 순간
    • 4.EKS Anywhere, ECS Anywhere, 하이브리드 컨테이너: 오케스트레이션의 경계 확장
    • 5.Week 4 복습: 하이브리드 클라우드 아키텍처 종합
  • Week 5
    • 1.Multi-Region 아키텍처: 왜 글로벌 분산은 어려운가
    • 2.Route 53 라우팅 정책 7종: DNS가 아키텍처를 결정한다
    • 3.CloudFront 심화: CDN이 단순 캐시가 아닌 이유
    • 4.Route 53 심화: Health Check 알고리즘, DNSSEC, Geoproximity 수학, Resolver 하이브리드 DNS
    • 5.Week 5 복습: 글로벌 아키텍처 통합 시나리오
  • Week 6
    • 1.7R 마이그레이션 전략: 클라우드 이전의 의사결정 언어
    • 2.AWS MGN 심화: 블록 레벨 복제의 물리학, DRS 비교, Migration Hub Orchestrator
    • 3.AWS DMS + SCT: 데이터베이스 마이그레이션의 과학
    • 4.마이그레이션 가속 도구: App2Container, MAP, Migration Hub
    • 5.Week 6 복습: 마이그레이션 전략 통합 시나리오
  • Week 7
    • 1.컨테이너 오케스트레이션의 분기점: ECS, EKS, Fargate 선택의 진짜 기준
    • 2.EKS의 내부 해부 — 노드 그룹, IRSA, Karpenter가 만드는 운영 표준
    • 3.Fargate의 단가 해부 — 서버리스 컨테이너의 진짜 가격표
    • 4.서비스 메시의 해부 — App Mesh, Service Connect, Cloud Map이 갈리는 지점
    • 5.Week 7 종합 — 컨테이너 시나리오 12문항으로 굳히기
  • Week 8
    • 1.Lambda 고급: 동시성, 콜드 스타트, SnapStart의 내부 동작
    • 2.Step Functions: 분산 워크플로우의 상태 모델과 Saga 패턴
    • 3.EventBridge: Event Bus, Pipes, Scheduler의 통합 모델
    • 4.AppSync GraphQL과 SQS/SNS/Kinesis 메시징의 본질
    • 5.Week 8 종합 — 서버리스·이벤트 아키텍처 시나리오 12선
  • Week 9
    • 1.데이터 레이크 아키텍처: S3, Glue, Athena의 내부 동작과 비용 모델
    • 2.Redshift 심화: MPP 내부 동작, RA3 스토리지 분리, Spectrum과 Zero-ETL
    • 3.EMR, Glue, MWAA: 분산 처리 엔진의 내부와 빅데이터 오케스트레이션
    • 4.Lake Formation, 데이터 거버넌스, MSK: 세분화 권한과 실시간 스트림의 내부
    • 5.Week 9 종합 복습: 데이터 아키텍처를 하나의 그림으로
  • Week 10
    • 1.SageMaker 심화: ML 라이프사이클, 추론 엔드포인트 4종, 학습 비용 수학
    • 2.Bedrock 심화: 생성형 AI 아키텍처, RAG 내부 동작, 벡터 검색의 수학
    • 3.Managed AI 서비스 심화: 사전 학습형 AI의 선택 논리와 동기·비동기 패턴
    • 4.MLOps 심화: 드리프트의 과학, Feature Store, 재학습 자동화 파이프라인
    • 5.Week 10 종합 복습: ML/AI 아키텍처 의사결정 + 시나리오 12문항
  • Week 11
    • 1.KMS 심화: 봉투 암호화의 수학, Key Policy의 권한 모델, 멀티 리전 키
    • 2.탐지 3총사: Macie·GuardDuty·Inspector의 내부 동작과 경계
    • 3.통합 관제: Security Hub·Detective·Audit Manager의 역할 분담
    • 4.엣지 보안: WAF·Shield·Firewall Manager와 DDoS 방어의 계층
    • 5.보안 종합: 암호화·탐지·통합 관제·엣지 방어를 한 시나리오로
  • Week 12
    • 1.Savings Plans·RI 전략 — 약정 할인의 수학, 적용 순서의 내부 동작, Organization 공유
    • 2.Compute Optimizer·Rightsizing — ML 기반 권고의 내부 동작, 도구 비교, 자동화 패턴
    • 3.Cost Explorer·Budgets·CUR — 비용 가시성의 계층, 예산 자동 통제, FinOps 데이터 파이프라인
    • 4.숨은 비용의 해부학 — S3 스토리지 계층, 데이터 전송 요금 구조, NAT Gateway의 함정
    • 5.비용 최적화 종합 복습: 약정·Spot의 수학과 숨은 비용의 trade-off
  • Week 13
    • 1.Well-Architected Framework 개요 — 6 기둥의 기원, WA Tool의 내부 동작, Lens의 설계 철학
    • 2.운영 우수성·보안 기둥 심화 — GitOps의 뿌리, 책임 공유 모델의 경계, 추적성 3종의 내부 차이
    • 3.안정성·성능 효율성 기둥 심화 — CAP 정리, 멱등성과 재시도의 수학, HPC 네트워킹의 물리
    • 4.비용·지속 가능성 기둥 심화 — 단위 경제학, 탄소 회계의 규제 뿌리, 두 기둥의 trade-off
    • 5.Well-Architected 종합 복습: 6 기둥을 한 시나리오로 풀어내기
  • Week 14
    • 1.DR 4가지 전략과 RTO/RPO 매핑 — 재해 복구의 역사, 동기·비동기 복제의 물리학, 클라우드 DR의 경제학
    • 2.백업: AWS Backup·Cross-Region Copy — WORM의 법적 기원, Vault Lock의 불가역성, 멀티 계정 백업 거버넌스
    • 3.Resilience Hub·Fault Injection Simulator — 카오스 엔지니어링의 탄생, Stop Condition의 안전 공학, DR 검증 자동화
    • 4.RDS·Aurora·DynamoDB Global의 DR — 동기·비동기 복제의 내부, Aurora 스토리지 아키텍처, Active-Active의 충돌 해결
    • 5.복원력·DR 종합 복습: RTO/RPO를 지키는 4가지 전략과 검증 도구
  • Week 15
    • 1.대기업 글로벌 ERP 마이그레이션 — 멀티 계정 거버넌스의 역사, 7R 마이그레이션의 해부학, 데이터 주권의 법적·기술적 뿌리
    • 2.스타트업 빠른 성장·비용 최적화 — 서버리스의 경제학, 100배 확장의 물리학, Savings Plans 수학
    • 3.금융: 규제·감사·격리·DR — PCI DSS의 역사, HSM과 키 계층의 암호학, 격리 아키텍처의 심층 방어
    • 4.미디어: 글로벌 스트리밍·CDN·실시간 — 스트리밍 프로토콜의 진화, CDN 캐싱의 물리학, DRM의 암호 체계
    • 5.정부·헬스케어 컴플라이언스 종합 — HIPAA의 법적 구조, FedRAMP·GovCloud의 격리, Week 15 케이스 통합
  • Week 16
    • 1.도메인 1 종합: 복잡한 조직 설계 (29%) — 멀티 계정 거버넌스의 역사, 라우팅 이론, 하이브리드 암호화, 격리 경계의 CS 원리
    • 2.도메인 2 종합: 신규 솔루션 설계 (29%) — 컴퓨트 진화사, 데이터 일관성의 CS 이론, 이벤트 아키텍처의 내부 동작
    • 3.도메인 3 종합: 마이그레이션·현대화 (20%) — 7R의 역사, 블록 복제·CDC의 내부 동작, 대역폭 수학, Strangler Fig 패턴
    • 4.도메인 4 종합: 지속적 개선 (25%) — SRE의 역사, SLI/SLO 수학, 관측성 3기둥, 카오스 엔지니어링의 뿌리
    • 5.최종 종합: 시험 채점 메커니즘, 출제 심리, 키워드 디코딩, 시나리오 모의고사 12문항 + D-Day 전략
DOP-C02 · ProfessionalDevOps Engineer - Professional
SCS-C03 · SpecialtySecurity - Specialty
MLA-C01 · AssociateMachine Learning Engineer - Associate
AIF-C01 · FoundationalAI Practitioner - Foundational
DEA-C01 · AssociateData Engineer - Associate
MLS-C01 · SpecialtyMachine Learning - Specialty
합격 후기
← SAP-C02/Week 1/Day 2
SAP-C02· ProWeek 1 · Day 2읽기 약 19분

Day 2 - IAM·STS·Federation: 권한이라는 단어를 여섯 층으로 쪼개기

SAA에서 IAM은 "User, Group, Role, Policy"라는 네 단어로 정리할 수 있었다. Pro에서는 이게 안 통한다. 한 시나리오에 IAM User 정책, IAM Role 정책, Resource-based 정책, Permission Boundary, SCP, Session 정책이 동시에 등장하고 — "이 사용자가 이 액션을 호출할 수 있는가"를 묻는 문제가 자주 나온다. 답을 맞히려면 권한 평가의 6단계 우선순위를 알아야 한다.

이 글에서는 IAM의 표면을 한 번 더 벗기고, 그 아래에서 실제로 결정이 일어나는 평가 엔진을 본다. 그리고 STS와 Federation이 왜 "엔터프라이즈 멀티 계정 환경의 척추"인지, Capital One·Uber 같은 사고에서 무엇이 망가졌었는지를 짚는다.

IAM의 6층 권한 평가: AWS 콘솔이 보여주지 않는 내부

aws s3 ls s3://my-bucket을 칠 때 AWS는 다음 6개 정책을 동시에 평가한다.

[1. SCP (Service Control Policy)]              ← Organizations 레벨, deny가 모든 걸 이긴다
       ↓
[2. Permission Boundary]                       ← IAM 엔터티(User·Role)의 최대 권한 한계
       ↓
[3. Identity-based Policy]                     ← User·Group·Role에 붙은 정책
       ↓
[4. Resource-based Policy]                     ← S3 버킷 정책, KMS 키 정책 등
       ↓
[5. Session Policy]                            ← AssumeRole·GetFederationToken 시 인라인 첨부
       ↓
[6. VPC Endpoint Policy]                       ← VPC Endpoint 경유 트래픽에만 적용

평가 규칙은 단순하지만 정확하다.

  1. 명시적 Deny는 모든 Allow를 이긴다 (explicit deny wins)
  2. 모든 관련 정책이 Allow하지 않으면 기본은 Deny (implicit deny)
  3. SCP·Permission Boundary는 권한을 부여하지 않고 한계만 설정 (deny-only)
  4. Resource-based Policy는 cross-account 경우 신뢰의 양쪽이 모두 Allow해야 (같은 계정 내에서는 둘 중 하나만 Allow면 충분)

🔍 더 깊이: SCP와 Permission Boundary는 둘 다 "권한의 최대치"를 설정하는 가드레일이지만 적용 범위가 다르다. SCP는 Organizations의 OU·Account 레벨에 붙어 그 계정 안의 모든 IAM 엔터티(root 포함)에 적용된다. Permission Boundary는 특정 IAM User·Role에만 붙는다. 즉 SCP는 "이 계정에서는 절대 us-east-1 외 리전 못 씀"을 강제하고, Permission Boundary는 "이 개발자 Role은 절대 IAM·Organizations API 못 호출"을 강제한다. 둘 다 Allow가 아니라 권한 상한선이다.

💡 관련 이론: 이 평가 구조는 **Role-Based Access Control (RBAC, NIST RBAC 표준 INCITS 359-2004)**과 **Attribute-Based Access Control (ABAC, NIST SP 800-162)**의 하이브리드다. IAM Policy의 Condition 절은 ABAC를 구현하고(aws:RequestTag/Project=Phoenix), 정책 첨부는 RBAC를 구현한다. AWS가 2018년 ABAC를 본격 도입한 이유는 계정 수가 폭증할 때 RBAC만으로는 정책 관리가 폭발하기 때문이다. 100개 프로젝트 × 4개 환경(dev/stg/prod/test) = 400개 Role이 필요하지만, ABAC라면 1개 Role + 태그 기반 조건으로 끝난다.

🎯 시나리오: "한 데이터 분석가가 S3 버킷에 접근이 안 된다고 호소한다. IAM 정책은 s3:* Allow, 버킷 정책도 Allow. 무엇이 원인일까?" — 답은 보통 SCP가 리전·서비스 제한을 걸었거나, Permission Boundary가 s3:GetObject만 허용하거나, 버킷이 KMS 암호화되어 있는데 KMS 키 정책이 Deny된 경우다. Pro 시험은 이런 "왜 안 되는가" 디버깅 시나리오를 자주 묻는다.

Cross-Account 접근: 두 쪽 모두 동의해야 한다

같은 계정 안에서는 Identity Policy OR Resource Policy 중 하나만 Allow면 충분하지만, 다른 계정에서 접근할 때는 양쪽 모두 Allow가 필요하다.

[Account A: 사용자 Alice]                  [Account B: S3 Bucket]
    Identity Policy: Allow s3:GetObject       Bucket Policy: Allow A의 Alice
              ↓                                          ↓
         양쪽 모두 Allow → 접근 허용

이게 핀테크·금융권 멀티 계정 환경에서 자주 사고가 나는 지점이다. 한쪽만 Allow하면 막히고, 양쪽 모두 Allow하면 권한 누설 위험이 커진다. 그래서 IAM Access Analyzer가 2019년에 출시되어 "이 리소스에 외부 계정이 접근 가능한가"를 자동 점검한다.

STS의 진짜 역할: 임시 자격증명의 발급기

AssumeRole이라는 단어를 SAA에서도 봤지만, Pro에서는 STS의 5가지 API를 모두 구별해야 한다.

API호출 주체반환 자격증명 유효 시간사용처
AssumeRoleIAM User/Role15분 ~ 12시간크로스 계정 접근, EC2 Instance Role
AssumeRoleWithSAMLSAML IdP (AD FS, Okta)15분 ~ 12시간엔터프라이즈 SSO
AssumeRoleWithWebIdentityOIDC(Google, Facebook, GitHub Actions)15분 ~ 12시간모바일 앱, CI/CD
GetFederationTokenIAM User15분 ~ 36시간외부 사용자에게 임시 권한
GetSessionTokenIAM User15분 ~ 36시간MFA 기반 세션 강화

🔍 더 깊이: 임시 자격증명의 핵심은 **세션 토큰(Session Token)**이다. 일반 AccessKeyId + SecretAccessKey만으로 호출하면 무한히 유효한 자격증명이 되지만, SessionToken이 추가되면 STS가 발급한 만료 시한이 강제된다. 또 임시 자격증명은 STS가 내부적으로 발급하는 JWT 유사 구조로, AWS Signature V4 서명에 SessionToken을 추가 헤더로 포함해 전송한다. 이게 IMDSv2가 SSRF 공격을 막는 메커니즘과 직결된다(EC2 메타데이터 서비스가 임시 자격증명만 발급, IMDSv2는 PUT 토큰을 강제).

📚 사례: 2019년 7월 Capital One 사건. 공격자가 SSRF 취약점으로 http://169.254.169.254/latest/meta-data/iam/security-credentials/에 접근해 EC2 Instance Role의 임시 자격증명을 탈취했다. 그 자격증명에는 S3 버킷에 광범위한 접근 권한이 있었고, 1억 600만 명의 데이터가 유출됐다. AWS는 이 사건의 직접적 결과로 IMDSv2(2019년 11월)와 IAM Access Analyzer(2019년 12월)를 출시했고, 2024년부터는 신규 EC2 인스턴스에서 IMDSv2를 기본으로 강제한다. DOJ 공소장.

AssumeRole의 신뢰 정책(Trust Policy)

Role을 만들 때 두 가지 정책을 동시에 정의한다.

// Trust Policy (누가 이 Role을 assume할 수 있는가)
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": {
      "AWS": "arn:aws:iam::123456789012:root"
    },
    "Action": "sts:AssumeRole",
    "Condition": {
      "StringEquals": {
        "sts:ExternalId": "unique-external-id-xyz"
      }
    }
  }]
}
 
// Permission Policy (이 Role을 가진 자가 무엇을 할 수 있는가)
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": "s3:GetObject",
    "Resource": "arn:aws:s3:::data-bucket/*"
  }]
}

ExternalId는 "confused deputy" 공격을 막는 장치다. 만약 A사가 B사에게 자기 계정의 Role을 assume할 수 있게 허락하면, 악의적인 제3자 C가 B사의 ID를 사칭해 A의 Role을 assume할 수 있다. ExternalId는 A가 B에게만 알려준 secret이라, C가 모르면 assume이 실패한다.

⚠️ 함정: Pro 시험에서 "third-party SaaS가 우리 AWS 계정에 접근하게 하려면"이라는 시나리오가 나오면 답은 거의 항상 Cross-Account Role + ExternalId다. IAM User를 만들어 액세스 키를 주는 답은 오답이다(액세스 키는 정적이고 회수 어려움). Datadog, Snowflake, Splunk 같은 SaaS가 모두 이 패턴을 쓴다.

Federation의 두 갈래: SAML과 OIDC

엔터프라이즈는 자체 ID 시스템(Active Directory, Okta, Azure AD)을 가지고 있다. 이걸 AWS에 매번 다시 만들지 않고 **연합(Federation)**한다.

SAML 2.0 기반 Federation

SAML(Security Assertion Markup Language) 2.0은 2005년 OASIS 표준으로 채택된 XML 기반 인증·인가 프로토콜이다.

[사용자] → [AD FS / Okta]
              ↓ SAMLResponse (XML, 서명됨)
         [AWS Sign-in Endpoint]
              ↓ AssumeRoleWithSAML
         [STS: 임시 자격증명 발급]
              ↓
         [AWS Console / API 사용]

💡 관련 이론: SAML 2.0은 XML Digital Signature(W3C XMLDSIG)와 XML Encryption(W3C XMLENC)을 기반으로 한다. IdP가 SAMLResponse를 X.509 인증서의 private key로 서명하고, SP(AWS)가 public key로 검증한다. 단 SAML은 XML 파싱의 복잡성 때문에 XML Signature Wrapping 공격이라는 고유의 보안 문제가 있다. 2012년 USENIX 학회에서 11개의 SaaS·SAML 구현에서 이 취약점이 발견됐고, AWS도 그중 하나였다. AWS는 이후 strict XML schema validation으로 패치.

OIDC(OpenID Connect) 기반 Federation

OIDC는 OAuth 2.0 위에 인증 레이어를 얹은 표준이다. JSON 기반이라 SAML보다 가볍고, 모바일·SPA에 적합하다.

[사용자] → [Google / GitHub / Cognito]
                  ↓ id_token (JWT)
            [AssumeRoleWithWebIdentity]
                  ↓
            [STS: 임시 자격증명]

GitHub Actions가 AWS에 배포할 때 이 방식을 쓴다. OIDC trust를 한 번 설정해두면 GitHub Actions의 워크플로우가 별도의 long-lived AWS credential 없이 매번 임시 토큰을 받아 배포한다. 2021년 GitHub이 OIDC를 출시한 이후 "AWS Access Key를 GitHub Secrets에 저장하던 관행"이 빠르게 사라졌다.

📚 사례: 2017년 Uber 데이터 유출 사고는 직원이 GitHub 공개 저장소에 AWS Access Key를 푸시한 게 원인이었다. 5,700만 사용자 데이터가 유출됐다. 이후 GitHub은 secret scanning을 도입했고, AWS는 IAM Access Analyzer로 노출된 키를 자동 탐지한다. 현재 GitHub Actions에서 OIDC를 쓰면 이런 사고 자체가 불가능해진다(static credential이 아예 없으므로).

IAM Identity Center (구 AWS SSO)

AWS Identity Center는 SAML 기반의 multi-account SSO 솔루션이다. Organizations와 통합되어 한 번 로그인하면 여러 계정·여러 Role을 콘솔에서 자유롭게 전환할 수 있다.

[직원] → [Identity Center 로그인]
              ↓
        [Permission Set 선택]
              ↓
        [임시 자격증명으로 대상 계정에 AssumeRole]
              ↓
        [콘솔 / CLI 사용]

Permission Set은 Identity Center 고유 개념으로, "여러 계정에 동일한 IAM Role을 일괄 배포"하는 템플릿이다. 예를 들어 "Developer Permission Set"을 정의하면 Identity Center가 모든 dev 계정에 동일한 Role을 자동 생성·유지한다.

🔍 더 깊이: Identity Center는 내부적으로 두 가지 ID 소스를 지원한다. ① Identity Center 자체 디렉토리 (소규모) ② 외부 IdP (AD/Okta/Azure AD via SAML 또는 SCIM). SCIM(System for Cross-domain Identity Management, RFC 7644)은 Azure AD 같은 외부 IdP에서 사용자가 추가·삭제되면 자동으로 AWS에 동기화하는 표준 프로토콜이다. 이게 없으면 직원이 퇴사해도 AWS에서 권한이 살아 있는 ghost user 문제가 생긴다.

Permission Boundary: 위임의 안전판

대규모 조직에서 자주 마주치는 시나리오: "개발자가 자기 Lambda Role을 직접 만들 수 있게 하고 싶다. 하지만 개발자가 IAM Admin 권한을 부여하면 위험하다."

답은 Permission Boundary다. 관리자가 개발자에게 "IAM Role을 만들 수는 있지만, 이 boundary 이상의 권한은 절대 못 부여"한다는 제약을 같이 건다.

// 개발자에게 부여하는 정책
{
  "Effect": "Allow",
  "Action": "iam:CreateRole",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "iam:PermissionsBoundary": "arn:aws:iam::123456789012:policy/DevBoundary"
    }
  }
}

이렇게 하면 개발자가 IAM Role을 만들 때 반드시 DevBoundary를 첨부하도록 강제되고, 그 boundary 이상의 권한은 자동으로 차단된다.

🎯 시나리오: 한 게임사가 100명의 개발자에게 자유로운 Lambda 개발 환경을 주려고 한다. 개발자가 직접 Role을 만들고 권한을 부여하지만, IAM Admin·Organizations·Billing 권한은 절대 안 됨. — 답은 Permission Boundary로 IAM·Organizations·Billing API를 deny한 boundary를 강제 첨부. SCP만으로는 부족한데, 개발자가 자기 Role에 admin 권한을 줄 가능성이 있기 때문. SCP + Permission Boundary 2중 가드레일이 정공.

6층 권한 평가의 실전: 디버깅 매트릭스

증상의심해야 할 정책진단 방법
모든 API 호출이 막힘SCPOrganizations 콘솔에서 SCP 확인
특정 서비스만 막힘Permission Boundary, SCPIAM 시뮬레이터, Access Analyzer
특정 리전만 막힘SCP의 Condition: aws:RequestedRegionSCP JSON 직접 확인
크로스 계정 접근 막힘양쪽 정책 모두CloudTrail의 errorMessage
KMS 암호화 객체 못 읽음KMS Key PolicyKMS 콘솔, kms:Decrypt 정책
AssumeRole 실패Trust Policy, ExternalIdCloudTrail의 sts:AssumeRole 이벤트

CLI로 정책 시뮬레이션이 가능하다.

# 특정 사용자가 특정 액션을 호출할 수 있는지 시뮬레이션
aws iam simulate-principal-policy \
  --policy-source-arn arn:aws:iam::123456789012:user/Alice \
  --action-names s3:GetObject \
  --resource-arns arn:aws:s3:::data-bucket/file.txt

ABAC vs RBAC: 조직 규모에 따른 선택

항목RBACABAC
정의Role(역할)별 정책 부여속성(태그)별 정책 부여
적합 규모소규모 (< 50 Role)대규모
정책 수역할 × 환경 폭증단일 정책 + 태그
권한 누설 위험정책 복제 시 실수태그 누락 시
AWS 도입초기부터2018년 ABAC 기능 추가

🔍 더 깊이: AWS ABAC의 핵심 Condition Key는 aws:RequestTag/key(요청자가 만들려는 리소스의 태그), aws:ResourceTag/key(이미 존재하는 리소스의 태그), aws:PrincipalTag/key(요청자 본인의 태그)다. 이 세 가지를 조합하면 "Project=Phoenix 태그를 가진 사용자는 Project=Phoenix 태그를 가진 EC2만 시작·중지할 수 있다"는 정책을 단 하나의 정책으로 표현할 수 있다. 100개 프로젝트라도 정책은 그대로다. 단 태그 누락은 곧 권한 차단이 되므로, Tag Policy(Organizations 기능)와 함께 강제해야 한다.

정리하며

IAM은 SAA에서 "정책 = JSON" 정도였지만 Pro에서는 6층 평가 엔진이라는 깊이로 다뤄야 한다. SCP·Permission Boundary·Identity Policy·Resource Policy·Session Policy·VPC Endpoint Policy가 동시에 작동하고, explicit deny는 모든 allow를 이기며, cross-account는 양쪽 모두의 동의가 필요하다.

STS는 임시 자격증명의 발급기이고, AssumeRole의 다섯 변형(AssumeRole, WithSAML, WithWebIdentity, GetFederationToken, GetSessionToken)을 시나리오 키워드로 구별해야 한다. Federation은 SAML(엔터프라이즈)과 OIDC(모바일·CI/CD)로 갈리며, Identity Center는 multi-account SSO의 표준 답이다. 마지막으로 Permission Boundary는 "개발자에게 자유와 안전을 동시에" 제공하는 위임의 안전판.

다음 글에서는 IAM이 결정한 권한 위에서 트래픽이 흐르는 통로 — VPC·서브넷·라우팅·보안 그룹을 Pro 깊이로 본다.

📝 연습 문제

선택지를 클릭하면 정답·해설이 펼쳐집니다.

문제 1

한 회사가 Organizations에 50개 계정을 운영한다. 한 개발자 계정에서 IAM User Alice가 `s3:GetObject` 권한을 가진 정책을 부여받았지만 객체를 가져올 수 없다. CloudTrail에는 `AccessDenied`로 기록된다. 가장 가능성 높은 원인은?

문제 2

한 SaaS 회사가 자기 고객의 AWS 계정에서 데이터를 수집해야 한다. 가장 안전하고 표준적인 방법은?

문제 3

한 회사가 개발자에게 "자기 팀의 Lambda Role을 자유롭게 만들되 절대 IAM·Organizations 권한은 부여하지 못하게"하려 한다. 가장 적합한 방법은?

문제 4

한 회사가 GitHub Actions에서 AWS Lambda에 배포한다. 보안팀이 "long-lived AWS Access Key를 GitHub Secrets에 저장하지 말라"고 요구한다. 어떻게 해야 하는가?

문제 5

한 회사가 Organizations에 200개 계정을 운영하며, 직원이 여러 계정에 SSO로 접근해야 한다. Active Directory가 ID 소스다. 가장 적절한 솔루션은?

문제 6

한 회사가 Cross-Account로 S3 버킷에 접근할 수 있는 모든 외부 Principal을 찾고 싶다. 가장 효율적인 방법은?

문제 7

한 시스템에서 사용자가 S3 객체를 못 가져온다. Identity Policy `s3:*`, 버킷 정책 Allow, KMS 키 정책 누락. CloudTrail에는 `KMS.NotFoundException`이 보인다. 무엇이 문제인가?

이전SAP 시험이라는 게임: 시나리오를 분해하는 손기술Week 1 · Day 1다음 VPC의 해부학: 라우팅 테이블이 진짜로 결정하는 것Week 1 · Day 3

이 페이지

  • IAM의 6층 권한 평가: AWS 콘솔이 보여주지 않는 내부
  • Cross-Account 접근: 두 쪽 모두 동의해야 한다
  • STS의 진짜 역할: 임시 자격증명의 발급기
  • AssumeRole의 신뢰 정책(Trust Policy)
  • Federation의 두 갈래: SAML과 OIDC
  • SAML 2.0 기반 Federation
  • OIDC(OpenID Connect) 기반 Federation
  • IAM Identity Center (구 AWS SSO)
  • Permission Boundary: 위임의 안전판
  • 6층 권한 평가의 실전: 디버깅 매트릭스
  • ABAC vs RBAC: 조직 규모에 따른 선택
  • 정리하며
  • 연습 문제