기준: SAA-C03 시험 가이드오류 제보
한 주 동안 글로벌 인프라부터 멀티 계정 거버넌스까지 훑었다. 머리로는 다 안다고 느껴도, SAA-C03 시험은 항상 한 줄짜리 시나리오로 변형해서 묻는다. "본사 밖으로 데이터가 못 나간다"라는 한 문장에서 Outposts가 떠올라야 하고, "TCP 게임 서버 글로벌 지연 최소화"에서 Global Accelerator가 즉시 튀어나와야 한다. 시험은 키워드를 외운 사람을 거르는 게 아니라 "이 시나리오의 본질이 무엇이냐"를 빠르게 판단할 수 있는 사람을 뽑으려 한다.
이 글은 Week 1을 다시 정리하면서 시나리오 키워드 → 솔루션 매핑을 머리에 새기는 시간이다. 단순 암기가 아니라 "왜 그 답인지"를 한 번 더 짚는다. 시나리오 매핑은 시험 전날 다시 한 번 통독하면 합격선이 확실히 올라가는 영역이기도 하다. 그리고 실무에서는 이 매핑이 곧 "사고가 나기 전에 다른 사람이 짠 설계를 검토하는 능력"이 된다 — 1주차에서 본 모든 사건(Capital One, us-east-1, 도쿄 AZ, SolarWinds, Travis CI)이 결국 누군가가 같은 매핑을 헷갈렸을 때 일어났다.
[ AWS Global Infrastructure ]
│
├── Region (34) ──┬── AZ (3+) ──┬── DC
│ │ └── DC
│ └── AZ ── DC
├── Edge Location (600+) ── CloudFront / R53 / GA / WAF
├── Local Zone (30+) ── 미니 리전
├── Wavelength ── 5G 엣지
└── Outposts ── 고객 DC
[ Identity ]
User / Group / Role / Policy
│
AssumeRole (STS) → 임시 자격 증명
│
┌─── External ID (Confused Deputy 방어)
├─── Permissions Boundary (권한 상한)
├─── ABAC (태그 기반)
└─── OIDC/SAML (페더레이션)
[ Multi-Account ]
Organizations → OU 트리
│
┌─── SCP (계정 권한 상한)
├─── Control Tower (자동 Landing Zone)
├─── RAM (리소스 공유)
└─── StackSets (일괄 배포)
이 세 영역이 Week 1의 결론이고, Week 2 ~ Week 12의 모든 서비스가 이 세 평면 위에 얹어진다고 보면 정확하다. 네트워킹은 AZ 위, 보안은 IAM 위, 다계정 패턴은 Organizations 위에서 동작한다. 그리고 이 세 평면의 교집합 — "어느 계정의 어느 리전 어느 AZ에 있는 리소스에 누가 무엇을 할 수 있는가" — 가 결국 모든 SAA 시나리오의 좌표계가 된다.
이 3층 모델은 사실 분산 시스템 보안의 고전적인 3축 — Where(위치), Who(신원), What(자원) — 을 클라우드 운영에 매핑한 것이다. 1985년 NIST가 정의한 보안 3요소(Confidentiality / Integrity / Availability)에 더해, 2003년 NIST SP 800-53이 명문화한 Access Control(AC), Audit & Accountability(AU), System and Communications Protection(SC) 세 영역이 거의 일대일로 매칭된다. AC는 IAM, AU는 CloudTrail/Config, SC는 VPC/네트워크 컨트롤로 구현된다.
이 3층은 실제 AWS의 권한 평가 엔진에서도 그대로 반영된다. AWS Zelkova(IAM 정형 검증)와 Tiros(네트워크 정형 검증)는 각각 IAM/SCP 정책과 VPC 라우팅을 SMT 제약으로 변환해서 "이 요청이 도달 가능한가"를 푼다. 2018년 USENIX Security 논문 "Semantic-based Automated Reasoning for AWS Access Policies"가 Zelkova의 기반이고, 같은 해 발표된 "Reachability Analysis for AWS-based Networks"가 Tiros의 기반이다. Access Analyzer, Reachability Analyzer, IAM Access Advisor가 모두 이 위에서 돌아간다.
| 시나리오 키워드 | 정답 후보 | 이유 |
|---|---|---|
| "본사 안에 데이터 유지" + "AWS API 사용" | Outposts | 고객 DC 안 AWS 하드웨어 |
| "5G", "자율주행", "AR/VR" | Wavelength | 통신사 엣지 |
| "후반 작업 VFX", "LA·마이애미 도시 사용자" | Local Zones | 도시 단위 미니 리전 |
| "TCP/UDP", "게임", "VoIP" | Global Accelerator | L4 가속 |
| "HTTP 정적 콘텐츠 캐시" | CloudFront | L7 캐시 |
| "DNS 페일오버" | Route 53 | DNS 라우팅 |
| "다계정", "Okta SSO" | IAM Identity Center | SAML/SCIM 페더레이션 |
| "GitHub Actions에서 AWS 배포" | OIDC 페더레이션 | 단명 토큰 |
| "외부 SaaS 모니터링" | Cross-Account Role + External ID | Confused Deputy 방어 |
| "개발자가 Role을 만들지만 광범위 권한 금지" | Permissions Boundary | 권한 상한 |
| "모든 계정에서 특정 리전 차단" | SCP | 계정 권한 상한 |
| "새 계정 자동 베이스라인 적용" | Control Tower + StackSets | 자동 Landing Zone |
| "여러 계정에서 VPC 공유" | AWS RAM | 리소스 공유 |
| "EC2가 S3 접근 시 안전한 방법" | Instance Profile + IAM Role | 키 노출 방지 |
| "MFA 강제" | 정책 Condition aws:MultiFactorAuthPresent | IAM 강제 |
| "AZ 한 곳 죽어도 서비스 유지" | Multi-AZ ASG + ELB | HA 패턴 |
| "한 리전 죽어도 1초 RPO" | Aurora Global Database | DR 패턴 |
| "데이터 주권 + 한국 금감원 규제" | Outposts / 국내 리전 | 데이터 위치 제한 |
| "기존 IdP를 그대로 쓰면서 AWS 권한 부여" | IAM Identity Center + SAML | 외부 IdP 페더레이션 |
| "Lambda가 다른 계정 S3 접근" | Cross-Account Role + Resource Policy | 양쪽 모두 Allow 필요 |
| "Active Directory 사용자에게 AWS 권한" | AD Trust + IAM Identity Center | 엔터프라이즈 표준 |
| "임시 직원에게 기한 정해 권한" | Session Tag + Permissions Boundary | 자동 만료 + 상한 |
| "S3 버킷 의도치 않은 공개 차단" | Block Public Access (계정+버킷 4단) | 데이터 유출 방지 |
이 표는 시험 전날 30분이면 통독되고, 같은 매핑을 5번 이상 반복해서 보면 시험장에서 시나리오 첫 줄만 보고 후보 답이 떠오른다. 키워드 → 솔루션 매핑은 SAA의 "패턴 인식 시험"적 성격을 가장 잘 보여준다.
⚠️ 함정: 같은 키워드가 다른 답으로 가는 경우도 많다. "암호화"는 KMS인가 CloudHSM인가? 단일 회사 사용이면 KMS, FIPS 140-2 Level 3 규제(FedRAMP High, 일부 금융)면 CloudHSM. "DR"은 Multi-AZ인가 Cross-Region인가? AZ 단위 격리는 Multi-AZ, 리전 단위 격리는 Cross-Region. 키워드만 보지 말고 "이 시나리오의 위협 모델이 무엇이냐"를 함께 봐야 한다.
SAA에서 직접 묻지는 않지만, 시나리오 해석에 결정적이다. 분산 시스템의 trade-off를 모르면 "왜 이 옵션이 강한 일관성을 못 주는가" 같은 질문에 답을 못 한다. 그리고 이 매핑은 실무에서도 "왜 우리 서비스의 글로벌 일관성이 깨졌는가"를 디버깅할 때 직접 쓰인다.
| 서비스 | 정합성 모델 | 위치 |
|---|---|---|
| DynamoDB (default) | Eventually Consistent | AP |
| DynamoDB (strong) | Strong Consistent (단일 리전) | CP |
| DynamoDB Global Table | Multi-Master, Last-Writer-Wins | AP |
| Aurora (single region) | Strong | CP |
| Aurora Global DB | Async replication | AP (리전 간) |
| RDS Multi-AZ | Sync replication | CP |
| S3 | Strong read-after-write (2020.12 이후) | CP |
| EFS | Strong (close-to-open) | CP |
| ElastiCache for Redis (Cluster Mode) | Async replication | AP |
| FSx for Lustre | Strong (POSIX) | CP |
| Neptune | Strong (single writer) | CP |
DynamoDB의 strong consistency는 단일 리전 안에서만 옵션으로 제공되고(ConsistentRead=true), Global Table은 항상 eventual이다. Global Table의 충돌 해결은 Last-Writer-Wins(LWW) 기반이라 동시 쓰기 시 데이터 손실 가능성이 있다. 그래서 멀티 마스터 글로벌 쓰기가 필요하면 DynamoDB Global Table을 쓰되 "타임스탬프 충돌이 비즈니스적으로 허용 가능한가"를 먼저 따져야 한다. 더 엄격한 일관성이 필요하면 CRDT(Conflict-free Replicated Data Type)나 Paxos/Raft 기반 합의 알고리즘이 필요한데, AWS는 이를 Aurora의 quorum-based replication(6-way write across 3 AZ, 4/6 read, 3/6 write 쿼럼)으로 일부 제공한다. Aurora 논문 Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databases(SIGMOD 2017)가 이 아키텍처의 정수다.
사례: 2015년 GitHub은 자체 MySQL 클러스터 분할 사고로 24시간 동안 데이터 일관성이 깨졌다. 두 데이터센터 간 네트워크 분할이 발생했고, 양쪽 모두 자신이 primary라고 판단해 쓰기를 받아버린 split-brain 사건이다. 사후 분석 보고서에서 GitHub은 "분할 시 우리는 CP를 선택하고 가용성을 포기한다"고 명시했다. 이런 사례는 CAP의 trade-off가 추상적 이론이 아니라 매일 운영자가 마주하는 결정임을 보여준다. AWS는 RDS Multi-AZ에서 같은 결정을 내렸고, 그래서 페일오버 동안 60초 정도 가용성이 끊긴다.
⚠️ 함정: "Aurora는 strong consistent이므로 글로벌 DB도 같다"고 가정하면 틀린다. Aurora Global Database는 storage-level async replication(보통 1초 RPO)이고 secondary 리전은 read-only다. 글로벌 쓰기를 원하면 DynamoDB Global Table을 써야 하지만 그건 LWW의 충돌 위험을 받아들여야 한다. 또 "ElastiCache Redis Cluster Mode는 ASync replication이지만 multi-AZ 페일오버로 가용성 보장"이라고 보는 것도 부분적으로 틀리다 — 페일오버 시 ack되지 않은 쓰기는 손실될 수 있다.
서비스 추상화가 올라갈수록 책임 경계선이 위로. 그래도 데이터 분류·IAM·암호화 키 관리는 항상 고객이라는 점이 핵심. 이 원칙은 Capital One 사고가 가장 명확하게 보여준다 — AWS는 자기 인프라 책임을 다했고, 사고는 고객 영역의 WAF 오설정(SSRF)·IMDSv1·과한 IAM 권한에서 났다.
사례: 2022년 6월 Toyota 자회사가 GitHub 공개 저장소에 5년간 액세스 키가 노출된 사고가 있었다. 약 30만 명 고객 데이터가 위험에 노출됐고, 원인은 개발자가 코드와 함께 자격 증명을 푸시한 것이었다. AWS 책임은 0% — 모든 게 고객 책임 영역에서 일어났다. 사후 표준 권고는 ① IAM User 대신 IAM Role + IRSA/Instance Profile, ② Access Key를 발급해야 한다면 IAM Identity Center의 임시 자격 증명, ③ Git pre-commit hook(git-secrets, truffleHog)으로 커밋 차단. 같은 패턴의 사고가 Uber(2016), Imperva(2019), Codecov(2021)에서도 반복됐다.
공동 책임 모델은 서비스마다 미묘하게 다르다. RDS는 DB 엔진 패치(minor version)는 AWS, major version 업그레이드는 고객 선택. Lambda는 런타임 패치는 AWS, 런타임 EOL 후 마이그레이션은 고객(Node 14 → 18 등). ECS Fargate는 컨테이너 OS·런타임은 AWS, 이미지 안의 OS 패키지 패치는 고객. 이 미묘한 차이가 시험 함정으로 쓰인다. AWS Trusted Advisor와 AWS Security Hub의 Foundational Security Best Practices(FSBP)가 이런 책임 경계를 자동 점검해준다.
요청 → SCP(Org) → Resource Policy → Identity Policy → Permissions Boundary → Session Policy
각 단계에서 명시 Deny → 즉시 DENY
모든 단계 통과 → ALLOW
어느 곳도 Allow 없음 → DENY (default)
같은 계정 = 합집합, 교차 계정 = 교집합, KMS = Key Policy 명시 위임 필수. 이 세 줄이 IAM 평가 로직의 전부다. 면접에서 "AWS IAM 평가 로직을 1분 안에 설명해보라"는 질문을 받았다면 이 세 줄이 답이다.
함정: "Resource Policy만 Allow하면 Cross-Account가 된다"는 보기는 오답이다. 같은 계정이면 그게 맞지만, 교차 계정에서는 호출자 계정의 Identity Policy에서도 Allow가 있어야 한다. 또 KMS는 별격이다 — Key Policy에서 명시적으로 IAM에게 위임("Enable IAM User Permissions" statement)하지 않으면 IAM 정책에서 Allow를 줘도 KMS 키를 못 쓴다. 이는 KMS가 "키 소유자가 최종 권한자"라는 모델이기 때문이다.
정책 평가는 사실 6개 정책 타입의 교차로 결정된다 — SCP, Resource Policy, Identity Policy, Permissions Boundary, Session Policy, VPC Endpoint Policy. AWS 공식 문서의 "Policy Evaluation Logic" 흐름도가 가장 정확한 레퍼런스다. 각 정책 타입의 "Allow 필요 vs 선택"이 시나리오마다 다르다. 한 마디 요약: 명시 Deny는 항상 최종, Allow는 모든 경계를 통과해야.
이 모델은 보안 이론의 Mandatory Access Control(MAC)과 Discretionary Access Control(DAC)의 혼합이다. SCP와 Permissions Boundary는 MAC(상위 권한자가 강제하는 한도), Identity/Resource Policy는 DAC(소유자가 자유롭게 설정). 미국 군사 보안 표준 Bell-LaPadula Model(1973)의 multilevel security 개념과 유사하다. AWS가 정책 평가를 SMT solver로 푸는 것도 이 모델이 형식 검증 가능한 구조를 갖기 때문.
| 계정 | 역할 |
|---|---|
| Management | Org 관리, 결제. 워크로드 금지 |
| Log Archive | CloudTrail/Config 중앙 저장. WORM |
| Audit/Security | GuardDuty, Security Hub 위임 관리자 |
| Networking | 중앙 VPC + Transit Gateway, RAM 공유 |
| Shared Services | 공통 도구(CI/CD, Artifactory 등) |
| Prod | 운영 워크로드 |
| Staging | 운영 직전 검증 |
| Dev | 개발 워크로드 |
| Sandbox | 개인 실험. SCP로 비용·리전 강제 제한 |
이 토폴로지는 AWS Security Reference Architecture(SRA) 문서에 권장 형태로 명시되어 있다. 모든 대기업 고객이 이 변형을 쓴다고 보면 정확하다. Netflix, Capital One, Airbnb, Slack 등의 공개 발표 자료를 보면 거의 같은 패턴이 반복된다.
사례: 2019년 Netflix Tech Blog는 자사 다계정 전략을 공개했는데, 1,000개 이상의 AWS 계정을 운영하면서 워크로드별·팀별·환경별로 계정을 잘게 쪼개는 "Account per Workload" 패턴을 표준화했다고 밝혔다. 이유는 ① 블래스트 반경 제한, ② 비용·태그 자동화, ③ IAM 권한 단순화. 같은 패턴을 Spotify, Lyft, Stripe도 채택했고, 이게 SRA가 권장하는 토폴로지의 실제 모델이다. 2023년 기준 큰 회사는 보통 100~5,000 계정을 운영하고, AWS Organizations의 한도(10,000 계정/Org)가 사실상 상한이다.
다계정 운영의 실무 핵심은 두 가지 자동화다. ① 계정 발급 자동화 — Control Tower의 Account Factory 또는 Account Factory for Terraform(AFT)으로 새 계정 생성 → 베이스라인 적용 → 권한 부여 → 알림이 GitOps 흐름으로 묶인다. ② 베이스라인 자동 배포 — CloudFormation StackSets의 SERVICE_MANAGED + auto-deployment=Enabled 옵션으로 새 계정에 자동으로 보안 베이스라인(GuardDuty, Config Rules, IAM Password Policy, S3 BPA 등)이 들어간다. 이 두 자동화가 없으면 100계정 운영은 사람으로 불가능하다.
| 항목 | A | B | 차이 |
|---|---|---|---|
| Local Zones | LA·마이애미 등 도시 미니 리전 | Wavelength: 통신사 5G 엣지 | LZ는 일반 인터넷, WL은 모바일 5G |
| CloudFront | L7 HTTP 캐시 | Global Accelerator: L4 가속 | HTTP면 CF, TCP/UDP면 GA |
| IAM User | 영구 자격 증명 | IAM Identity Center: 임시 SSO | 다계정·외부 IdP면 IC |
| ZoneName | 계정별 셔플 | ZoneId: 계정 무관 동일 | 다계정 동기화는 ZoneId |
| Permissions Boundary | 신원 권한 상한 | SCP: 계정 권한 상한 | 적용 단위가 다름 |
| Cross-Region Read Replica | Async, 수동 promote | Aurora Global DB: Async + Fast 페일오버 (수 분 수준) | RPO·RTO 차이 |
| CloudFront Functions | 엣지 PoP, 1ms 제약 | Lambda@Edge: Regional Edge, 더 무거움 | 위치·런타임 차이 |
| KMS | 멀티 테넌트 HSM | CloudHSM: 단독 HSM, FIPS 140-2 L3 | 규제 강도 |
| STS AssumeRole | 일반 cross-account | AssumeRoleWithWebIdentity: OIDC | 외부 IdP 페더레이션 |
| Resource Policy Allow | Same-account 충분 | Cross-account: 양쪽 Allow 필요 | 평가 로직 |
함정: ZoneName vs ZoneId는 시험에 자주 안 나오지만, 실무에서는 "다른 계정과 같은 AZ 쓰기"를 묻는 보안·비용 시나리오에서 결정적이다. CloudFront vs Global Accelerator는 시험에서 자주 비교되는 짝이고, 키워드 "TCP/UDP", "게임", "VoIP", "MQTT", "WebRTC 시그널링"이 보이면 무조건 GA. CloudFront Functions vs Lambda@Edge도 같은 비교 축인데, "수 ms 미만 응답"이면 Functions, "Node.js/Python 런타임 풀 사용"이면 Lambda@Edge.
AWS는 같은 기능을 여러 서비스로 제공할 때 항상 trade-off 축이 다르다. KMS vs CloudHSM은 추상화 vs 격리도, ALB vs NLB는 L7 기능 vs L4 throughput, SQS vs SNS vs EventBridge는 point-to-point vs fanout vs schema-routing. SAA 시험은 항상 "어느 축에서 trade-off를 묻고 있느냐"를 식별해야 한다. 이 사고법을 익히면 모르는 새 서비스도 동일한 축 위에 매핑해서 후보 답을 좁힐 수 있다.
Week 1은 "AWS라는 우주의 좌표계"를 머리에 박는 시간이었다. Region/AZ/Edge의 격리 모델, IAM의 정책 평가, 다계정의 거버넌스. 이 셋이 나머지 11주 모든 주제의 배경이 된다. 다음 주는 그 위에 네트워킹(VPC, 서브넷, 라우팅)을 얹는다. 한 번에 다 이해하려 하지 말고, 시나리오 문제 풀 때마다 이 표를 다시 펴서 매핑하는 습관을 들이면 시험 직전엔 키워드 → 솔루션 매핑이 자동 반사로 박힌다. 그리고 그 자동 반사가 SAA 합격뿐 아니라 실무 설계에서도 "30분 미팅 안에 솔루션 후보 3개를 그릴 수 있는" 시니어 엔지니어의 핵심 역량이다.
선택지를 클릭하면 정답·해설이 펼쳐집니다.
문제 1
한 글로벌 게임 회사가 전 세계 사용자에게 일관된 TCP 기반 게임 서버 응답 시간을 제공하려 한다. 가장 적합한 솔루션은?
문제 2
한 금융 회사가 한국 금융감독원 규정으로 일부 데이터를 본사 내부에 보관하면서도 AWS API로 운영해야 한다. 가장 적합한 솔루션은?
문제 3
한 회사가 50개 AWS 계정에서 us-east-1 외 모든 리전 사용을 차단하려 한다. 가장 효율적인 방법은?
문제 4
EC2가 S3에 접근하는 가장 안전한 방식은?
문제 5
GitHub Actions가 AWS에 배포할 때 키 회전 부담을 없애려면?
문제 6
한 SaaS가 우리 AWS의 CloudWatch 로그를 수집한다. Confused Deputy 방어를 위해 필요한 것은?
문제 7
한 회사가 새 AWS 계정을 매주 10개씩 발급하면서 동일한 보안 베이스라인을 적용하려 한다. 가장 적합한 방법은?
문제 8
한 회사가 신입 개발자에게 IAM Role을 자유롭게 만들 권한을 주되, AdministratorAccess급 Role 생성은 막고 싶다. 가장 적절한 방법은?
문제 9
한 AZ에서 냉방 장애로 EC2가 다운된다. 이미 ASG가 multi-AZ로 구성되어 있다면?
문제 10
다음 중 AWS 책임이 아닌 것은?
문제 11
한 시스템이 트랜잭션당 1ms 미만 RPO를 요구하고 한 리전 안에서만 운영된다. RDS는?
문제 12
한 회사가 Organizations 안에서 중앙 Networking 계정의 VPC 서브넷을 다른 30개 워크로드 계정에 공유하려 한다. 가장 적합한 솔루션은?