High-signal, professional-level SAP-C02 reference: multi-account governance (Organizations/Control Tower/SCPs), hybrid + multi-VPC networking (TGW/Cloud WAN/DX/PrivateLink), security controls (IAM/KMS/logging), DR strategy selection, migration/modernization, performance trade-offs, and cost visibility.
Keep this page open while drilling SAP‑C02 questions. Prioritize constraints → trade-offs → simplest compliant architecture.
| Item | Value |
|---|---|
| Questions | 75 (multiple-choice + multiple-response) |
| Time | 180 minutes |
| Passing score | 750 (scaled 100–1000) |
| Cost | 300 USD |
| Delivery | Pearson VUE test center or online proctored |
| Domains | D1 26% • D2 29% • D3 25% • D4 20% |
SAP-C02 is rarely about knowing a single service. It’s about designing under constraints:
If an answer “works” but ignores governance, operations, or recoverability, it’s usually not the best answer.
flowchart TB
Root[Organizations Root] --> SecOU[Security OU]
Root --> InfraOU[Infrastructure OU]
Root --> WorkloadsOU[Workloads OU]
Root --> SandboxOU[Sandbox / Experiments]
SecOU --> LogArchive[Log Archive]
SecOU --> Audit[Security / Audit Tooling]
InfraOU --> Net[Networking]
InfraOU --> Shared[Shared Services]
InfraOU --> CI[CI/CD Tooling]
WorkloadsOU --> Prod[Prod Accounts]
WorkloadsOU --> NonProd[Non-Prod Accounts]
Why this pattern wins: it limits blast radius, supports centralized logging/security, and aligns with “organizational complexity” scenarios.
| Account / capability | Purpose | Typical services |
|---|---|---|
| Management account | Owns the org; keep it “clean” | Organizations billing/guardrails (minimize workloads) |
| Log archive | Central, tamper-resistant logging | CloudTrail org trail, S3 log buckets, lifecycle/Object Lock |
| Security/Audit | Central security visibility and response | GuardDuty, Security Hub, Inspector, Macie, Detective, IAM Access Analyzer |
| Networking | Shared connectivity and inspection | TGW/Cloud WAN, shared subnets (RAM), Network Firewall, GWLB |
| Shared services | Org-wide platform services | IAM Identity Center integration, DNS, directory, tooling |
| Workload accounts | Apps/data split by env/team | VPCs, compute, data services, app pipelines |
Baseline checklist
High-yield rule: SCP is a boundary (it can only restrict). Even if IAM allows, an SCP deny still blocks the action.
| Control | Applies to | Use it for | Common gotcha |
|---|---|---|---|
| SCP (Organizations) | Accounts/OUs | Org-wide guardrails (region allow/deny, disallow leaving org, block risky services) | Impacts everyone, including admins; global services/regions can surprise you |
| IAM identity policy | Users/roles | Least-privilege permissions for principals | Too-broad wildcards and missing conditions |
| Resource-based policy | S3/SQS/KMS/etc | Cross-account access without needing IAM users | Must align with trust/identity policies; can be blocked by SCP |
| Permission boundary | IAM roles/users | Max permissions a role can ever get (delegation) | Doesn’t grant permissions; it only bounds them |
| KMS key policy | KMS keys | Who can administer/use the key | If key policy doesn’t allow use/admin, IAM alone won’t save you |
Exam cue: If you see “prevent anyone in an account from doing X,” think SCP. If you see “allow this other account/service to access Y,” think resource policy + role (and confirm SCPs don’t block it).
Control Tower is often the “least operational overhead” answer when you need:
Use custom landing zones only when the question explicitly calls for it or constraints require non-standard behavior.
| Access type | Best-fit pattern | Notes |
|---|---|---|
| Human workforce access | IAM Identity Center + permission sets | Centralize identities; avoid long-lived IAM users |
| App-to-app (service) | AssumeRole cross-account | Tight trust policy + least privilege |
| Shared resources | AWS RAM (resource sharing) | Useful for sharing subnets, TGW, Route 53 Resolver rules, etc. |
Rule of thumb: Humans get federated, short-lived access; workloads assume roles.
| Option | Best for | Strengths | Trade-offs / gotchas |
|---|---|---|---|
| VPC Peering | Few VPCs, simple routing | Simple, low latency | No transitive routing; becomes a mesh at scale |
| Transit Gateway (TGW) | Many VPCs + on-prem, shared routing | Transitive routing, scalable hub-and-spoke | Data processing cost; route table design matters |
| Cloud WAN | Global networks with policy-based connectivity | Central network policy + segmentation | Newer; still a “choose for global scale” answer |
| PrivateLink (Interface endpoints) | Private service exposure across VPCs/accounts | No routing overlap issues; strong isolation | Per-AZ endpoint cost; not a general routing solution |
Exam cue: If you see “dozens/hundreds of VPCs, shared services, on-prem connectivity,” think TGW (or Cloud WAN for global policy-driven networks).
TGW questions are rarely “what is TGW?” They’re usually about segmentation, routing intent, and operational scale.
High-yield TGW concepts
Common TGW route table layout
| TGW route table | Associate with | Propagate from | Typical intent |
|---|---|---|---|
| Spoke RT | Workload VPC attachments | Shared services + egress + on-prem | Spokes can reach shared/egress/on-prem |
| Shared services RT | Shared services attachment | Spokes | Shared services can reach spokes (selectively) |
| Inspection/Egress RT | Inspection + egress attachments | Spokes + on-prem | Force internet/on-prem flows through inspection |
| On-prem RT | DX/VPN attachment | Spokes + shared services | Control which VPCs are reachable from on-prem |
Exam cue: If the scenario says “separate business units and prevent lateral movement,” the best answer often includes separate accounts/VPCs + TGW segmentation (not one giant flat network).
flowchart LR
OnPrem[On-Premises] --- DX[Direct Connect]
DX --- DXGW[DX Gateway]
DXGW --- TGW[Transit Gateway]
TGW --- Egress[Central Egress + Inspection]
TGW --- Shared[Shared Services VPC]
TGW --- App1[App VPC - Account A]
TGW --- App2[App VPC - Account B]
Egress --> IGW[Internet Gateway]
Inspection building blocks:
| Connectivity | Best for | HA guidance |
|---|---|---|
| Site-to-Site VPN | Quick setup, encryption, backup path | Use two tunnels; consider multiple VPNs across devices |
| Direct Connect | Predictable bandwidth/latency | Use two DX locations, redundant connections; often pair with VPN for encryption/backup |
| DX + VPN | Professional-level “best practice” | VPN can provide failover; encryption if required |
Exam cue: If you see “must be encrypted” + “needs predictable performance,” choose DX + VPN (VPN for encryption/failover; DX for throughput).
High-yield components:
Common trap: Forgetting that DNS in large orgs needs a sharing model (RAM) and centralized governance.
Default pattern: Private subnets use VPC endpoints wherever possible.
| Endpoint type | Services | Why it matters |
|---|---|---|
| Gateway endpoint | S3, DynamoDB | Route-table based, no per-hour cost; big NAT cost saver |
| Interface endpoint (PrivateLink) | Many AWS services | Private access without internet; per-AZ hourly cost |
Exam cue: “No internet egress allowed” + “private subnets need to call AWS service” → VPC endpoint.
| Pattern | Pros | Cons | Use when |
|---|---|---|---|
| Distributed egress (NAT per VPC/AZ) | Simple ownership, fewer shared dependencies | Higher NAT cost at scale; inconsistent controls | Smaller orgs or teams with autonomy |
| Centralized egress VPC (inspection + NAT) | Consistent inspection and policy; easy to audit | Potential cross-AZ data costs; design carefully to avoid bottlenecks | Enterprise orgs with compliance/inspection needs |
| No general internet egress (endpoints-first) | Strong data exfiltration control; cost savings | Not all services support endpoints; some workloads need internet | Regulated/locked-down workloads |
High-yield guidance
| Policy | Answers “who can assume?” | Answers “what can they do?” | Typical mistake |
|---|---|---|---|
| Trust policy | Yes | No | Over-broad principals or missing ExternalId/conditions |
| Permissions policy | No | Yes | Too-broad actions/resources; missing conditions |
| Permission boundary | No | Bounds max permissions | Assuming it grants permissions |
| SCP | Org guardrail | Restricts | Forgetting SCP deny overrides everything |
Exam cue: If the scenario says “a pipeline in Account A must deploy to Account B,” the answer usually includes AssumeRole with a tight trust policy in Account B.
High-yield defaults
aws:SecureTransport) and require encryption (SSE-S3 or SSE-KMS) where needed.Copy-ready snippets (adapt as needed)
Require TLS for all S3 requests:
1{
2 "Version": "2012-10-17",
3 "Statement": [
4 {
5 "Sid": "DenyInsecureTransport",
6 "Effect": "Deny",
7 "Principal": "*",
8 "Action": "s3:*",
9 "Resource": [
10 "arn:aws:s3:::my-bucket",
11 "arn:aws:s3:::my-bucket/*"
12 ],
13 "Condition": {
14 "Bool": { "aws:SecureTransport": "false" }
15 }
16 }
17 ]
18}
Restrict access to principals in your AWS Organization:
1{
2 "Version": "2012-10-17",
3 "Statement": [
4 {
5 "Sid": "DenyOutsideOrg",
6 "Effect": "Deny",
7 "Principal": "*",
8 "Action": "s3:*",
9 "Resource": [
10 "arn:aws:s3:::my-bucket",
11 "arn:aws:s3:::my-bucket/*"
12 ],
13 "Condition": {
14 "StringNotEquals": { "aws:PrincipalOrgID": "o-xxxxxxxxxx" }
15 }
16 }
17 ]
18}
CloudFront note: For public content, CloudFront should access S3 via Origin Access Control (OAC) (not a public bucket). The best answer often combines CloudFront + private S3 + controlled bucket policy.
| Need | Best fit | Why |
|---|---|---|
| Rotate database/API secrets | Secrets Manager | Native rotation workflows and secure retrieval |
| App configuration parameters | SSM Parameter Store | Simple config/parameters (advanced parameters when needed) |
| Public TLS certificates | ACM (public) | Managed issuance and renewal |
| Internal PKI | ACM Private CA | Managed private CA for enterprise environments |
Mental model: To use a KMS key, permissions must line up across:
Copy-ready example: region restriction SCP (use with care)
1{
2 "Version": "2012-10-17",
3 "Statement": [
4 {
5 "Sid": "DenyOutsideApprovedRegions",
6 "Effect": "Deny",
7 "Action": "*",
8 "Resource": "*",
9 "Condition": {
10 "StringNotEquals": {
11 "aws:RequestedRegion": ["us-east-1", "us-west-2"]
12 }
13 }
14 }
15 ]
16}
Exam note: Region-deny SCPs can unintentionally block global services or required Regions. The “best” answer often includes a well-defined approved Region list + documented exceptions.
High-yield rules
Minimal example key policy pattern (illustrative):
1{
2 "Version": "2012-10-17",
3 "Statement": [
4 {
5 "Sid": "KeyAdmins",
6 "Effect": "Allow",
7 "Principal": { "AWS": "arn:aws:iam::111122223333:role/SecOpsKmsAdmin" },
8 "Action": "kms:*",
9 "Resource": "*"
10 },
11 {
12 "Sid": "AllowUseFromAppRole",
13 "Effect": "Allow",
14 "Principal": { "AWS": "arn:aws:iam::444455556666:role/AppRole" },
15 "Action": [
16 "kms:Encrypt",
17 "kms:Decrypt",
18 "kms:GenerateDataKey*",
19 "kms:DescribeKey"
20 ],
21 "Resource": "*"
22 }
23 ]
24}
Exam cue: If the scenario mentions multi-Region DR with encrypted data, consider multi-Region keys (simplifies replicated encryption across Regions).
High-yield pattern: Dedicated log archive account + org-wide CloudTrail + centralized S3 + lifecycle/immutability.
Core building blocks:
Exam cue: “Need visibility across all accounts” → centralized security + logging accounts, delegated admin, org trail.
Common pro-level combinations:
| Strategy | Typical RTO | Typical RPO | When it’s the best answer |
|---|---|---|---|
| Backup & restore | Hours–days | Hours | Lowest cost, “good enough” recovery |
| Pilot light | Tens of minutes–hours | Minutes–hours | Minimal core services running; faster recovery than restore |
| Warm standby | Minutes | Minutes | Scaled-down but running; quicker cutover |
| Multi-site active-active | Seconds–minutes | Near-zero | Strict RTO/RPO, global users, highest cost/complexity |
Exam cue: If you see strict RTO/RPO and “business can’t tolerate downtime,” you’re in warm standby or active-active territory.
| Data layer | Multi-Region option | Notes |
|---|---|---|
| S3 | CRR (Cross-Region Replication) | Pair with versioning; consider replication time control if needed |
| DynamoDB | Global tables | Multi-Region active-active; watch conflict resolution patterns |
| Aurora | Aurora Global Database | Very low replication lag; fast cross-region failover for reads |
| RDS (non-Aurora) | Cross-Region read replicas / snapshots | More manual; generally slower RTO |
| KMS | Multi-Region keys | Simplifies encryption across Regions for replicated data |
| Service | Best for | Why it wins |
|---|---|---|
| Route 53 | DNS-based failover and policy routing | Health checks + routing policies; simple and flexible |
| Global Accelerator | Fast failover for TCP/UDP apps | Anycast IPs, fast health-based routing |
| CloudFront | Global content delivery + origin failover | Edge caching + origin failover; strong for HTTP(S) |
Rule of thumb: If you need static anycast IPs and fast failover, look at Global Accelerator. If you need caching and HTTP edge, look at CloudFront.
| Policy | Best for | Key detail |
|---|---|---|
| Failover | Active-passive DR | Health checks drive failover (DNS TTL still matters) |
| Weighted | Gradual migration / canary | Shift % of traffic between endpoints |
| Latency | Lowest latency routing | Routes to the region with best latency for the user |
| Geolocation | Compliance / content by country | Routes based on user location |
| Geoproximity | Route based on “distance” with bias | Uses Route 53 traffic flow / bias control |
| Multi-value | Simple multi-endpoint answers | Returns multiple healthy records (not full load balancing) |
| Simple | Single record | No routing logic |
Exam cues
flowchart LR
Users[Users] --> R53[Route 53 / GA]
R53 -->|Primary| RegionA[Region A]
R53 -->|Failover| RegionB[Region B]
subgraph Region A
ALBA[ALB] --> AppA[App Tier]
AppA --> DBA[(Primary DB)]
end
subgraph Region B
ALBB[ALB] --> AppB[Warm App Tier]
AppB --> DBB[(Replica/Global DB)]
end
sequenceDiagram
participant Dev as Developer
participant Repo as Source Repo
participant Pipe as CI/CD (Tools Account)
participant Stg as Staging Account
participant Prod as Prod Account
Dev->>Repo: Commit / PR
Repo->>Pipe: Trigger build + tests
Pipe->>Stg: Assume deploy role\nDeploy IaC + app
Pipe->>Prod: Approval gate\nAssume deploy role\nDeploy
Prod-->>Pipe: Health checks + alarms
High-yield implementation pieces:
Target accounts typically expose a deployment role that the tools account can assume.
1{
2 "Version": "2012-10-17",
3 "Statement": [
4 {
5 "Sid": "AllowToolsAccountToAssume",
6 "Effect": "Allow",
7 "Principal": { "AWS": "arn:aws:iam::111122223333:role/ToolsDeployRole" },
8 "Action": "sts:AssumeRole"
9 }
10 ]
11}
Exam cue: If the question mentions “many accounts” and “standard baselines,” consider CloudFormation StackSets (or Control Tower customizations) to deploy org-wide resources consistently.
| Pattern | Best for | What you must remember |
|---|---|---|
| Blue/green | Big risk releases, fast rollback | Requires parallel environment and cutover |
| Canary | Gradual traffic shifting | Automate rollback via alarms |
| Rolling | Simple updates with some risk | Not great for strict zero-downtime unless carefully designed |
| Immutable | Consistency and safe rollbacks | Rebuild instead of patch-in-place |
Exam cue: If the question says “minimize downtime and risk” → blue/green or canary with automated rollback.
| Service | Best for | Notes |
|---|---|---|
| ALB | HTTP/HTTPS, L7 routing | Host/path routing, WAF integration |
| NLB | TCP/UDP, high throughput, low latency | Static IPs per AZ, good for non-HTTP |
| GWLB | Inline network appliance insertion | Pairs with centralized inspection patterns |
| Option | Best for | Why it wins | Typical trade-off |
|---|---|---|---|
| EC2 | Full control, special OS needs | Maximum flexibility | Highest ops burden |
| ECS (Fargate) | Containerized apps with low ops | No cluster management | Less control than EC2 |
| EKS | Kubernetes standardization | Ecosystem + portability | More complexity/ops than ECS |
| Lambda | Event-driven + bursty workloads | Minimal ops, scales fast | Cold starts, runtime limits, cost under high steady load |
Exam cue: If the scenario says “minimize operational overhead,” managed options (Fargate/Lambda/managed data stores) usually beat self-managed EC2.
Exam cue: If latency is for global users and content is cacheable → CloudFront.
| Option | Best for | Notes |
|---|---|---|
| Savings Plans | Compute spend across many services | Flexible; good default for predictable usage |
| Reserved Instances | Specific instance families (or RDS, etc.) | Strong discounts when you know the shape |
| Spot | Fault-tolerant, flexible workloads | Biggest savings; design for interruption |
Exam cue: If the workload is fault-tolerant and batch/async, Spot is often the “most cost-effective” answer (paired with retries/checkpointing).
Professional-level answers often include:
flowchart LR
subgraph Workloads
A1[Workload Account A] --> CW1[CloudWatch]
A2[Workload Account B] --> CW2[CloudWatch]
end
CW1 --> Agg[Central Observability]
CW2 --> Agg
Agg --> S3[(Central Log Archive S3)]
Agg --> SO[Search/Analytics]
Agg --> IR[Incident Response Runbooks]
High-yield implementation ideas:
If the question is “how to improve,” the best answer is usually the one that is systematic and automatable (not a one-off manual fix).
| Strategy | Meaning | When it’s best |
|---|---|---|
| Rehost | Lift-and-shift | Fastest path; minimal change |
| Replatform | Small optimizations | Some benefit with limited refactor |
| Refactor | Re-architect | Cloud-native goals (scale, resilience) |
| Repurchase | SaaS | Replace with managed SaaS |
| Retire | Turn it off | Reduce scope and cost |
| Retain | Keep as-is | Constraints prevent migration now |
Common patterns that show up in SAP-C02 scenarios:
Strangler fig sketch:
flowchart LR
Users --> Edge[Edge/Router]
Edge -->|Legacy paths| Mono[Monolith]
Edge -->|New paths| New[New Service]
New --> Data[(Managed Data)]
Exam cue: When the question says “modernize with minimal downtime and risk,” incremental patterns like strangler fig + canary/weighted routing often beat “big bang” rewrites.
flowchart LR
A[Discover + Assess] --> B[Plan Waves]
B --> C[Build Landing Zone]
C --> D[Pilot Wave]
D --> E[Scale Waves]
E --> F[Stabilize + Optimize]