SAA-C03 cheat sheet — every exam topic on one page
130 key facts across 4 exam domains — every topic on the SAA-C03 blueprint, with the exam pattern behind each. A condensed cheat sheet, distilled from the full SAA-C03 revision notes. Skim it the week of your exam.
Updated
Design Secure Architectures
30% of the examDesigning Secure Access: IAM Best Practices, Roles, and AWS Organizations
- SCPs and RCPs never grant permissions — they cap the maximum; effective access is the intersection of SCPs, RCPs, boundaries, and IAM policies, and an explicit deny always wins.
- SCPs bind your principals (including member root users) wherever the resource lives, but never the management account or service-linked roles; RCPs bind your resources against any caller, including outsiders.
- Harden root (MFA, no keys), remove member root credentials centrally and use AssumeRoot for root-only tasks; enforce MFA with aws:MultiFactorAuthPresent (BoolIfExists for deny-unless-MFA) or aws:MultiFactorAuthAge.
- Anything running on AWS compute gets an IAM role (ECS application code uses the task role); workloads outside AWS use IAM Roles Anywhere — never stored access keys.
- Role switching replaces your permissions for the session; role chaining is capped at one hour; source identity is the immutable audit key; revoke active sessions to cut off issued credentials.
- Cross-account: assume a role for broad access or services without resource policies (EC2, RDS); use a resource-based policy when the caller must keep its own permissions.
- Third-party vendor access = cross-account role + a vendor-generated, per-customer external ID checked with sts:ExternalId — never shared access keys.
- Workforce across many accounts = IAM Identity Center (permission sets + account assignments) using the existing directory as identity source (AD Connector for on-premises AD); app customers = Cognito.
- Permissions boundaries cap delegated roles only when enforced: require iam:PermissionsBoundary on role creation and deny editing or removing the boundary.
- Control Tower = managed landing zone on Organizations: preventive controls block API actions (mainly SCPs), detective controls are Config rules, proactive controls are CloudFormation hooks; Account Factory vends governed accounts.
How the exam tests this
SAA-C03 tests this task with constraint-driven scenarios: a working architecture plus a requirement such as most secure, least operational overhead, or least privilege, where several options technically function and one best fits. Classic shapes include the organization-wide restriction that must bind administrators (SCP, including Region restriction on aws:RequestedRegion with global services exempted), keeping outsiders away from your resources (RCP), the application holding access keys (replace with a role, or IAM Roles Anywhere off AWS), the cross-account choice (role vs resource policy), the third-party vendor (role plus external ID), the workforce-at-scale question (IAM Identity Center with the right identity source), MFA enforcement with condition keys, delegated role creation with enforced permissions boundaries, and least-privilege tooling (IAM Access Analyzer). Recurring misconceptions to watch for: treating an SCP as a grant, assuming SCPs reach the management account or service-linked roles, rotating long-term keys instead of eliminating them, forgetting how a missing MFA key evaluates in a deny, overlooking the one-hour role-chaining cap, and trusting an external ID the vendor does not control. When two options both work, the one that removes long-lived credentials or centralizes the control above the affected accounts usually wins.
Securing Workloads: VPC Design, Security Groups vs NACLs, WAF and Shield
- A route table defines the subnet: internet gateway route = public, NAT route = private, neither = isolated; only internet-facing load balancers and zonal NAT gateways belong in public subnets.
- Zonal NAT gateways sit in a public subnet, one per AZ; a regional NAT gateway needs no public subnet and spans AZs; outbound-only IPv6 uses an egress-only internet gateway.
- Security groups are stateful and allow-only (NLB groups too); NACLs are stateless, ordered allow/deny, and need ephemeral-port return rules — and long deny lists in front of HTTP belong in a WAF IP set.
- Reference security groups by ID between tiers; across inter-Region peering, use the peer CIDR instead.
- Gateway endpoints (S3, DynamoDB) are free route-table entries; interface endpoints need private DNS (plus VPC DNS attributes) to be transparent; endpoint policies plus aws:SourceVpce stop exfiltration.
- Keep origins private: CloudFront VPC origins for internal ALBs/instances, OAC with the S3 REST endpoint; AWS Network Firewall filters egress by domain name with symmetric routing.
- Shield = layer 3/4 DDoS (Advanced adds response team, cost protection, L7 auto-mitigation with a web ACL); WAF = layer 7 on CloudFront/ALB/API Gateway, never an NLB — use scoped rate-based rules and AND/NOT logic.
- GuardDuty detects (delegated admin + auto-enable, EventBridge for response); Macie finds sensitive S3 data (automated discovery, custom data identifiers).
- Cognito user pool = app sign-up/sign-in and JWTs (no guests); identity pool = temporary AWS credentials and guest access; IAM Identity Center = workforce accounts and SaaS apps.
- Secrets Manager for rotation (alternating users for zero-downtime) and cross-account access (customer managed KMS key); Parameter Store for cheap config with path-scoped IAM; Direct Connect is private but not customer-encrypted — add VPN over it or MACsec.
How the exam tests this
SAA-C03 probes this task by naming an exposure or a threat and demanding the design that closes it under a stated constraint: a database in a public subnet or in the app tier's NAT-routed subnets (move it to an isolated subnet, reference security groups by ID), a policy forbidding public subnets (regional NAT gateway) or outbound-only IPv6 (egress-only internet gateway), S3 traffic that must avoid the internet and cost (gateway endpoint with endpoint and bucket policies), an endpoint that changes nothing (private DNS), attackers reaching an ALB or bucket around CloudFront (VPC origin, origin access control), SQL injection, credential stuffing, or DDoS (WAF managed and scoped rate-based rules vs Shield Advanced), and hard-coded credentials (roles plus Secrets Manager or Parameter Store, split by rotation and cost). Classic shapes include the NACL connectivity mystery (missing ephemeral-port rule, often on the return path through NAT), the hybrid link requiring encryption (VPN over Direct Connect, or MACsec on a dedicated link), and admin access with no inbound ports (Session Manager with its endpoints). Traps are near-twins: WAF on an NLB, a security group deny, an outbound-only NACL deny, an internal ALB as a custom origin, an identity pool for password sign-up, GuardDuty for finding PII. Match the layer, the watched surface, and the constraint, and one option remains.
AWS Data Security Controls: KMS Encryption, S3 Encryption, and Key Management
- Requirement mentions editing the key policy, independent decrypt control, disabling the key, a custom rotation schedule or cross-account use → customer managed KMS key; AWS managed keys allow none of those, and their requests are still billed.
- A key policy is the root of KMS access: IAM policies work only when it delegates to the account; name a role directly to keep IAM administrators out; split key administrators from key users; use kms:ViaService to limit use to one service; grants delegate without editing the policy and last until revoked or retired.
- "Single-tenant" or "exclusive HSM control" → CloudHSM (custom key store if native service integration is also needed); FIPS 140-3 Level 3 alone is already met by KMS; "AWS must never be able to decrypt" → client-side encryption with keys held outside AWS.
- S3: SSE-S3 for baseline; SSE-KMS with a customer managed key for audit and control; Bucket Keys to cut KMS request cost (new objects only, encryption context becomes the bucket ARN); DSSE-KMS for two layers.
- No in-place encryption for EBS or RDS: EBS creates an encrypted volume from a snapshot (directly or via an encrypted copy); RDS restores an encrypted snapshot copy, with DMS CDC to shrink downtime — never an encrypted replica of an unencrypted instance.
- ACM certificates are regional except CloudFront's, which live in us-east-1; ACM renews its own certificates only while DNS validation records remain, never imported ones; enforce TLS with redirects, CloudFront viewer/origin protocol policies, an explicit aws:SecureTransport Deny, and RDS force-SSL parameters.
- KMS rotation keeps old material and the key ID/alias: customer managed keys rotate automatically on a 90–2,560-day period or on demand; imported material rotates on demand after importing new material into the same key; only asymmetric, HMAC and custom-key-store keys need new-key-plus-alias.
- Retention and recovery: Object Lock compliance mode for "no one may delete"; NoncurrentVersionExpiration to really delete in versioned buckets; S3 Replication copies only new objects and skips SSE-KMS unless configured; AWS Backup plans with cross-account copies and Vault Lock compliance mode survive an account compromise; Macie finds sensitive data, GuardDuty watches access, Access Analyzer lists sharing.
How the exam tests this
SAA-C03 turns Task 1.3 into elimination problems: a scenario states a data-protection requirement with one qualifying phrase — audit every key use, share with another account, only one role may decrypt, AWS must never be able to decrypt, single-tenant HSMs, no one including administrators may delete — and only one control satisfies it while cheaper or weaker controls appear as distractors. Expect key-policy mechanics (delegation to IAM, administrator vs user statements, kms:ViaService, grants, cross-account ARNs), rotation rules (automatic period, on demand, imported material), and procedural traps: no option that enables encryption in place on an existing EBS volume or RDS instance can be right. Certificate questions hinge on placement (regional ACM certificates vs the CloudFront us-east-1 rule) and renewal (DNS-validated ACM certificates vs imported ones). Retention and recovery stems reward literal reading: Object Lock or Vault Lock compliance mode for immutability, lifecycle actions that really delete noncurrent versions, replication settings for KMS-encrypted and existing objects, and cross-account backup copies for account compromise.
Design Resilient Architectures
26% of the examScalable, Loosely Coupled Architectures: SQS, SNS, EventBridge, Step Functions
- A queue between tiers turns a traffic spike into a backlog: SQS plus a worker tier scaling on backlog per instance is the default spike-absorption redesign.
- SQS FIFO orders messages per message group (set the group ID to the entity whose order matters) and deduplicates sends within five minutes by deduplication ID; it does not prevent redelivery after a visibility timeout.
- Retention (default 4 days, up to 14) limits how long a queue can cover an outage; standard-queue DLQs need longer retention than the source, and DLQ redrive moves fixed messages back.
- With Lambda on SQS: visibility timeout at least six times the function timeout, partial batch responses, and the event source mapping's maximum concurrency (not reserved concurrency) to cap load.
- SNS-to-SQS fan-out gives every consumer its own durable buffer; SNS filters on attributes or body, SQS FIFO queues subscribe only to SNS FIFO topics, and EventBridge wins on AWS/SaaS sources, Step Functions targets, cross-account buses and replay.
- Step Functions orchestrates multi-step work; Express workflows stop at five minutes and support neither callbacks nor .sync, and Distributed Map handles millions of S3 items.
- Per-client throttles plus quotas are REST API usage plans; WAF rate-based rules block by rate, not quota. Fargate has no GPUs, privileged containers or per-host daemons.
- Match the lever to the bottleneck: target tracking (plus predictive for cycles, scheduled for known dates), NLB for non-HTTP or static IPs, caches with TTLs, CloudFront to cut origin load, Global Accelerator for static IPs and fast failover, read replicas or custom Aurora endpoints for reads, EFS for shared files.
How the exam tests this
SAA-C03 tests this task with redesign scenarios: a tightly coupled system that loses requests during spikes, times out on a slow downstream, or needs code changes for every new consumer, plus a qualifier such as most cost-effective or least operational overhead. Expect the web-to-worker queue insertion, SNS-to-SQS fan-out (including FIFO topics and encrypted queues), EventBridge for AWS or SaaS events and cross-account buses, Step Functions in place of chained Lambda functions, Lambda vs Fargate vs ECS on EC2 against a runtime, GPU or host-agent requirement, and scaling, caching, edge and read-replica choices matched to a named bottleneck. Many questions turn on configuration detail: the message group ID, deduplication vs redelivery, visibility timeout for Lambda consumers, DLQ retention, usage plans vs WAF rate-based rules, the Aurora reader endpoint, and the Auto Scaling policy that fits a known or unknown surge. Traps include vertical scaling offered as the fix for a coupling problem, one shared queue where every consumer needs its own copy, Global Accelerator offered to reduce origin load, a Multi-AZ standby offered for read traffic, and Lambda proposed for a job that runs longer than 15 minutes.
AWS High Availability and Disaster Recovery: RTO, RPO, and the Four DR Levels
- High availability recovers quickly and may blip; fault tolerance never interrupts. A running hot standby still interrupts during switch-over; only load already shared across active instances does not.
- Static stability: to keep N instances after losing one of Z zones, run N × Z/(Z−1) spread evenly (6 needed = 9 across three zones or 12 across two).
- RPO is the data you can afford to lose, RTO is the downtime you can afford: extract both, diagnose which one is missed, then pick the cheapest strategy that meets them.
- The DR ladder trades cost for speed: backup and restore (hours) → pilot light (tens of minutes) → warm standby (minutes) → multi-site active-active (near zero). Copy AMIs and templates to the recovery Region in advance.
- RDS Multi-AZ DB instance: synchronous, automatic, standby NOT readable. Multi-AZ DB cluster: two readable standbys, faster failover. Read replicas: asynchronous, readable, promoted manually, then repoint DNS.
- Aurora Global Database has one writer Region even with write forwarding (switchover for planned moves, failover with data loss for outages); DynamoDB global tables are multi-active, eventual by default or strongly consistent across exactly three Regions.
- Match the ALB zones to the ASG zones, switch the ASG to ELB health checks, and keep replacement checks shallow so a database blip does not recycle the fleet.
- Route 53 failover = health check detection + record TTL; set Evaluate Target Health on alias records, base checks on CloudWatch alarms for business metrics, and remember a notify-only alarm fails nothing over.
- EBS (even Multi-Attach) is one AZ, instance store dies with the instance, EFS and S3 span AZs; S3 replication is forward-only (Batch Replication backfills) and versioning, not replication, defends against deletion.
- Ransomware-proof backups = cross-account copy into a vault with Vault Lock in compliance mode, with customer managed KMS keys for RDS, Aurora and EBS.
- Quotas are per Region: raise them in the standby Region ahead of time (quota request templates for new accounts), and answer throttling with exponential backoff and jitter.
- X-Ray needs tracing on the API Gateway stage plus Lambda active tracing; custom sampling rules catch rare errors, groups only filter what was recorded.
How the exam tests this
SAA-C03 tests this task with scenarios that hide one deciding constraint: an RTO, an RPO and a cost limit that select one of the four DR strategies (often two strategies meet the objectives and the cheaper rung wins), a legacy application that cannot be changed, a fixed IP that must survive, or backups that even an administrator must not delete. Classic shapes: Multi-AZ DB instance vs Multi-AZ DB cluster vs read replicas; promoting a cross-Region replica and repointing DNS; Aurora Global Database switchover vs failover vs DynamoDB global tables for multi-Region writes; Route 53 failover built from health checks (alias Evaluate Target Health, alarm-based checks on business metrics, TTL in the recovery time); and the single-point-of-failure hunt (one instance, one AZ, one zonal NAT gateway, state on the server, a self-managed broker). Traps to expect: reading from the non-readable standby, Multi-AZ offered for a Region failure, replication offered against accidental deletion or for objects already in a bucket, EBS Multi-Attach offered as cross-AZ shared storage, an ALB not enabled in the group's zones, EC2-only health checks that never replace a broken app, deep health checks that recycle the whole fleet, a canary that only notifies, quota increases forgotten in the standby Region, and active-active chosen when warm standby meets the numbers. When two options both work, the one that recovers automatically, meets the stated RPO and runs the least idle infrastructure wins.
Design High-Performing Architectures
24% of the examHigh-Performing Storage: S3 vs EBS vs EFS, Volume Types, and Hybrid Options
- Classify by access pattern first: mounted raw disk = EBS (block), shared directories across instances = EFS/FSx (file), API-accessed web-scale data = S3 (object).
- EBS ladder: gp3 by default (up to 80,000 IOPS and 2,000 MiB/s, single-digit-millisecond latency); io2 Block Express when IOPS exceed that or latency must be sub-millisecond; st1 for cheap sequential throughput; sc1 for cold data that must stay mounted. HDDs never boot.
- gp3 decouples performance from capacity, and Elastic Volumes changes type, IOPS and throughput in place with no downtime. RAID 0 adds IOPS, never a lower latency class.
- Multi-Attach is io1/io2 only, same AZ, cluster-aware file system: a shared block device, not a substitute for EFS.
- Instance store is the fastest storage EC2 can touch and vanishes on stop or failure; io2 Block Express is the durable, network-attached alternative when the data is not replicated elsewhere.
- EFS: Elastic throughput is the default for spiky or unknown load, Provisioned for steady known load; storage classes (Standard, IA, Archive) are the cost lever, and Archive needs Elastic throughput. One Zone is cheaper but lives and fails with one AZ.
- Windows/SMB/AD means FSx for Windows File Server (Multi-AZ to survive an AZ failure); FSx for OpenZFS is NFS only; HPC over S3 data means FSx for Lustre, scratch for short bursts.
- S3 by bottleneck: multipart and byte-range for size, Transfer Acceleration for distance (no caching), prefixes (re-key existing hot objects) and CloudFront for 503 Slow Down, S3 Express One Zone for same-AZ latency.
- Hybrid: Storage Gateway for ongoing access with a local cache (Tape Gateway archives to Glacier Deep Archive without changing backup jobs); DataSync for one-time or scheduled movement.
- Read the qualifier: under MOST cost-effective, pick the cheapest option that still meets every stated requirement; under MOST performant, meet the performance requirement first and treat cost as secondary.
How the exam tests this
SAA-C03 tests Task 3.1 with scenario questions that describe an application's I/O behaviour (random or sequential, shared or single-instance, temporary or durable, near or far, steady or spiky) and a constraint such as no downtime, survive an AZ failure, keep existing backup jobs, or lowest cost. Common shapes: the EBS ladder with a stated IOPS figure and latency tolerance (gp3 versus io2 Block Express), changing a volume in place with Elastic Volumes, the S3-vs-EFS-vs-EBS choice for shared access, EFS throughput mode by load shape and storage class for cost, FSx by protocol and deployment type, the S3 optimization matched to its bottleneck (multipart, Transfer Acceleration, prefixes and CloudFront for 503 errors), and the Storage Gateway type or DataSync for hybrid needs. Wrong options are usually near-misses: a service that meets one stated requirement but misses another, such as the right performance with the wrong durability or the right capacity at the wrong cost. Reading the qualifier (MOST cost-effective versus MOST performant, least operational overhead) decides between options that all work.
Elastic Compute: Auto Scaling Policies, Lambda Tuning, and Compute Selection
- Pick the compute service by duration, trigger, and management appetite: event-driven and under 15 minutes = Lambda; containers with least overhead = Fargate; hardware control = EC2; queued heavy jobs = AWS Batch; named big-data frameworks = EMR, or EMR Serverless when no cluster should be chosen or kept running.
- Over 15 minutes rules out Lambda — container-image functions included; a named framework (Spark/Hadoop/Hive) means EMR; otherwise batch jobs mean AWS Batch (Spot for retryable work), and a scheduled container job is an ECS task on Fargate started by EventBridge Scheduler.
- Choose EC2 families by the bottleneck resource — C for CPU, R/X for memory, I/D for local storage I/O, P/G for accelerators, M as the balanced default; right-size with Compute Optimizer, which recommends types in both directions, unlike Trusted Advisor's idle-instance check.
- Lambda memory sets CPU: more memory can make a function faster and cheaper, but single-threaded code stops speeding up near 1,769 MB (one vCPU). Cold starts are fixed by provisioned concurrency (paid, always warm) or SnapStart (snapshot restore), never by memory.
- Target tracking is the default; step scaling = one alarm with step adjustments per breach range; simple scaling = one adjustment plus a cooldown; scheduled = known times (raise min/desired, not just max); predictive = recurring patterns, in forecast-and-scale mode.
- Default instance warmup keeps booting instances out of the metrics while counting their capacity; the health check grace period only delays health checks; warm pools (Stopped, Running, Hibernated) pre-initialize slow instances.
- Scale worker fleets on backlog per instance with a target of acceptable latency ÷ per-message processing time — raw queue length is not proportional to fleet size.
- Consumers on one SQS queue compete for messages; when every service must see every event, fan out through SNS to one queue per consumer. ECS vs EKS turns on a Kubernetes requirement; GPUs rule out Fargate, and a custom AMI rules out ECS Managed Instances.
How the exam tests this
SAA-C03 tests Task 3.2 with traffic-shaped scenarios: a workload description, a pain point (lag during ramps, lost requests in bursts, slow functions, over-scaling while instances boot, budget pressure), and a qualifier like LEAST operational overhead or MOST cost-effective. The most repeatable shapes are the scaling-policy match — recurring-but-variable patterns to predictive (forecast and scale), fixed clocks and one-off events to scheduled actions on minimum and desired capacity, steady utilization goals to target tracking, graduated responses to step scaling, queue depth to a backlog-per-instance metric — and the compute-selection two-step, where a job's duration eliminates Lambda at 15 minutes and a named big-data framework splits EMR (or EMR Serverless) from AWS Batch. Expect near-twins that sound alike but do different jobs: default instance warmup vs health check grace period vs cooldown; provisioned concurrency vs SnapStart vs more memory; Fargate vs ECS Managed Instances vs an Auto Scaling group capacity provider; Compute Optimizer vs Trusted Advisor; SNS fan-out vs one shared queue; CloudFront vs Global Accelerator. Distractors scale on CPU when the real signal is a queue, hand-build what Batch or Fargate provides managed, pick EKS with no Kubernetes requirement, or raise Lambda memory past the point where single-threaded code can use it.
High-Performing Databases: Aurora vs RDS, DynamoDB, DAX and ElastiCache
- Pick relational (RDS/Aurora) for ad hoc SQL and unplanned joins; DynamoDB supports ACID transactions, so transactions alone don't rule it out — unplanned query patterns do.
- Homogeneous migrations keep the engine; heterogeneous ones need DMS Schema Conversion or AWS SCT for schema and code, plus AWS DMS (full load + CDC) for the data. RDS to Aurora: create an Aurora read replica, then promote.
- Read replicas scale reads (asynchronous, readable, cross-Region capable); a Multi-AZ DB instance standby cannot serve reads, while a Multi-AZ DB cluster (MySQL/PostgreSQL) has two readable standbys.
- Aurora Replicas share the cluster volume, so lag is typically under 100 ms, behind one reader endpoint; Global Database replicates at the storage layer for sub-second cross-Region reads; Serverless v2 can scale to 0 ACUs and pause.
- DynamoDB: provisioned + auto scaling for steady traffic, on-demand for unpredictable or idle-then-bursty traffic — on-demand instantly handles up to double the previous peak, and warm throughput pre-warms for a known launch.
- Throttling with capacity to spare is a hot partition (each partition caps at about 3,000 RCU / 1,000 WCU); fix the key with high cardinality or write sharding. A throttled GSI also throttles base-table writes.
- A Query needs the index's partition key value, so the attribute you look up by must be the GSI's partition key; GSIs can be added any time, LSIs only at table creation.
- DAX is the microsecond, API-compatible cache for DynamoDB; ElastiCache fronts everything else — Valkey/Redis OSS for persistence, failover and sorted sets, Memcached for the simplest multi-threaded cache.
- Lazy loading + TTL caches only what is read; write-through keeps data fresh but can fill memory with unread items. RDS Proxy pools connections and speeds failover — unlike a bigger instance or reserved concurrency.
How the exam tests this
SAA-C03 tests this task with workload-shaped scenarios plus a constraint: a read-heavy, write-heavy, spiky, idle or global workload and lowest cost, least operational overhead, no code change or a hard latency word (milliseconds vs microseconds). Classic shapes: relational vs DynamoDB decided by ad hoc SQL rather than transactions; homogeneous vs heterogeneous migration (schema conversion vs DMS data movement, Aurora read replica promotion); the read-offload choice (read replicas vs Multi-AZ DB instance vs cache); the Aurora upgrade (low-lag replicas, reader endpoint, Global Database vs binlog replica, Serverless v2 vs a stop/start schedule); DynamoDB capacity mode (on-demand headroom, warm throughput); hot partitions on tables and GSIs; GSI key choice; DAX vs ElastiCache; Valkey/Redis OSS vs Memcached; cache population and eviction; and RDS Proxy vs a bigger instance or reserved concurrency. Trap patterns: Multi-AZ offered for read scaling, more capacity offered for a hot partition, a GSI keyed on the wrong attribute, and a fix that works but violates a stated constraint. Read the constraint words before the options.
Scalable Networks: CloudFront vs Global Accelerator, Transit Gateway, ALB vs NLB
- CloudFront caches and accelerates HTTP content; Global Accelerator provides two static anycast IPs for TCP/UDP with near-instant cross-Region failover — protocol and static-IP requirements decide between them.
- ALB for HTTP routing (path/host rules, Lambda targets); NLB for TCP/UDP at extreme scale, Elastic IPs and client-IP preservation (default on for instance targets, off for IP targets on TCP/TLS); a TCP listener passes TLS through, a TLS listener terminates it; GWLB for inline third-party appliances.
- An ALB has no static IPs: put an NLB in front of it (an Elastic IP per AZ, routing unchanged) or Global Accelerator (one anycast IP set across Regions with fast failover).
- CloudFront VPC origins front an internal ALB, NLB (not TLS listeners) or EC2 in private subnets; the VPC still needs an attached internet gateway, and the CloudFront-VPCOrigins-Service-SG is the tight origin rule.
- Size VPC CIDRs for growth and keep every range non-overlapping; subnet and primary CIDRs cannot be resized, so IP exhaustion is fixed with a secondary CIDR and new subnets.
- Placement groups: cluster = lowest latency, one AZ (HPC); spread = max seven instances per AZ on distinct hardware (critical few); partition = failure-isolated groups for large distributed systems (Kafka, Hadoop).
- VPC peering is never transitive and has no edge-to-edge routing; Transit Gateway gives transitive, propagated, segmentable routing at the cost of attachment and per-GB charges and an extra hop, and neither tolerates overlapping CIDRs — PrivateLink does.
- Direct Connect buys consistent latency and bandwidth; VPN (even accelerated) stays internet-dependent. A VPN is the cheap automatic DX backup via BGP; a second DX at another location is the backup that matches the primary.
- Same-AZ placement minimizes latency and cross-AZ charges, but multi-AZ spread wins when availability is the priority; zone-local cache reads need a same-zone replica's node endpoint, not the reader endpoint; across Regions, Route 53 latency-based routing sends each user to the fastest Region.
How the exam tests this
SAA-C03 tests this task as constrained selection: several networking options genuinely work, and one stem detail — a UDP protocol, a static-IP allowlist, a hundred-VPC estate, an overlapping CIDR, a backup that must match the primary — makes exactly one correct. Classic shapes include CloudFront vs Global Accelerator (protocol and static IPs decide, not "global users"), ALB vs NLB (fixed IP, UDP, extreme throughput, TLS passthrough or client-IP preservation flips it to NLB; inline security appliances mean GWLB), static IPs for an ALB (NLB in front for one Region, Global Accelerator across Regions), private origins for CloudFront (VPC origins, the internet gateway prerequisite and the service-managed security group), the non-transitive peering trap and its edge-to-edge cousin (a hub VPC cannot share its VPN or Direct Connect with peers), peering vs Transit Gateway vs PrivateLink by scale, cost and scope, IP exhaustion fixed with a secondary CIDR, Direct Connect vs VPN by "consistent" versus "quickly", the right Direct Connect backup for the stated budget, and placement groups by workload keyword. Expect distractors that ignore a hard limit — transitive peering, an ALB with an Elastic IP, a resized subnet, a spread group holding forty instances, an accelerated VPN sold as Direct Connect-grade — which one memorized fact eliminates.
Data Ingestion & Transformation: Kinesis, Glue, Athena, and Lake Formation
- Kinesis Data Streams = real-time with custom consumers, replay within the retention period (24 hours default, up to 365 days), and per-shard ordering via the partition key.
- Each shard takes 1 MB/s or 1,000 records/s of writes and serves 2 MB/s of reads; one partition key always maps to one shard, so a hot key needs a finer-grained key — not more shards or on-demand mode.
- Shared-throughput consumers split each shard's 2 MB/s; enhanced fan-out gives every consumer its own 2 MB/s per shard with low push latency.
- Amazon Data Firehose = managed near-real-time delivery with Lambda transforms and built-in Parquet/ORC conversion; it has no consumer interface, so the composite pattern is Data Streams for real-time readers with Firehose reading the stream to archive to S3. "Kafka" means Amazon MSK.
- Transfer selection: DataSync = one-time or scheduled copies (VPC service endpoint for private VIFs, task bandwidth limits); Storage Gateway = ongoing cached hybrid access; Transfer Family server = partners push, SFTP connector = you pull/push to their server. Snowball Edge is closed to new customers: online bulk = DataSync (plus a temporary Direct Connect hosted connection if bandwidth is short); offline = AWS Data Transfer Terminal or a Partner service.
- Secure ingestion: interface VPC endpoints with private DNS, plus a resource-policy Deny on aws:SourceVpce to make the stream or bucket reject other paths; Transfer Family VPC-hosted internet-facing endpoints give Elastic IPs and security groups.
- The Glue Data Catalog is the shared metastore for Athena, EMR, and Redshift Spectrum; Glue jobs are the serverless ETL default, with job bookmarks for incremental input and partitionKeys for prunable output. Lake Formation centralizes table/column permissions.
- Athena prunes only on table partitions, not prefixes — use partition projection or a crawler; columnar Parquet plus compression plus date partitions is the cost fix. Result reuse and CTAS are not layout fixes; QuickSight (Amazon Quick Sight) dashboards over Athena should usually use SPICE with a scheduled refresh.
How the exam tests this
SAA-C03 tests this task as service selection under qualifiers: a streaming requirement plus "no consumer code / deliver to S3 / near-real-time / least overhead" selects Firehose, while "real-time processing," "replay," or "ordering" selects Data Streams and the word "Kafka" selects MSK. Harder items test the mechanics behind those choices: a hot partition key versus shard count, shared-throughput consumers versus enhanced fan-out, a resource-policy Deny on aws:SourceVpce versus an identity policy or aws:SourceIp, and the Transfer Family endpoint type that gives partners fixed IPs. Transfer questions hinge on frequency, direction and access clues — scheduled copy (DataSync, with a VPC service endpoint over a private VIF), ongoing hybrid access (Storage Gateway), partner SFTP uploads (Transfer Family server) versus pulling from a partner server (SFTP connector). Expect the Athena cost scenario where Parquet plus real partitions (crawler or partition projection) beats Redshift, caching or prefix-only layouts; Glue job bookmarks versus incremental crawls; SPICE versus direct query for busy dashboards; EMR on EC2 versus EMR Serverless, Glue and Athena for Apache Spark; and Lake Formation column-level grants versus bucket-policy sprawl.
Design Cost-Optimized Architectures
20% of the examCost-Optimized Storage: S3 Classes, Lifecycle Policies, and EBS Economics
- Price the whole bill — storage, retrievals, requests and minimum durations (IA 30 days, Glacier Instant/Flexible 90, Deep Archive 180) — before picking a class; the duration trap mainly keeps data that lives days to a couple of weeks in S3 Standard.
- Standard-IA vs Glacier Instant Retrieval: both read in milliseconds; data read about monthly favours Standard-IA, data read a few times a year favours Glacier Instant Retrieval's lower storage price despite its higher retrieval fee.
- One Zone-IA only for re-creatable or secondary-copy data; S3 Express One Zone is a costly performance class, never a cost saving.
- Unknown or changing access = S3 Intelligent-Tiering: no retrieval fees or minimum durations, objects under 128 KB not tiered, optional Archive Access (90+ days) and Deep Archive Access (180+ days) tiers need restores and count from last access, not creation.
- Versioned buckets need NoncurrentVersionExpiration (NoncurrentDays, NewerNoncurrentVersions); every upload bucket needs AbortIncompleteMultipartUpload; a bucket shown as Disabled has never been versioned.
- gp3 beats gp2 (3,000 IOPS / 125 MiB/s baseline at any size); Elastic Volumes can change type and grow but never shrink; st1/sc1 for cheap sequential throughput.
- Audit the leaks: unattached volumes, stale snapshots (DLM manages only its own; archive only long-kept snapshots — full copies, 90-day minimum, up to 72-hour restore), noncurrent versions, incomplete multipart uploads.
- Cheapest service by interface: S3 for object access, EBS for single-instance block, EFS (with lifecycle to IA) for shared Linux files, FSx for Lustre scratch linked to S3 for temporary HPC runs; elastic S3/EFS when capacity growth is unpredictable.
- AWS Backup: daily warm rules with short retention plus monthly rules moved to cold storage (retention at least 90 days beyond the move; EBS archive only from monthly-or-rarer rules).
- Move data in with DataSync (scheduled, throttled, verified), Transfer Family (SFTP into S3 or EFS) or Storage Gateway (S3 File Gateway stores native objects; Volume Gateway stores block volumes) — Snowball Edge is not available to new customers.
- Cost tools by job: activated tags (management account) attribute, Cost Explorer analyzes, Budgets alerts on actual or forecasted spend, CUR 2.0 via Data Exports gives line items, Cost Anomaly Detection flags the unexpected.
How the exam tests this
SAA-C03 tests this task with cost-constrained scenarios: several storage designs work, and the correct one is the cheapest that still meets every stated number — retention period, retrieval-time tolerance, access frequency, object size, resilience. Classic shapes include the lifecycle waterfall (transitions and expirations that respect minimum durations), the class choice where a stated access frequency makes an IA or Glacier option a retrieval-fee trap (including Standard-IA versus Glacier Instant Retrieval), One Zone-IA or Express One Zone offered where they do not fit, versioned-bucket and multipart cleanup with the right lifecycle actions, Intelligent-Tiering archive tiers versus age-based rules, the EBS audit (gp2 to gp3, volumes that cannot shrink in place, unattached volumes, snapshot pruning and archiving), file-service selection (EFS lifecycle, FSx for Lustre scratch versus persistent), AWS Backup warm and cold rules, and choosing DataSync, Transfer Family or Storage Gateway to move data in. Watch for options that save money by breaking a requirement and for tool swaps in cost-visibility questions (Budgets alerts on forecasts; Cost Explorer analyzes; CUR/Data Exports give line items; activated tags attribute).
Cost-Optimized Compute: Spot vs Reserved vs Savings Plans, and Lambda vs EC2
- Layer the purchase mix: commitments sized to the steady baseline, On-Demand behind Auto Scaling for the variable layer, Spot (up to 90% off) for interruptible work — never commit to peak, never put un-interruptible work on Spot.
- Depth versus flexibility: Standard RIs and EC2 Instance Savings Plans go up to 72% but lock a family; Compute Savings Plans go up to 66% but follow usage anywhere, including Fargate and Lambda, which no EC2-only instrument covers.
- A commitment is one hourly amount billed every hour of the term: it cannot be scheduled, its flexibility moves the discount but not the bill, RIs are applied before Savings Plans — so right-size first and size the plan to the uncovered floor.
- Spot is safe only for stateless, retryable or checkpointable work, in an ASG mixed instances policy (On-Demand base, many types across AZs, price-capacity-optimized); on ECS, put the base on FARGATE and the larger weight on FARGATE_SPOT.
- Pick the cost tool by job: Compute Optimizer recommends, Cost Explorer analyzes (its purchase recommendations follow current usage), Budgets alerts, the CUR itemizes, and tags count only after activation in the management account; consolidated billing shares commitments by default.
- Pick compute by utilization: Lambda for low or spiky volume, EC2 with commitments for sustained load, Fargate for containers without cluster management — and Fargate bills the vCPU and memory a task requests.
- Match scaling to demand: target tracking for unpredictable load, scheduled actions for clock-predictable ramps with slow-starting instances, scheduled stop/start for non-production; hibernation (enabled at launch, Linux RAM under 150 GiB, encrypted EBS root) for intermittent instances with long warm-up.
- Offload and place wisely: CloudFront caching shrinks the origin; CloudFront Functions beat Lambda@Edge for simple high-volume viewer logic; Local Zones (AWS-run metro) vs Outposts (your premises) vs Wavelength (5G); one ALB for many HTTP services, NLB for UDP and static IPs, GWLB for inline appliances.
How the exam tests this
SAA-C03 tests this task with MOST cost-effective scenarios where several designs run the workload and one pays least without breaking a requirement. The flagship shape is the layered purchase mix — a baseline, a variable peak and a batch tier — graded on matching commitments, On-Demand with Auto Scaling, and Spot to the right layers. Expect commitment-sizing traps (a plan cannot be scheduled, its hourly amount does not shrink when you downsize, existing RIs are applied first, Cost Explorer recommendations mirror today's over-provisioned usage), Compute versus EC2 Instance Savings Plans decided by a move to Fargate or Lambda, Spot and Fargate Spot resilience details (On-Demand base, diversified pools, capacity provider base and weight), Lambda-vs-Fargate-vs-EC2 choices decided by utilization, target tracking versus scheduled scaling, hibernation prerequisites, cost-tool and consolidated-billing questions, CloudFront Functions versus Lambda@Edge, Local Zones versus Outposts, and ALB versus NLB versus Gateway Load Balancer. When two options both work, the one that right-sizes first, commits only to the steady floor and pushes interruptible work to Spot usually pays least. Distractor patterns: committing to peak, Reserved capacity for part-time workloads, Spot under stateful or baseline tiers, Capacity Reservations offered as a saving, per-service load balancers, and serverless proposed for a sustained, always-hot workload.
Cost-Optimized Databases: DynamoDB vs RDS, Aurora Serverless, and Caching
- Workload shape decides the pricing model: idle-heavy or unpredictable load belongs on serverless (Aurora Serverless v2, DynamoDB on-demand); steady 24/7 load belongs on provisioned capacity with a commitment.
- Engine choice is a cost lever: open-source engines carry no license fee, and Aurora's premium buys shared-storage replicas (up to 15 without duplicating storage) — pay it only when you use that.
- Aurora Serverless v2 at a 0-ACU minimum pauses when idle and bills only storage, but the first connection waits to resume (about 15 seconds, longer after a day); DynamoDB on-demand has no resume delay.
- Commitments discount every hour, idle ones included: Reserved Instances (3-year All Upfront is cheapest for a fixed, steady database), ElastiCache reserved nodes, or a 1-year no-upfront Database Savings Plan when flexibility matters — with a term that ends before the workload does.
- Right-size first, then commit; non-production databases can stop on a schedule (they restart after seven days), and an instance sized only for connections gets RDS Proxy and a smaller class.
- Repetitive reads plus staleness tolerance means a cache: ElastiCache, or DAX for DynamoDB (eventually consistent reads only, and lower provisioned reads to bank the saving); diverse or must-be-fresh reads mean a replica.
- DynamoDB provisioned capacity with auto scaling fits steady or predictable curves; auto scaling reacts in minutes, so spikes that arrive in seconds belong on on-demand. Standard-IA only helps storage-dominated tables.
- Backups have two dials: automated retention (1–35 days of point-in-time restore) and scheduled snapshot frequency and retention for the long tail; delete stale manual snapshots, and export query-only archives to S3 as Parquet (not restorable) with lifecycle to Glacier.
- Use purpose-built types: Timestream for InfluxDB for time series (LiveAnalytics is closed to new customers), Parquet on S3 with Athena or Redshift for columnar analytics.
- Heterogeneous migrations use SCT plus DMS full load and CDC; homogeneous ones skip conversion — Aurora read replicas for RDS to Aurora, native tools for the schema plus DMS for data (DMS creates only tables and primary keys).
- Storage levers: gp3 instead of unneeded provisioned IOPS (for MySQL, MariaDB and PostgreSQL, 400 GiB+ includes 12,000 IOPS), storage autoscaling instead of pre-allocation, and Aurora I/O-Optimized when I/O is 25%+ of spend.
How the exam tests this
SAA-C03 tests this task with a workload description and a cost qualifier, and the workload's shape — steady, spiky, intermittent, unpredictable, read-heavy, analytical, time-stamped — usually decides the pricing model. A second, mid-scenario constraint then separates near-twins: whether a resume delay is acceptable (Aurora Serverless v2 auto-pause), whether traffic peaks faster than an alarm can react (on-demand rather than auto scaling), how long the workload will live (reservation term), whether the configuration may change (Savings Plan rather than RI), how many minutes of downtime the cutover allows (DMS CDC or an Aurora read replica), or whether an archive must be restorable (snapshot) or only queried (export to S3). Common shapes include the business-hours database burning 24/7 instance-hours, the DynamoDB capacity-mode choice, the read-heavy database where a cache beats replicas, the instance sized for Lambda connections, the Oracle licensing complaint, the retention or stale-snapshot audit, sensor data on a relational engine, and oversized provisioned IOPS. Expect options that discount idle hours instead of removing them, cut cost by breaking a stated recovery or compatibility requirement, or use a tool that cannot do the job (a snapshot across engines, Standard-IA on a busy table). When two options both work, the one that stops paying for idle time — or serves the same work from cheaper capacity — is cheaper.
Cost-Optimized Networking: NAT Gateways, VPC Endpoints, and Data Transfer
- Price the path before the fix: inbound is free, same-AZ private traffic is free, cross-AZ is charged both directions, cross-Region and internet egress are charged — the right answer moves traffic onto a free segment. Paid transfer tools (DataSync, Transfer Acceleration) only buy speed, never lower transfer cost.
- Gateway VPC endpoints for S3 and DynamoDB are free and remove NAT processing for that traffic — but only in the route tables they are associated with, and only for the VPC's own Region; interface endpoints for other services (ECR also needs the S3 gateway endpoint for layers) cost less than NAT only at volume.
- NAT gateways bill hourly plus per GB processed: a single shared NAT for cost-first environments, per-AZ NATs when availability is required. A regional NAT gateway is one ID that expands across AZs and is billed per active AZ plus per GB — simpler, not cheaper.
- A NAT instance is the cheap, self-managed option — built from a current AMI with IP forwarding on, the source/destination check off and the private route pointing at it; wrong whenever managed or highly available is stated.
- CloudFront cuts egress for cacheable content (edge caching, free origin fetch); Global Accelerator is a performance product with a per-GB premium, right for non-cacheable TCP/UDP traffic that needs static IPs or consistent latency.
- VPN is low fixed cost and quick to deploy; standard tunnels carry about 1.25 Gbps, Large Bandwidth Tunnels up to 5 Gbps, and ECMP across BGP VPNs scales further — both levers need a transit gateway. Direct Connect has fixed port costs, a lower per-GB rate at steady volume and weeks of lead time.
- VPC peering has no hourly or processing fees — cheapest for a few stable VPCs; Transit Gateway's per-attachment and per-GB fees buy transitive routing and manageability at scale; PrivateLink exposes one service to many VPCs.
- Throttle where it is cheapest: usage plans for per-client limits (best effort, not a hard cost cap), WAF rate-based rules per IP at the edge, CloudFront caching for repeats. Review existing workloads with Cost Explorer usage types, activated cost allocation tags and VPC Flow Logs before changing anything.
How the exam tests this
SAA-C03 tests this task by describing a traffic path and asking for the most cost-effective change that still meets every stated requirement — the requirements sentence usually decides between the cheap option and the resilient one. The banner question is the NAT bill inflated by S3 or DynamoDB traffic from private subnets, answered by a free gateway VPC endpoint (and its follow-ups on route-table association, services whose own endpoint still relies on S3, and Region scope). Close behind are the single, per-AZ or regional NAT decision (the availability and operations constraints flip the answer), NAT instance setup, VPN versus Direct Connect selected on volume, latency and timeline, VPN bandwidth allocation (transit gateway, ECMP with BGP, Large Bandwidth Tunnels), peering versus Transit Gateway selected on VPC count, CloudFront versus Global Accelerator, throttling with usage plans or WAF rate-based rules, and finding a cost driver with Cost Explorer, cost allocation tags and Flow Logs. Trap patterns to expect: multiplying NAT gateways or switching to a regional NAT gateway to cut a per-GB charge, an interface endpoint for S3 where the free gateway endpoint exists, private DNS offered as a gateway-endpoint fix, Global Accelerator offered as a transfer cost saver, paid transfer tools for a migration with ample bandwidth and time, and single-AZ consolidation despite a high-availability requirement. Annotate each hop as charged or free, then pick the option that moves the biggest charged flow onto a free path without breaking a requirement.
Where these SAA-C03 facts came from
SAA-C03 cheat sheet: your questions
Source
Exam structure, domain weights and scoring on this page come from the official SAA-C03 exam guide.
- AWS Certified Solutions Architect – Associate (SAA-C03) exam guide — Amazon Web Services