Infrastructure Security Day 1
SCS-C03 · Domain 3 · Infrastructure Security (18%) · Day 1 of 5

Edge security: CloudFront, WAF and Shield

A new domain starts at the edge of AWS. Today: why requests should meet CloudFront first, how to lock the origin behind it, how AWS WAF rules block OWASP attacks, bots and floods with rate limits, geography and TLS fingerprints, what Shield Advanced adds, and a few edge topics the exam guide names: S3 CORS, IoT policies and OCSF.

Skill 3.1.1 edge strategySkill 3.1.2 edge protectionSkill 3.1.3 geo, rate limits, fingerprintsSkill 3.1.4 integrations~90 min read + 30 min lab
01

Edge security strategy

Domain 3 starts at the edge: the first AWS component a request touches. Skill 3.1.1 asks you to choose an edge strategy from the threats you expect. The pattern behind almost every right answer is the same: stop attacks as far from your servers as possible, then make sure nobody can go around the edge to reach the origin directly.

Concept profile

CloudFront as the security edge

often confused with Exposing the origin directly
?What is it?

Putting CloudFront (or Global Accelerator for non-HTTP) in front of every internet-facing app, with AWS WAF and Shield on the edge, and locking the origin so it only accepts traffic from that edge.

⚙How does it work?
  • Requests land at hundreds of edge locations, so floods are spread out and absorbed; caching serves repeat requests without touching the origin.
  • Shield Standard blocks common network-layer attacks automatically; WAF filters application-layer requests.
  • Lock the origin: OAC for S3; for an ALB, allow only the com.amazonaws.global.cloudfront.origin-facing managed prefix list in its security group, add a secret custom header checked by an ALB rule, or use a VPC origin so the ALB can stay private.
  • Use Route 53 (also Shield-protected) for DNS, and keep origins in private subnets where possible.
{ }Structure
Users + bots, attackers AWS edge (400+ locations) Shield Standard (L3/L4, free) Advanced: L7 auto-mitigation, SRT AWS WAF web ACL OWASP rules · rate limits · geo · bots CloudFront TLS · geo restriction · signed URLs security headers · caching absorbs load Route 53 and Global Accelerator also sit at the edge with Shield S3 origin Block Public Access on Bucket policy: only this distribution (OAC) ALB / EC2 origin SG allows only CloudFront managed prefix list + secret custom header, or a VPC origin
Layers at the edge, and a locked origin behind them.
⇄Edge-first design vs Exposing the origin directly
Edge-first designOrigin exposed directly
DDoS absorbed byAWS global edgeYour ALB / instances
WAF locationOn CloudFront, before your RegionOn the ALB, in your Region
Bypass riskNone if origin is lockedn/a: origin is the front door
LatencyLower (edge TLS, caching)Higher for far users
Exam hint“reduce attack surface”, “global users”Rarely the best answer
!Common mistakes the exam tests
  • Adding CloudFront but leaving the ALB or bucket publicly reachable: attackers skip the edge and hit the origin.
  • Using an S3 website endpoint as origin and expecting OAC to work: website endpoints are custom origins and can’t use OAC.
  • Relying only on security group IP lists of CloudFront: use the AWS-managed prefix list, which AWS keeps updated.
  • Putting WAF only on the ALB when CloudFront is in front: that works, but blocking at the edge saves origin capacity.
  • Forgetting non-HTTP apps: use Global Accelerator (also Shield-protected) instead of CloudFront.
✓Benefits and use cases
  • Public websites and APIs with global users.
  • Absorbing DDoS before it reaches a Region.
  • One place to apply WAF and TLS rules for many origins.
Think of it like · a castle with an outer wall

Layers keep trouble away from the keep.

AWS conceptFamiliar thing
CloudFront edge≈The outer wall and gatehouses spread around the land
Shield Standard≈The moat that stops crowds of attackers automatically
AWS WAF≈Guards at the gate checking each visitor’s papers
Locked origin≈The keep has no other door; only the gatehouse tunnel leads in
Prefix list≈The keep’s guard only opens for people wearing the gatehouse uniform
Real AWS example · lock an ALB to CloudFront

Find the managed prefix list, then allow only it on port 443.

$ aws ec2 describe-managed-prefix-lists \
    --filters Name=prefix-list-name,Values=com.amazonaws.global.cloudfront.origin-facing \
    --query "PrefixLists[0].PrefixListId" --output text
pl-3b927c52

$ aws ec2 authorize-security-group-ingress --group-id sg-0alb \
    --ip-permissions 'IpProtocol=tcp,FromPort=443,ToPort=443,PrefixListIds=[{PrefixListId=pl-3b927c52}]'

Add an ALB listener rule that forwards only when a secret header (set as a CloudFront custom origin header) is present.

Exam-style scenario

A company serves a global web app from an internet-facing ALB. It has frequent layer 7 floods and wants to reduce the attack surface with the least change, while keeping the ALB as the origin. What should it do?

  1. A. Add more targets and enable ALB access logs.
  2. B. Put CloudFront in front with AWS WAF on the distribution, and restrict the ALB security group to the CloudFront origin-facing managed prefix list plus a custom header check.
  3. C. Move the ALB to a private subnet and use a NAT gateway.
  4. D. Use Network ACLs to block attacker IPs.
Show the worked answer

Answer: B

Edge filtering absorbs and blocks attacks before the Region; locking the ALB prevents bypassing CloudFront.

Why not the others

  • A: Scales the problem instead of stopping it.
  • C: A NAT gateway is for outbound traffic; users couldn’t reach the app.
  • D: NACLs have small rule limits and can’t keep up with changing IPs.
How the exam tests this
  • “Reduce attack surface for a web app”→ CloudFront + WAF in front, lock origin.
  • “Stop users bypassing CloudFront to S3”→ OAC + private bucket.
  • “ALB must accept only CloudFront”→ Managed prefix list + custom header (or VPC origin).
  • “Non-HTTP app needs edge DDoS protection”→ Global Accelerator + Shield.
  • “Free automatic L3/L4 protection”→ Shield Standard.
Must remember
  • Edge first, then lock the origin.
  • S3 → OAC; ALB → prefix list + header or VPC origin.
  • Website endpoints can’t use OAC.
  • Shield Standard is free and automatic.
  • Non-HTTP edge = Global Accelerator.
02

CloudFront security controls

CloudFront has its own security features before WAF even runs: locking the S3 origin with origin access control, letting only paying or signed-in users fetch files with signed URLs and cookies, blocking countries with geographic restrictions, and adding browser protections with security headers.

Concept profile

Origin access control (OAC)

often confused with Origin access identity (OAI)
?What is it?

A CloudFront setting that makes the distribution sign every request to an S3 origin with SigV4, so the bucket can stay private and allow only that distribution.

⚙How does it work?
  • Create an OAC with Sign requests (always) and attach it to the S3 origin.
  • Bucket policy: allow principal cloudfront.amazonaws.com with AWS:SourceArn = the distribution ARN.
  • For SSE-KMS objects, add the same principal and condition to the KMS key policy.
  • Keep Block Public Access on and Object Ownership on Bucket owner enforced.
{ }Structure
Viewer signed URL or signed cookies HTTPS CloudFront checks signature with a trusted key group OAC signs origin request SigV4 S3 bucket private policy: cloudfront service + SourceArn OAC (recommended) vs OAI (legacy) OAC supports SSE-KMS objects, all Regions (including newer opt-in ones) and PUT/DELETE. OAI doesn’t. For SSE-KMS, the KMS key policy must also allow cloudfront.amazonaws.com with the same AWS:SourceArn.
Signed viewer requests in, signed origin requests out.
⇄OAC vs Origin access identity (OAI)
OACOAI (legacy)
SSE-KMS objectsSupportedNot supported
All Regions (new opt-in ones)YesNo
PUT / DELETE to S3YesWorkarounds
Bucket policy principalcloudfront.amazonaws.com + SourceArnSpecial OAI user ARN
StatusRecommendedMigrate away
!Common mistakes the exam tests
  • Choosing OAI for a bucket with SSE-KMS: use OAC and update the key policy.
  • Forgetting the KMS key policy statement: CloudFront gets 403 on SSE-KMS objects.
  • Confusing signed URLs (one file, works with any client) with signed cookies (many files, for example a whole video library or site section).
  • Using CloudFront geo restriction when the rule applies to part of the site: it applies to the whole distribution; use WAF geo match for per-path rules.
  • Thinking geo restriction is 100% accurate: if CloudFront can’t determine the location, it serves the content.
✓Benefits and use cases
  • Private S3 content served only through CloudFront.
  • Paid video or downloads with signed URLs or cookies.
  • Licensing rules that block whole countries.

Signed URLs, geo restriction and security headers

Signed URLs and signed cookies are signed with a private key whose public key is in a trusted key group on the distribution (root-user CloudFront key pairs are legacy). Geographic restrictions allow or block whole countries for the whole distribution and return 403. A response headers policy adds security headers such as Strict-Transport-Security, Content-Security-Policy, X-Frame-Options and X-Content-Type-Options, which help against clickjacking, MIME sniffing and some XSS. Field-level encryption can encrypt chosen form fields at the edge with your public key so only one back-end service can read them.

Think of it like · a cinema

How a cinema controls who sees which film.

AWS conceptFamiliar thing
OAC≈The projection room only accepts reels delivered by the cinema’s own courier
OAI≈An old courier badge that doesn’t work in the new buildings
Signed URL≈A ticket for one film at one time
Signed cookies≈A wristband for the whole festival
Geo restriction≈The cinema refuses everyone from certain countries at the main door
Security headers≈Rules printed on the ticket: no recording, no re-selling
Real AWS example · signed URL for one file

Generate a URL valid for one hour with a key in the trusted key group.

$ aws cloudfront sign \
    --url https://d111111abcdef8.cloudfront.net/reports/q3.pdf \
    --key-pair-id K2JCJMDEHXQW5F \
    --private-key file://private_key.pem \
    --date-less-than 2026-10-10T12:00:00Z
https://d111111abcdef8.cloudfront.net/reports/q3.pdf?Expires=1791633600&Signature=...&Key-Pair-Id=K2JCJMDEHXQW5F

The behavior for /reports/* must have Restrict viewer access set to the trusted key group.

Exam-style scenario

A media company stores SSE-KMS encrypted videos in S3 and serves them through CloudFront. Subscribers must be able to stream any video in the library after signing in, and no one may download directly from S3. What should the company configure?

  1. A. OAI, a public bucket policy and signed URLs.
  2. B. OAC with a bucket policy and KMS key policy for the distribution, and signed cookies issued after sign-in.
  3. C. S3 presigned URLs for each video.
  4. D. CloudFront geo restriction.
Show the worked answer

Answer: B

OAC works with SSE-KMS; signed cookies cover many files at once for signed-in users.

Why not the others

  • A: OAI doesn’t support SSE-KMS and a public bucket allows direct downloads.
  • C: Bypasses CloudFront and needs a URL per object.
  • D: Controls countries, not subscribers.
How the exam tests this
  • “Private bucket only via CloudFront”→ OAC.
  • “SSE-KMS objects behind CloudFront”→ OAC + KMS key policy.
  • “Access to one file for a limited time”→ Signed URL.
  • “Access to many files, users sign in once”→ Signed cookies.
  • “Add HSTS / CSP headers without code”→ Response headers policy.
Must remember
  • OAC: SSE-KMS, all Regions, PUT/DELETE.
  • Policy: cloudfront.amazonaws.com + AWS:SourceArn.
  • Signed URL = one file; cookies = many.
  • Geo restriction: whole distribution, country level.
  • Trusted key groups, not root key pairs.
03

AWS WAF and OWASP Top 10 protection

AWS WAF inspects HTTP(S) requests and decides to allow, block, count or challenge them. It attaches to CloudFront, ALB, API Gateway REST APIs, AppSync, Cognito user pools, App Runner and Verified Access. For skill 3.1.2 you need to know how a web ACL (now also called a protection pack) evaluates rules and which managed rule groups cover the OWASP Top 10.

Concept profile

AWS WAF web ACL

often confused with Security groups / Network Firewall
?What is it?

An ordered list of rules and rule groups plus a default action. Each rule inspects part of the request (IP, headers, URI, query, body, JA3/JA4) and applies an action.

⚙How does it work?
  • Rules run by priority. Allow and Block end evaluation; Count only records and adds labels; CAPTCHA and Challenge end it only if the client fails.
  • AWS managed rule groups: Core rule set (CRS, broad OWASP coverage), Known bad inputs, SQL database, Linux / POSIX / Windows / PHP, Amazon IP reputation, Anonymous IP, Bot Control, Account takeover prevention (ATP), Account creation fraud prevention (ACFP).
  • Also custom rules, IP sets, regex pattern sets and third-party rule groups from AWS Marketplace.
  • Capacity is measured in WCUs; above 1,500 per web ACL costs more. Body inspection: ALB and AppSync first 8 KB; CloudFront and API Gateway 16 KB by default, up to 64 KB.
  • Log to CloudWatch Logs, S3 or Firehose (names start with aws-waf-logs-).
{ }Structure
Priority 0IP set allow listAllow → stopPriority 1Rate-based ruleBlock → stopPriority 2Core rule setBlock / labelsPriority 3Bot ControlCount → go onDefaultWeb ACL defaultAllow or BlockRules run in priority order. Allow and Block end evaluation, and so do failed CAPTCHA or Challenge.Count only adds labels and metrics; later rules can match those labels.If nothing ends evaluation, the web ACL default action decides.Capacity: above 1,500 WCUs costs extra. Body inspection: ALB 8 KB, CloudFront 16 KB (up to 64 KB).
Priority order, terminating actions and labels.
⇄WAF web ACL vs Security groups / Network Firewall
AWS WAFSecurity groups / Network Firewall
Layer7 (HTTP)3/4 (SG); 3–7 for VPC traffic (Network Firewall)
Sees URI, headers, bodyYesSG no; Network Firewall can inspect some, not HTTP semantics like WAF
Attach toCloudFront, ALB, API Gateway, AppSync…ENIs (SG); VPC subnets (Network Firewall)
OWASP rulesManaged rule groupsNo
Exam hint“SQL injection”, “XSS”, “bad bots”“port”, “protocol”, “domain egress filtering”
!Common mistakes the exam tests
  • Putting a broad Allow rule at priority 0 that matches everything: later Block rules never run.
  • Deploying a new managed rule group straight in Block: start in Count, check logs, then override to Block.
  • Forgetting oversize handling: requests with bodies larger than the inspection limit can slip past body rules unless you choose Match for the Block rule.
  • Attaching WAF to an NLB: not supported. Use an ALB or CloudFront.
  • Using WAF alone for DDoS at layers 3/4: that’s Shield.
✓Benefits and use cases
  • Block SQL injection and XSS attempts.
  • Stop credential stuffing on login pages (ATP).
  • Block traffic from anonymising services or known bad IPs.
Think of it like · airport security lanes

Each passenger goes through checks in order.

AWS conceptFamiliar thing
Rule priority≈The order of checkpoints: ID desk, scanner, sniffer dog
Allow / Block≈‘Go straight to the gate’ or ‘you can’t fly’ ends the checks
Count + labels≈A sticker on your boarding pass that later checkpoints can read
Managed rule group≈A security manual written by experts, updated for new threats
Default action≈What happens to anyone who passes every checkpoint without a decision
WCU≈How many staff hours the checkpoints cost
Real AWS example · a web ACL with managed rules in count first

Core rule set overridden to Count while testing.

{ "Name": "AWS-CRS", "Priority": 2,
  "Statement": { "ManagedRuleGroupStatement": {
      "VendorName": "AWS", "Name": "AWSManagedRulesCommonRuleSet",
      "RuleActionOverrides": [] } },
  "OverrideAction": { "Count": {} },
  "VisibilityConfig": { "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true, "MetricName": "crs" } }

When logs show no false positives, change OverrideAction to {"None": {}} so the group’s own Block actions apply.

Exam-style scenario

A company’s API behind API Gateway is hit by SQL injection attempts and requests from known malicious IPs. The team wants protection quickly with minimal rule writing, and to avoid blocking real users by mistake. What should it do?

  1. A. Write custom regex rules and deploy them in Block.
  2. B. Attach a web ACL with the SQL database, Core rule set and Amazon IP reputation managed rule groups, first in Count mode, then switch to Block after reviewing logs.
  3. C. Use security groups to block SQL keywords.
  4. D. Enable Shield Advanced only.
Show the worked answer

Answer: B

Managed rule groups cover these threats with no rule writing; Count mode first avoids false positives.

Why not the others

  • A: Slow to build, and Block without testing risks false positives.
  • C: Security groups can’t inspect HTTP content.
  • D: Shield is for DDoS, not SQL injection.
How the exam tests this
  • “SQL injection / XSS”→ WAF managed rule groups (SQLi, CRS).
  • “Credential stuffing on login”→ ATP managed rule group.
  • “Test rules safely”→ Count mode, check logs.
  • “Large bodies skip inspection”→ Oversize handling: Match (or raise body limit on CloudFront).
  • “Use a vendor’s WAF rules”→ Marketplace managed rule groups.
Must remember
  • Terminating: Allow, Block (+ failed CAPTCHA/Challenge).
  • Count = labels + metrics, keeps going.
  • Body limit: ALB 8 KB, CloudFront 16→64 KB.
  • > 1,500 WCUs costs extra.
  • Not on NLB.
04

Geography, rate limiting and fingerprinting

Skill 3.1.3 lists the edge controls by name: geography, geolocation, rate limiting and client fingerprinting. All four live in AWS WAF (with CloudFront geo restriction as the simple country option). They are the go-to answer for brute force, scraping and bots that rotate IP addresses.

Concept profile

WAF rate-based rule

often confused with AWS WAF Bot Control
?What is it?

A rule that counts requests per aggregation key over a sliding evaluation window and applies an action (usually Block, CAPTCHA or Challenge) to keys that exceed the limit.

⚙How does it work?
  • Evaluation window: 60, 120, 300 (default) or 600 seconds; lowest limit 10 requests.
  • Aggregate by IP, forwarded IP (from a header like X-Forwarded-For), or custom keys such as header, cookie, query argument, HTTP method, label namespace or JA3/JA4 fingerprint, or use a constant to count all matching requests together.
  • Add a scope-down statement to count only some requests, for example /login POSTs.
  • Rate-based rules can’t be nested inside other statements.
{ }Structure
Geo matchcountry codes+ region labels(e.g. US-WA)block or allowRate-basedlimit ≥ 10 reqwindow 60/120/300/600 sper keyAggregationIP · forwarded IPheader · cookiequery arg · labelJA3 / JA4FingerprintJA3 / JA4 TLShash of ClientHello; CloudFrontand ALB onlyBot Controlcommon botstargeted botsCAPTCHA orChallengeCombine them: rate-limit /login per JA4 fingerprint, only for countries you serve, and challenge bots.
Five edge controls you can combine.
⇄Rate-based rule vs AWS WAF Bot Control
Rate-based ruleBot Control
DetectsToo many requests per keyKnown bot signatures and behaviour
CostStandard WAF pricingExtra fee
Good forBrute force, simple floods, API quotasScrapers, credential bots, browser automation
SignalsCount per IP / header / fingerprintUser agent, TLS, browser checks, tokens
ResponseBlock / CAPTCHA / ChallengeLabels + actions, targeted rate limits
!Common mistakes the exam tests
  • Aggregating by IP behind a proxy or CDN that isn’t CloudFront: every request has the proxy’s IP. Use forwarded IP (with care: headers can be spoofed).
  • Expecting a 1-second rate limit: the shortest window is 60 seconds.
  • Using CloudFront geo restriction for “block Russia only on /admin”: that needs a WAF geo match rule with a scope-down on the path.
  • Matching JA3/JA4 on API Gateway: fingerprints are available on CloudFront and ALB only, and only with exact string match.
  • Using CAPTCHA for API clients: they can’t solve it. Use Challenge for browsers, rate limits for APIs.
✓Benefits and use cases
  • Limit login attempts per IP or per fingerprint.
  • Allow only countries where the business operates.
  • Slow down scrapers that rotate IPs but reuse one TLS client.

Geo match, fingerprints and challenges

A geo match statement matches the client country (from the source IP, or a forwarded IP header) and adds labels with the country and, where known, the region (for example awswaf:clientip:geo:region:US-WA), so you can block by country or by state, or only for some paths. JA3 and JA4 fingerprints are hashes of the TLS Client Hello; the same bot software produces the same fingerprint even as its IPs change. Find a client’s fingerprint in the WAF logs. CAPTCHA asks a person to solve a puzzle; Challenge runs a silent browser check. Both issue a token so a good client isn’t asked again until it expires.

Think of it like · a nightclub door

How bouncers keep the club safe.

AWS conceptFamiliar thing
Geo match≈Only people with local ID cards get in, and only adults on the upper floor
Rate-based rule≈Nobody gets more than 10 tries at the door in 5 minutes
Forwarded IP≈Reading the name on a guest’s ticket instead of the taxi driver’s
JA3/JA4≈Recognising someone by their walk, even in a new jacket (new IP)
Challenge≈A quick question at the door only a real guest could answer
Bot Control≈A security firm that knows the faces of known troublemakers
Real AWS example · rate limit login by JA4 fingerprint

100 POSTs to /login per fingerprint per 5 minutes, then block.

{ "Name": "login-rate-ja4", "Priority": 1, "Action": { "Block": {} },
  "Statement": { "RateBasedStatement": {
    "Limit": 100, "EvaluationWindowSec": 300, "AggregateKeyType": "CUSTOM_KEYS",
    "CustomKeys": [ { "JA4Fingerprint": { "FallbackBehavior": "MATCH" } } ],
    "ScopeDownStatement": { "ByteMatchStatement": {
      "SearchString": "/login", "FieldToMatch": { "UriPath": {} },
      "TextTransformations": [{ "Priority": 0, "Type": "NONE" }],
      "PositionalConstraint": "STARTS_WITH" } } } },
  "VisibilityConfig": { "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true, "MetricName": "loginja4" } }

Check field names against the WAF API reference; the idea is what the exam tests.

Exam-style scenario

An e-commerce site behind CloudFront sees a credential-stuffing attack from thousands of IP addresses that each send only a few requests, but they all use the same automation tool. Which control best limits the attack with low effort?

  1. A. A rate-based rule aggregated by IP address.
  2. B. A rate-based rule on /login aggregated by JA4 fingerprint, plus the ATP managed rule group.
  3. C. CloudFront geo restriction.
  4. D. A security group rule.
Show the worked answer

Answer: B

Per-IP counts stay low, but the shared TLS fingerprint lets WAF count them together; ATP adds credential-stuffing detection.

Why not the others

  • A: Each IP stays under the limit.
  • C: Attack sources are spread over many countries, and real customers would be blocked.
  • D: CloudFront traffic doesn’t reach a security group you control at the edge.
How the exam tests this
  • “Brute force on login”→ Rate-based rule with scope-down on the path.
  • “Clients behind a proxy share one IP”→ Aggregate by forwarded IP or a header.
  • “Block a country on part of the site”→ WAF geo match + path scope-down.
  • “Bots rotate IPs”→ JA3/JA4 fingerprint aggregation.
  • “Silent browser verification”→ Challenge action.
Must remember
  • Windows: 60 · 120 · 300 · 600 s; min limit 10.
  • Keys: IP, forwarded IP, headers, cookies, labels, JA3/JA4.
  • JA3/JA4: CloudFront + ALB only.
  • Geo match adds country + region labels.
  • CAPTCHA = person; Challenge = silent.
05

AWS Shield and Firewall Manager

DDoS attacks try to exhaust capacity rather than steal data. Shield Standard protects every account for free at layers 3 and 4. Shield Advanced adds layer 7 automation, a response team, cost protection and visibility, and Firewall Manager rolls these protections out across an organization.

Concept profile

AWS Shield Advanced

often confused with AWS Shield Standard
?What is it?

A paid subscription that adds expanded DDoS protection to the resources you choose: CloudFront distributions, Route 53 hosted zones, Global Accelerator accelerators, Elastic Load Balancers and EC2 Elastic IPs.

⚙How does it work?
  • Layer 7 DDoS protection: today this is the AWS WAF Anti-DDoS managed rule group (AWSManagedRulesAntiDDoSRuleSet, 50 WCUs). It learns the traffic baseline in minutes, reacts in seconds, and can Challenge or Block suspicious requests at Low, Medium or High sensitivity. Shield Advanced includes it; it does not need Route 53 health checks. The older Shield Advanced “automatic application layer mitigation” (a 150-WCU rule group) is being upgraded to it from 25 October 2026 and retires on 29 January 2027.
  • Health-based detection: associate Route 53 health checks so detection is faster and has fewer false positives (any resource type except hosted zones).
  • Shield Response Team (SRT) 24/7, if you also have Business or Enterprise Support; proactive engagement means the SRT contacts you when the health check goes unhealthy during an event.
  • Cost protection: service credits for scaling charges caused by a DDoS attack. Standard WAF fees on protected resources are included.
{ }Structure
Shield StandardFree, automatic, every accountNetwork + transport (L3/L4)SYN floods, UDP reflectionBest on CloudFront, Route 53,Global AcceleratorNo response team, no creditsPair with WAF for L7Shield Advanced (paid subscription)Protects CloudFront, Route 53 zones, GA, ELB, EIPsL7: WAF Anti-DDoS managed rule group includedHealth-based detection (Route 53 health checks)SRT 24/7 (needs Business/Enterprise Support)Proactive engagement: SRT calls youCost protection: service creditsStandard WAF fees covered on protected resourcesRoll out across accounts with AWS Firewall Manager
Free baseline vs paid expertise.
⇄Shield Advanced vs AWS Shield Standard
Shield AdvancedShield Standard
PriceMonthly subscription (per organization payer)Free
Layers3, 4 and 7 (with WAF)3 and 4
Response teamSRT (Business/Enterprise Support)No
Cost protectionService creditsNo
Attack visibilityDetailed metrics and reportsBasic
!Common mistakes the exam tests
  • Expecting SRT help without Business or Enterprise Support.
  • Forgetting proactive engagement needs health-based detection (Route 53 health checks) first.
  • Thinking Shield Advanced replaces WAF: it uses WAF for layer 7.
  • Protecting an EC2 instance without an Elastic IP: Shield Advanced protects EC2 through its Elastic IP.
  • Configuring each account by hand: use Firewall Manager (needs AWS Organizations and AWS Config).
✓Benefits and use cases
  • Business-critical sites that can’t afford DDoS downtime.
  • Teams that want experts on call during attacks.
  • Protection from surprise bills during attacks.

AWS Firewall Manager

Firewall Manager centrally applies security policies across accounts in AWS Organizations: WAF web ACLs, Shield Advanced protections, security group policies (common groups, audits of overly open rules), Network Firewall, Route 53 Resolver DNS Firewall, network ACLs and third-party firewalls. It needs a delegated administrator account and AWS Config enabled in member accounts, and it automatically protects new accounts and resources that match the policy scope (for example by tag or resource type).

Think of it like · a city’s flood defences

Keeping floods away from homes.

AWS conceptFamiliar thing
Shield Standard≈The free sea wall the city builds for everyone
Shield Advanced≈A premium plan: flood experts on call and money back for pump costs
Anti-DDoS managed rule group≈Sandbags placed automatically where the water is rising, within seconds
Health-based detection≈Water sensors in your basement that tell the experts it’s getting serious
Firewall Manager≈The city planner who makes every new district get the same defences
Real AWS example · protect a distribution with Shield Advanced

Add protection, then turn on automatic L7 mitigation.

$ aws shield create-protection --name web-cf \
    --resource-arn arn:aws:cloudfront::111122223333:distribution/E2EXAMPLE

# Layer 7: add the Anti-DDoS managed rule group as the first rule of the web ACL
{ "Name": "anti-ddos", "Priority": 0, "OverrideAction": { "None": {} },
  "Statement": { "ManagedRuleGroupStatement": {
      "VendorName": "AWS", "Name": "AWSManagedRulesAntiDDoSRuleSet" } } }

$ aws shield associate-health-check --protection-id a1b2c3 \
    --health-check-arn arn:aws:route53:::healthcheck/abcd-1234

Watch its labels in Count first, then let it Challenge or Block, starting at Low sensitivity. The health check is still needed for health-based detection and proactive engagement. (Older material shows enable-application-layer-automatic-response; that feature is being retired in favour of this rule group.)

Exam-style scenario

A gaming company with 40 AWS accounts runs public ALBs and CloudFront distributions. It wants 24/7 DDoS experts, credits for attack-related scaling costs, and the same protections applied automatically to every new account. It has Enterprise Support. What should it do?

  1. A. Rely on Shield Standard and CloudWatch alarms.
  2. B. Subscribe to Shield Advanced and use AWS Firewall Manager Shield Advanced and WAF policies across the organization, with Route 53 health checks for proactive engagement.
  3. C. Deploy WAF manually in each account.
  4. D. Use Network Firewall in each VPC.
Show the worked answer

Answer: B

Shield Advanced gives SRT and cost protection; Firewall Manager applies protections to existing and new accounts.

Why not the others

  • A: No SRT, no credits, no central rollout.
  • C: No DDoS team or credits, and manual work per account.
  • D: Network Firewall filters VPC traffic; it isn’t a DDoS service.
How the exam tests this
  • “Free L3/L4 DDoS protection”→ Shield Standard.
  • “DDoS experts on call”→ Shield Advanced + Business/Enterprise Support.
  • “Refund scaling costs from attack”→ Shield Advanced cost protection.
  • “Layer 7 DDoS, react in seconds, challenge suspicious clients”→ WAF Anti-DDoS managed rule group.
  • “SRT should call us”→ Proactive engagement + health checks.
  • “Same WAF/Shield policies in all accounts”→ Firewall Manager.
Must remember
  • Advanced protects CF · R53 · GA · ELB · EIP.
  • SRT needs Business/Enterprise support.
  • Proactive engagement needs health checks.
  • L7 DDoS: Anti-DDoS managed rule group (50 WCU, Challenge/Block, no health check needed).
  • Firewall Manager needs Organizations + Config.
06

S3 CORS, IoT policies and edge integrations

Skills 3.1.2 and 3.1.4 also name some smaller edge topics: S3 CORS, AWS IoT policies, third-party WAF rules and ingesting edge logs in OCSF format. Each is one or two exam questions, usually about a misunderstanding.

Concept profile

S3 CORS configuration

often confused with S3 bucket policy
?What is it?

Rules on a bucket that tell browsers which other web origins may make cross-origin requests to it, with which methods and headers. S3 answers the browser’s preflight OPTIONS request with the matching Access-Control-Allow-* headers.

⚙How does it work?
  • Each rule lists AllowedOrigins, AllowedMethods, AllowedHeaders, ExposeHeaders and MaxAgeSeconds.
  • Only browsers enforce CORS; scripts and servers ignore it.
  • Access is still decided by IAM, bucket policies, ACLs and Block Public Access.
  • With CloudFront in front, forward the Origin header (origin request policy) and use a response headers policy or let S3 return the CORS headers.
{ }Structure
Browser page app.example.com JavaScript wants to PUT to the bucket OPTIONS (preflight): Origin, method Access-Control-Allow-Origin … S3 bucket CORS rules AllowedOrigins: app.example.com AllowedMethods: GET, PUT AllowedHeaders, MaxAgeSeconds CORS is not an access control It only tells browsers which other sites’ scripts may read responses. Bucket policies, IAM and Block Public Access still decide who can access objects. Avoid AllowedOrigins "*" with write methods.
CORS answers ‘may this page’s script read the response?’, not ‘who may access the bucket?’.
⇄S3 CORS vs S3 bucket policy
S3 CORSS3 bucket policy
Enforced byBrowsersS3 itself
ControlsWhich web origins’ scripts may use responsesWhich principals may perform actions
Stops a curl requestNoYes
Typical errorBrowser console CORS error403 AccessDenied
Security valueLimits cross-site use in browsersReal access control
!Common mistakes the exam tests
  • Treating CORS as protection against data theft: anyone can call S3 directly without a browser.
  • Setting AllowedOrigins: * together with PUT or DELETE on a bucket that accepts uploads.
  • Fixing a CORS error by making the bucket public: the bucket policy wasn’t the problem.
  • Forgetting to forward the Origin header through CloudFront, so cached responses lack CORS headers.
✓Benefits and use cases
  • A single-page app on one domain uploading to S3 with presigned URLs.
  • Fonts or images served to several of your own domains.
  • Restricting which of your sites’ scripts can use an API.

IoT policies, third-party rules and OCSF

AWS IoT Core policies are attached to a device’s X.509 certificate (or Cognito identity) and allow actions such as iot:Connect, iot:Publish, iot:Subscribe and iot:Receive on specific client IDs and topics. Use policy variables like ${iot:Connection.Thing.ThingName} so each device can only use its own client ID and topics; a policy with iot:* on * lets one stolen device impersonate every other. Third-party WAF rules come as managed rule groups from AWS Marketplace sellers and are added to a web ACL like AWS rule groups. OCSF (Open Cybersecurity Schema Framework) is the common format used by Amazon Security Lake, which can collect AWS WAF logs natively and accepts custom sources (for example a third-party CDN or firewall) as OCSF records in Parquet, so you can query all edge logs together.

Think of it like · an apartment building

Different rules for different visitors.

AWS conceptFamiliar thing
CORS≈A note telling visitors’ phones which neighbours’ apps may read the building’s notices; people without phones ignore it
Bucket policy≈The real door lock
IoT policy variables≈Each resident’s key opens only their own flat and mailbox
iot:* on *≈One master key handed to every resident
OCSF≈Every security guard writes reports in the same template so they can be compared
Real AWS example · IoT policy scoped to the device’s own topics

Each thing connects only with its own name and publishes only under its own topic.

{ "Version": "2012-10-17", "Statement": [
  { "Effect": "Allow", "Action": "iot:Connect",
    "Resource": "arn:aws:iot:eu-west-1:111122223333:client/${iot:Connection.Thing.ThingName}" },
  { "Effect": "Allow", "Action": "iot:Publish",
    "Resource": "arn:aws:iot:eu-west-1:111122223333:topic/sensors/${iot:Connection.Thing.ThingName}/*" } ]}

The certificate must be attached to the thing for the thing-name variable to resolve.

Exam-style scenario

A developer gets a CORS error when a web app at https://app.example.com uploads files to an S3 bucket with presigned PUT URLs. A teammate suggests making the bucket public. What is the correct fix?

  1. A. Make the bucket public and turn off Block Public Access.
  2. B. Add a CORS rule allowing origin https://app.example.com with the PUT method and needed headers.
  3. C. Add a bucket policy allowing s3:PutObject to everyone.
  4. D. Enable S3 Transfer Acceleration.
Show the worked answer

Answer: B

The browser needs S3 to return CORS headers for that origin and method; presigned URLs already grant the access.

Why not the others

  • A: Doesn’t fix CORS and creates a data exposure.
  • C: Same problem: access wasn’t the issue.
  • D: Speed feature, unrelated.
How the exam tests this
  • “Browser CORS error on S3”→ Add a CORS rule, not public access.
  • “Each device uses only its own topics”→ IoT policy variables.
  • “Vendor-maintained WAF rules”→ Marketplace managed rule groups.
  • “Normalise edge logs from many tools”→ OCSF in Security Lake.
  • “CORS stops non-browser clients?”→ No.
Must remember
  • CORS is enforced by browsers only.
  • Access = IAM / bucket policy, not CORS.
  • IoT policies attach to certificates.
  • Use ${iot:Connection.Thing.ThingName}.
  • Security Lake speaks OCSF (Parquet).
07

Cheatsheet extras: DDoS attack types, the resiliency playbook and API Gateway throttling

Your cheat sheet spends a lot of space on DDoS (“worth quite a few points in the exam”) and on API Gateway throttling and caching. Sections 01–05 showed the AWS tools. This section fills the gaps: the attack types by name, the five-step resiliency playbook from the AWS DDoS whitepaper, how API Gateway protects itself with throttling, and perfect forward secrecy.

Older material (the cheat sheet included) says OAI, DRT (DDoS Response Team), “WAF only works with CloudFront, ALB and API Gateway” and “WAF sandwich”. Today it is OAC, the Shield Response Team (SRT), and WAF also protects AppSync, Cognito user pools, App Runner, Amplify and Verified Access. A self-managed “WAF sandwich” of EC2 appliances between two load balancers is a legacy pattern; managed AWS WAF scales by itself.
Concept profile

DDoS attack types

often confused with a legitimate traffic spike (flash crowd)
?What is it?

A distributed denial of service attack uses many sources (botnets, hijacked IoT devices, open servers) to make your application unavailable. Attacks are grouped by the OSI layer they hit: infrastructure layer (L3/L4) or application layer (L7).

⚙How does it work?
  • UDP reflection / amplification (L3/L4): the attacker spoofs your IP and sends small requests to open NTP, DNS, SSDP, memcached or CLDAP servers. They send much bigger replies to you (NTP: 64-byte request, ~3,456-byte reply).
  • SYN flood (L4): many TCP SYNs with no final ACK fill the half-open connection table.
  • HTTP flood (L7): many real-looking requests to an expensive page.
  • Cache-busting (L7): random query strings force CloudFront to go to the origin every time.
  • Slowloris (L7): keeps many connections open with partial requests.
  • WordPress XML-RPC (pingback) flood, scraping, credential stuffing.
{ }Structure
Infrastructure layer (L3/L4) UDP reflection: NTP, DNS, SSDP, memcached SYN flood, UDP flood, packet floods Huge volume (Gbps, packets per second) Absorbed by Shield Standard (free, always on) CloudFront + Route 53 edge (only well-formed TCP) ELB, Global Accelerator, Auto Scaling Application layer (L7) HTTP flood, cache-busting, Slowloris XML-RPC pingback, bots, credential stuffing Lower volume, looks like real users Filtered by AWS WAF: rate-based, Bot Control, IP sets CloudFront caching, closes slow connections Shield Advanced automatic L7 mitigation + SRT
Volume attacks are absorbed at the edge; request attacks are filtered by WAF rules.
⇄DDoS attack vs legitimate traffic spike
DDoS attackFlash crowd
SourcesMany odd IPs, spoofed sources, few countries or ASNsReal users spread like your normal audience
PatternSame URL, random query strings, no cookies, odd user agentsNormal page mix, real sessions
Flow logs showUDP from source port 53/123/1900 (reflection)TCP 443 from clients
Right answerShield, WAF rules, SRT engagementScale out, cache more
BillingShield Advanced cost protection can credit scaling chargesYou pay for the scale
!Common mistakes the exam tests
  • Choosing GuardDuty or Inspector to “block” a DDoS: they detect or scan, they don’t mitigate.
  • Choosing a security group deny: SGs have no deny, and botnets use thousands of IPs.
  • Putting WAF on the ALB but leaving the ALB open to the internet: attackers skip CloudFront. Lock the origin.
  • Thinking Shield Standard gives the SRT or cost protection: those are Shield Advanced only.
  • Expecting VPC flow logs or WAF to do deep packet inspection: use Network Firewall or a GWLB appliance (Day 2).
✓Benefits and use cases
  • Name the attack in a question stem, then pick the layer’s defence.
  • Read flow logs to spot reflection (source port 53 or 123 floods).
  • Explain to auditors why the design survives an attack.

The DDoS resiliency playbook (from the whitepaper)

StepWhat it meansAWS building blocks
1. Reduce the attack surfaceFewer things reachable from the internetPrivate subnets, Session Manager instead of open SSH/RDP, SGs that only allow the ALB, origin locked to CloudFront (OAC, prefix list + custom header)
2. Be ready to scale to absorbSpread and grow to buy timeCloudFront, Route 53, Global Accelerator, ELB, Auto Scaling; choose Regions near large internet exchanges
3. Safeguard exposed resourcesFilter what must stay publicAWS WAF (rate-based, managed rules, geo, IP sets), CloudFront geo restriction, Route 53 private hosted zones for internal names
4. Learn what normal looks likeBaselines and alarmsCloudWatch alarms on WAF BlockedRequests, Shield Advanced DDoSDetected and DDoSAttackBitsPerSecond, flow logs
5. Plan for attacksRunbooks and contacts readyShield Advanced + Business/Enterprise support for the SRT, proactive engagement with Route 53 health checks, tested runbooks
Concept profile

API Gateway throttling and caching

often confused with AWS WAF rate-based rules
?What is it?

Built-in limits that stop an API (and its backend) from being overwhelmed. Requests over the limit get HTTP 429 Too Many Requests. A stage cache can answer repeated requests without calling the backend.

⚙How does it work?
  • Token bucket. Account default per Region: 10,000 requests per second steady rate and a 5,000 request burst, shared by all APIs (quota increase on request).
  • Narrower limits on top: stage and method throttling, and per-client limits with usage plans + API keys.
  • API keys identify and meter clients; they are not for authorization. Use IAM (SigV4), Cognito or a Lambda authorizer.
  • Caching per stage: TTL default 300 s, maximum 3600 s, 0 turns it off. Cache data can be encrypted, and per-key invalidation can require authorization.
  • Resource policies (execute-api:Invoke) limit callers by account, IP (aws:SourceIp) or VPC endpoint (aws:SourceVpce). Private APIs are reachable only through an interface endpoint.
⇄API Gateway throttling vs AWS WAF rate-based rule
API Gateway throttlingWAF rate-based rule
Counts byAccount, stage, method, or API keySource IP, forwarded IP, header, label and more
Over the limit429 for anyone over the bucketBlock/Count/CAPTCHA only the offending key (e.g. one IP)
Protects againstBackend overload, noisy clientsOne IP flooding, brute force
Exam hint“per-customer quota”, “429”“block IPs that send too many requests”
!Common mistakes the exam tests
  • Using API keys as the security control: anyone with the key can call; add a real authorizer.
  • Expecting account throttling to stop one abusive IP: it throttles everyone. Use a WAF rate-based rule.
  • Caching responses that contain per-user data without the user in the cache key.
  • Forgetting that a private API needs both a resource policy and an interface endpoint (Data Protection Day 4).
✓Benefits and use cases
  • Tiered partner plans (Gold 1,000 rps, Free 10 rps).
  • Protect a slow Lambda or database backend.
  • Lower latency and cost with stage caching.

Perfect forward secrecy at the edge

Perfect forward secrecy (PFS) means each TLS session uses a fresh, temporary key. If someone steals the server’s private key later, recorded old sessions still can’t be decrypted. You get it by choosing a TLS security policy whose ciphers use ECDHE key exchange, on CloudFront (viewer and origin settings) and on ALB/NLB TLS listeners. Current predefined policies (for example ELBSecurityPolicy-TLS13-1-2-2021-06 and CloudFront TLSv1.2_2021) already prefer ECDHE. Older material says “pick the 2016-08 policy”; today pick a TLS 1.2/1.3 policy.

Think of it like · a busy restaurant on opening night

The restaurant must stay open while pranksters try to jam it.

AWS conceptFamiliar thing
Reflection attack≈Someone orders 100 pizzas to your address in your name
SYN flood / Slowloris≈People who book every table and never show up
HTTP flood≈A crowd ordering the most complicated dish again and again
Reduce attack surface≈Lock the kitchen back door; one front entrance only
Scale to absorb≈Open extra rooms and call in more waiters
API Gateway throttling≈The kitchen takes only so many orders per minute and says “please wait” (429)
Usage plan + API key≈Loyalty cards with a daily order limit; they don’t prove who you are
Real AWS example · stage throttling, cache and a resource policy

Limit the prod stage, cache GET responses for 5 minutes, and accept calls only from one VPC endpoint.

$ aws apigateway update-stage --rest-api-id a1b2c3 --stage-name prod --patch-operations \
  op=replace,path=/*/*/throttling/rateLimit,value=500 \
  op=replace,path=/*/*/throttling/burstLimit,value=1000 \
  op=replace,path=/cacheClusterEnabled,value=true \
  op=replace,path=/cacheClusterSize,value=0.5 \
  op=replace,path=/*/*/caching/ttlInSeconds,value=300 \
  op=replace,path=/*/*/caching/dataEncrypted,value=true

{ "Version": "2012-10-17",
  "Statement": [
    { "Effect": "Deny", "Principal": "*", "Action": "execute-api:Invoke",
      "Resource": "execute-api:/*",
      "Condition": { "StringNotEquals": { "aws:SourceVpce": "vpce-0abc1234" } } },
    { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke",
      "Resource": "execute-api:/*" } ] }

Clients above 500 rps (burst 1,000) get 429. The Deny statement blocks any call that doesn’t arrive through vpce-0abc1234.

Exam-style scenario

A public REST API is used by 40 partner companies. One partner’s buggy script sends 3,000 requests per second and slows the API for everyone. The company wants each partner limited to 200 requests per second, with the least effort. What should it do?

  1. A. Lower the account-level throttle to 200 requests per second.
  2. B. Create a usage plan with a 200 rps throttle, issue an API key per partner and require the key on the methods.
  3. C. Add a WAF geo match rule for the partner’s country.
  4. D. Subscribe to Shield Advanced.
Show the worked answer

Answer: B

Usage plans throttle per API key, so each partner gets its own 200 rps limit. Keep a real authorizer as well; keys only identify and meter.

Why not the others

  • A: Limits all partners together to 200 rps.
  • C: Blocks a whole country, including good partners.
  • D: This is a client bug, not a DDoS; Shield doesn’t enforce per-client quotas.
How the exam tests this
  • “Spoofed source, NTP/DNS replies flood the site”→ UDP reflection, L3/L4: Shield + CloudFront/ELB.
  • “Random query strings bypass the cache”→ Cache-busting: WAF rules, cache policy that ignores junk query strings.
  • “Clients receive 429”→ API Gateway throttling (or a WAF rate rule that returns 429).
  • “Different limits per customer”→ Usage plans + API keys.
  • “Past sessions safe if the private key leaks”→ PFS: ECDHE security policy on CloudFront/ELB.
  • “Refund for scaling during an attack”→ Shield Advanced cost protection.
Must remember
  • L3/L4: reflection, SYN flood → Shield + edge. L7: HTTP flood → WAF.
  • Playbook: reduce surface · scale · safeguard · baseline · plan.
  • API GW account limit: 10,000 rps, 5,000 burst, per Region; over → 429.
  • Cache TTL: default 300 s, max 3600 s, 0 = off.
  • API keys meter; they don’t authorize.
  • PFS = ECDHE ciphers in the TLS security policy.
08

Lecture summary map

Day 1 on one screen.

1. Mind map

① Edge strategyEdge firstLock the originGA for non-HTTP② CloudFrontOAC (SSE-KMS)Signed URL vs cookiesGeo: whole dist.③ AWS WAFPriority + labelsManaged rule groupsCount before Block④ Rate + geo + JA4Window 60–600 sMin limit 10JA3/JA4: CF + ALB⑤ Shield + FMSStd free L3/L4Adv: SRT, creditsFMS: org-wide⑥ CORS, IoT, OCSFCORS ≠ accessIoT policy variablesSecurity Lake OCSFInfra Security 1edge security
Tap a branch to jump back to that part of the lecture. Try redrawing this map from memory on paper.

2. Match the requirement to the control

“Users must not bypass CloudFront to S3”→Origin access control (OAC)“ALB should accept only CloudFront”→CloudFront prefix list + header“Protect against SQL injection / XSS”→WAF managed rule groups“Limit login attempts per client”→Rate-based rule (scope-down)“Block a country for one path only”→WAF geo match (not CF geo)“Bots rotate IPs, same TLS client”→JA3 / JA4 fingerprint“24/7 DDoS experts, cost credits”→Shield Advanced“Same WAF rules in all accounts”→AWS Firewall Manager
The left column is the exam wording; the right column is the answer.

3. “If the question says… pick…”

Stop direct access to S3 behind CloudFrontOAC + private bucket
SSE-KMS objects return 403 via CloudFrontAdd CloudFront to the KMS key policy
Many paid files after one sign-inSigned cookies
SQL injection, XSS, bad inputsWAF managed rule groups
Try new rules without breaking usersCount mode, then Block
Login brute forceRate-based rule with scope-down
Attack spreads over many IPs, one toolJA3/JA4 aggregation + ATP
Block a state or a country on one pathWAF geo match labels
DDoS experts and cost creditsShield Advanced
Protections in every account automaticallyFirewall Manager
Browser CORS errorCORS rule, never public bucket
One device must not impersonate othersIoT policy variables
Day 1 in one sentence

Meet every request at the edge, filter it with WAF and Shield, and lock the origin so the edge is the only way in.

09

Must-remember cheat sheet

1. Lock origin: S3 OAC, ALB prefix list + header.
2. OAC: SSE-KMS, all Regions, PUT/DELETE.
3. KMS key policy must allow cloudfront.amazonaws.com.
4. Signed URL = one file; cookies = many.
5. CF geo restriction: country, whole distribution.
6. WAF terminating: Allow, Block; Count adds labels.
7. New managed rules: Count first.
8. Body limit: ALB 8 KB; CloudFront 16→64 KB.
9. Rate windows 60/120/300/600 s, min 10.
10. JA3/JA4 on CloudFront + ALB.
11. Geo match: country + region labels.
12. Shield Std: free, L3/L4.
13. SRT needs Business/Enterprise support.
14. Proactive engagement needs health checks.
15. FMS needs Organizations + Config.
16. CORS: browsers only, not access control.
17. DDoS L3/L4 → Shield + edge; L7 → WAF.
18. API GW: 10,000 rps / 5,000 burst; over = 429.
19. API keys meter, they don't authorize.
20. PFS = ECDHE TLS policy on CloudFront/ELB.
10

Core quiz

Check the basics first. Pick an answer, then press Check.

11

Hard quiz

Harder than most real exam questions on purpose, with one “choose two” and one matching question. Aim for 9 out of 12 before Day 2.

12

Practice test questions (from your mock exams)

These 10 questions come from your own SCS-003 mock exams (the last 2 are new questions added in the October 2026 review for features AWS changed in 2025–2026), matched to today’s topics. Each one was checked against current AWS behaviour: where a mock answer used old features (OAI, Classic Load Balancer, Inspector Classic) the wording was updated, and the explanation says so. The source is shown at the end of each explanation, for example “(Mock 5 · Q12)”.

13

Hands-on lab (30 minutes, low cost)

  1. Create a private S3 bucket with an index.html, then a CloudFront distribution with an OAC. Copy the bucket policy CloudFront suggests and check you can load the page via CloudFront but get 403 from the S3 URL.
  2. Create a WAF web ACL (CloudFront scope, us-east-1) with the Core rule set in Count mode and a rate-based rule with limit 10 per 60 seconds. Attach it to the distribution.
  3. Run a quick loop (for i in $(seq 30); do curl -s -o /dev/null -w "%{http_code} " https://DIST.cloudfront.net/; done) and watch the 403s start.
  4. Send ?id=1%27%20OR%201=1 and find the Count match for the CRS or SQLi rule in sampled requests.
  5. Turn on geo restriction to block your own country and see the 403, then remove it.
  6. Clean up: detach and delete the web ACL (WAF charges per web ACL and rule per month), disable and delete the distribution, empty and delete the bucket. Don’t subscribe to Shield Advanced in a personal account: it has a one-year commitment.