SaveMyCert
Log in
5 of 5 free questions left today·for 30 a day
SCS-C03 practice

SCS-C03 sample questions — 25 answered and explained

25 SCS-C03 sample questions written to the official AWS Certified Security – Specialty exam guide, grouped by exam domain and weighted like the real exam. Each shows the correct answer, why every other option is wrong, and the lesson that teaches it. None of them repeat the examples on the other SCS-C03 practice pages.

On this page
25
answers included
Full bank
629
on the practice page
Domains
6
weighted like the exam
Free, no account
5/day
a free account allows 30 a day

Domain 1: Detection

16% of the SCS-C03 exam, so 4 of the 25 questions on this page.

Question 1Detection

A company runs Amazon Security Lake from a delegated administrator account. A detection-engineering team in a separate account runs a streaming analytics tool that must ingest a copy of every new record within minutes of it landing in the lake and raise alerts on suspicious patterns. The tool keeps its own copy of the data and must not depend on scheduled polling. Which configuration meets this requirement?

Choose one.

  • a
    Add the account as a query-access subscriber and have the tool query the shared tables through a Lake Formation resource link.

    Wrong: query access shares the tables for in-place SQL; the tool would have to run queries on a schedule to find new data, which is the polling the stem rules out.

  • b
    Add the account as a data-access subscriber and have the tool list the S3 prefixes at five-minute intervals for new objects.

    Wrong: data access is the right subscriber type, but listing prefixes on a timer is scheduled polling; the subscriber notification exists so the tool does not have to poll.

  • c
    Turn on Security Hub CSPM cross-Region aggregation and have the tool read new findings from the home Region once a minute.

    Wrong: this delivers findings only, not the raw log records in the lake, and reading them every minute is still scheduled polling.

  • d
    Add the account as a data-access subscriber with SQS notifications so the tool reads each new object from S3. Correct

    Right: a data-access subscriber gets direct read access to the lake objects in S3 and a notification (an SQS queue or an HTTPS endpoint) for each new object, so the tool ingests new data within minutes without polling.

The concept

Security Lake shares data through subscribers. Data-access subscribers read the lake's S3 objects directly and can be notified of each new object through an SQS queue or an HTTPS subscription endpoint; query-access subscribers query the Lake Formation tables in place, for example with Athena.

Why that’s the answer

Two requirements decide: the tool keeps its own copy, and it must react to new data rather than poll. A data-access subscriber gives read access to the objects, and its new-object notifications remove the need to poll. Query access fits in-place SQL, not copying, and needs scheduled queries to spot new data. A data-access subscriber that lists prefixes on a timer has the right access but polls. Security Hub CSPM aggregation carries findings, not the lake's log records.

How to reason it out
  1. Classify the consumer: it copies the data and needs a push signal for new records.
  2. Match copying to the data-access subscriber type, and in-place SQL to the query-access type.
  3. Check how the consumer learns of new data: subscriber notifications, not a polling timer.
  4. Reject options that poll or that deliver findings instead of log records.

Exam tip: Copy-and-react consumers of Security Lake = data-access subscriber with new-object notifications; in-place SQL = query-access subscriber.

Designing Security Monitoring and Alerting Across an AWS Organization — the lesson that teaches this.

Question 2Detection

A healthcare company's security tooling account is the Macie administrator and the Security Hub CSPM administrator. Macie automated sensitive data discovery runs for the organization, and the Macie and Security Hub CSPM integration is in its default state. The SOC wants every sensitive data finding to appear in Security Hub CSPM, with the least effort. What should the team do?

Choose one.

  • a
    In the Macie administrator account, set the publication settings to also publish sensitive data findings to Security Hub CSPM. Correct

    By default Macie publishes only policy findings to Security Hub CSPM. For automated discovery, only the Macie administrator account can publish the sensitive data findings, so its publication setting is the change needed.

  • b
    In the Security Hub CSPM administrator account, accept the Macie integration on the Integrations page to receive sensitive data findings.

    The integration is already on by default when both services are enabled; what limits the flow is Macie's publication setting, not the integration.

  • c
    In each member account, set the Macie publication settings to also publish sensitive data findings to Security Hub CSPM.

    Findings from organization-wide automated discovery are published only by the Macie administrator account, so changing member settings does not publish them.

  • d
    Create an EventBridge rule for Macie sensitive data findings that calls a Lambda function to import them with BatchImportFindings.

    This could work, but it rebuilds with custom code what a single Macie publication setting already does natively.

The concept

Macie publishes new and updated policy findings to Security Hub CSPM by default, but not sensitive data findings; publishing those is a Macie publication setting. In an organization, only the Macie administrator account can publish the sensitive data findings produced by automated sensitive data discovery.

Why that’s the answer

Two facts decide this. The default publication covers policy findings only, so sensitive data findings need the publication setting changed. And for automated discovery run for the organization, the administrator account is the only account that can publish those findings, so the setting must be changed there, not in members. The Security Hub CSPM integration needs no action because it is enabled automatically. A custom EventBridge import works but adds code for something a setting already does.

How to reason it out
  1. Recall the default: Macie publishes policy findings, not sensitive data findings, to Security Hub CSPM.
  2. Find the control: Macie's publication settings.
  3. Identify which account publishes automated-discovery findings: the Macie administrator.
  4. Prefer the native setting over a custom import pipeline.

Exam tip: Macie sensitive data findings reach Security Hub CSPM only after the Macie administrator turns on their publication; policy findings flow by default.

Designing Security Monitoring and Alerting Across an AWS Organization — the lesson that teaches this.

Question 3Detection

Before an audit, a company must keep an up-to-date view of which of its 400 S3 buckets, across 30 accounts, hold personal data such as passport and card numbers. The budget does not cover analyzing every new or changed object in full, and buckets created later must be included without extra setup. Which approach meets these needs at the lowest cost?

Choose one.

  • a
    Turn on Macie automated sensitive data discovery for the organization from the Macie delegated administrator. Correct

    Automated discovery continuously samples representative objects across the organization's buckets, includes new buckets, and keeps a per-bucket sensitivity view without analyzing every object.

  • b
    Schedule a daily Macie sensitive data discovery job on an explicitly selected list of the 400 buckets.

    Wrong: each run after the first analyzes every new or changed object in full, with no sampling, which costs more than automated discovery; and an explicit bucket list does not pick up buckets created later.

  • c
    Turn on S3 Storage Lens advanced metrics for the organization and filter its dashboard for buckets with personal data.

    Storage Lens reports storage usage and activity; it does not inspect object contents, so it cannot tell which buckets hold personal data.

  • d
    Deploy an AWS Config conformance pack with S3 managed rules that flag buckets that store personal data.

    Config rules evaluate bucket configuration such as encryption and public access, not the data inside objects.

The concept

Amazon Macie discovers sensitive data in S3 in two ways: sensitive data discovery jobs that analyze the objects in a defined scope, and automated sensitive data discovery, which continuously samples objects across all buckets to build a sensitivity profile per bucket at lower cost.

Why that’s the answer

Only Macie inspects object contents for personal data, which rules out Storage Lens and Config. Between the two Macie options, both find the data, but the constraints decide. A periodic job is incremental, yet every new or changed object in its scope is analyzed in full, and an explicitly selected bucket list misses new buckets. Automated discovery samples representative objects across all buckets, includes new buckets automatically and is designed for broad, ongoing coverage at lower cost. Use targeted jobs when every object must be analyzed.

How to reason it out
  1. Rule out services that cannot read object contents: Storage Lens and Config.
  2. Compare the two Macie modes against the cost and new-bucket constraints.
  3. Note that jobs analyze every in-scope new or changed object in full, and explicit bucket lists are fixed.
  4. Choose automated discovery for ongoing, sampled, organization-wide coverage.

Exam tip: Broad, ongoing, low-cost PII visibility across many buckets = Macie automated sensitive data discovery; full jobs are for exhaustive scans.

Designing Security Monitoring and Alerting Across an AWS Organization — the lesson that teaches this.

Question 4Detection

A security team aggregates all findings into AWS Security Hub CSPM in one home Region. On-call engineers must be paged for High and Critical findings, and Low and Medium findings must go to a ticketing queue. The team wants no custom code to run or maintain. Which implementation meets these requirements?

Choose one.

  • a
    Two EventBridge rules in the home Region on the severity label: High and Critical to SNS, Low and Medium to the queue. Correct

    EventBridge event patterns can filter on the finding's severity label, so two rules route findings to the paging topic and the queue without any code.

  • b
    One EventBridge rule in the home Region to a Lambda function that sends High and Critical to SNS, Low and Medium to the queue.

    This routes correctly, but the Lambda function is custom code the team would have to run and maintain.

  • c
    A Security Hub CSPM automation rule that sets the workflow status of High and Critical findings to NOTIFIED.

    Automation rules update finding fields; setting a workflow status records a state but pages no one.

  • d
    A Lambda function scheduled each minute that calls GetFindings and sends pages or tickets based on severity.

    Polling with a scheduled function is custom code and adds up to a minute of delay; EventBridge already delivers each finding as an event.

The concept

Security Hub CSPM sends every new and updated finding to EventBridge. Event patterns can match finding attributes such as Severity.Label, so routing by severity is done with rules and targets, not code.

Why that’s the answer

The deciding constraint is no custom code. Two EventBridge rules with severity-label patterns send each class of finding straight to its target (SNS for paging, SQS or a ticketing integration for the rest). A single rule with a routing Lambda function works but adds code. Polling GetFindings is code plus delay. Automation rules change fields on findings but do not notify anyone.

How to reason it out
  1. Confirm findings arrive in EventBridge in the home Region.
  2. Filter on the severity label in each rule's event pattern.
  3. Point the High/Critical rule at SNS and the other rule at the ticketing queue.
  4. Reject options that add Lambda code or only change finding fields.

Exam tip: Route Security Hub CSPM findings by severity with EventBridge pattern matching, one rule per destination; no Lambda needed.

Designing Security Monitoring and Alerting Across an AWS Organization — the lesson that teaches this.

Domain 2: Incident Response

14% of the SCS-C03 exam, so 4 of the 25 questions on this page.

Question 5Incident Response

An Automation runbook isolates a production instance after a GuardDuty finding. Before the isolation step runs, the workflow must stop and wait until a member of the incident-commander IAM role allows it, the request must reach that group by SNS, and the record must show which principal allowed it. Which change to the runbook meets these requirements?

Choose one.

  • a
    Add an aws:pause step before the isolation step and have the incident-commander role resume it with a signal.

    aws:pause waits, but it has no list of approvers or SNS request: any principal allowed to send a Resume signal can continue it, and no approval decision is recorded.

  • b
    Add an aws:executeScript step before the isolation step that publishes the request to an SNS topic.

    This sends the request but does not wait for an answer; the runbook goes straight on to the isolation step.

  • c
    Add an aws:approve step before the isolation step that lists the incident-commander role as an approver. Correct

    Correct. aws:approve pauses the automation until the listed approvers (here the role) reach MinRequiredApprovals, sends the request to an SNS topic given in NotificationArn, and records each approver's decision in its output.

  • d
    Add an aws:waitForAwsResourceProperty step before isolation that waits for an approval tag on the instance.

    This waits for a property value, but anyone who can tag the instance could release it, and the record shows a tag change rather than an approval by a named principal.

The concept

The human-approval gate in a Systems Manager Automation runbook is the aws:approve action: it pauses until designated approvers approve or reject, notifies them through SNS, and records their decisions.

Why that’s the answer

Three requirements decide: wait for a decision, restrict who decides, record who decided. aws:pause meets only the first. A script that publishes to SNS meets only the notification. Waiting on a tag can be satisfied by anyone with tagging rights. aws:approve covers all three through Approvers, NotificationArn and its ApproverDecisions output. In Step Functions the equivalent is a callback task (waitForTaskToken); Step Functions has no built-in approval state.

How to reason it out
  1. Identify the requirement: a gated, attributable human decision before a high-impact step.
  2. Separate waiting (aws:pause) from approving by named principals (aws:approve).
  3. Confirm the SNS notification and recorded decision come from aws:approve.
  4. Place the approval step immediately before the isolation step.

Exam tip: Use aws:approve, not aws:pause, when a named principal must allow a high-impact Automation step and the decision must be recorded.

Design and Test an AWS Incident Response Plan (SCS-C03) — the lesson that teaches this.

Question 6Incident Response

When GuardDuty reports a compromised EC2 instance, a security team wants evidence collected at scale with no analyst signing in to the host. Analysts need the instance's volatile memory as well as its disks, and the evidence must end up where credentials from the workload account cannot change it. Which response design meets these requirements?

Choose one.

  • a
    Stop the instance so its memory stops changing, snapshot its EBS volumes, and share them with the forensics account.

    Stopping the instance discards its memory; it does not freeze it. The disk evidence reaches the forensics account, but the volatile evidence the analysts need is lost.

  • b
    Capture memory with Systems Manager to a bucket in the workload account, snapshot the volumes, and isolate the instance.

    The near-twin: memory and disks are both captured from the running host, but the evidence stays in the compromised workload account, where that account's credentials can alter or delete it.

  • c
    Capture memory with Systems Manager, snapshot the volumes, isolate the instance, and copy both to the forensics account. Correct

    Correct. Memory is taken from the running host before anything stops it, disks are snapshotted, the instance is isolated with a security group, and the evidence lands in the forensics account. This is the flow the Automated Forensics Orchestrator for Amazon EC2 and EKS runs with Step Functions and Lambda.

  • d
    Run a GuardDuty Malware Protection scan of the EBS volumes, keep the scan findings, and terminate the instance.

    Malware Protection scans the volumes and reports findings, and it can retain the scanned snapshots, but those stay in the workload account and it captures no memory. Terminating the instance then destroys the volatile evidence for good.

The concept

Automated EC2 evidence acquisition captures volatile memory from the running instance, snapshots its EBS volumes, isolates it with a security group, and stores the evidence in a separate forensics account. AWS packages this as the Automated Forensics Orchestrator for Amazon EC2 and EKS.

Why that’s the answer

Two facts combine. Memory exists only while the instance runs, so any design that stops or terminates the instance before capturing it loses that evidence. Evidence kept in the workload account (an in-account bucket or retained scan snapshots) remains reachable with that account's credentials. Only the design that captures memory and disks from the running host and moves them to the forensics account meets both requirements.

How to reason it out
  1. Note that volatile memory is needed, so the instance must keep running until memory is captured.
  2. Note that the evidence must leave the workload account.
  3. Reject stop and terminate designs, and any design that keeps the evidence in the workload account.
  4. Choose memory capture, disk snapshots, isolation by security group, and transfer to the forensics account.

Exam tip: Capture memory before you stop anything, and move evidence out of the compromised account into the forensics account.

Design and Test an AWS Incident Response Plan (SCS-C03) — the lesson that teaches this.

Question 7Incident Response

A security team has drafted a ransomware playbook. It now wants to find who decides between restoring and rebuilding, when legal and communications are brought in, and which hand-offs between teams are missing, with executives, legal counsel and engineers taking part. Which validation method should the team start with?

Choose one.

  • a
    Run an AWS Fault Injection Service experiment against test instances in a sandbox account.

    FIS injects real faults into resources. It tests technical recovery, but it does not exercise decisions by executives, legal or communications, and it costs more to prepare than a first test needs to.

  • b
    Hold a tabletop exercise in which responders walk a ransomware scenario through the playbook. Correct

    Correct. A tabletop is a discussion-based walkthrough of the written playbook. It brings the business roles into the room and is the cheapest way to expose unclear decision owners, late escalation and missing hand-offs before any technical testing.

  • c
    Generate GuardDuty sample findings and follow them through the playbook to the on-call page.

    Sample findings test the technical route from detection to the on-call page. They do not exercise restore-or-rebuild decisions or when legal and communications join.

  • d
    Run a game day that replays the ransomware scenario against copies of the workload in a sandbox account.

    A game day exercises the technical response against real resources. It is the right later step once a tabletop has settled ownership and hand-offs, not the first test of business decisions.

The concept

Incident response plans are tested on a ladder: tabletop exercises (discussion only), simulations with sample findings, and game days or fault injection against real resources.

Why that’s the answer

The goal is about decisions and hand-offs between people, including non-technical roles. A tabletop exercise tests exactly that, cheaply and first. Sample findings, FIS experiments and game days are the later, technical rungs of the ladder: they prove detection and recovery, not who decides what.

How to reason it out
  1. Classify the goal: decision ownership and hand-offs, not technical recovery.
  2. Match people-and-process gaps to a discussion-based exercise.
  3. Place sample findings, FIS and game days later on the ladder for technical proof.
  4. Start with a tabletop, then move up the ladder.

Exam tip: Start validating a playbook with a tabletop exercise: it is the cheapest test of who decides, who is told and which hand-offs are missing.

Design and Test an AWS Incident Response Plan (SCS-C03) — the lesson that teaches this.

Question 8Incident Response

A team routes GuardDuty findings through EventBridge rules that match six specific finding types to a responder Lambda function and an on-call page. Before go-live, they must prove within minutes that each of those six types travels the whole route, starting at GuardDuty, without deploying test resources or waiting for real activity. What should they do?

Choose one.

  • a
    Deploy the GuardDuty tester in a dedicated account and run its scripts to produce real findings of common types.

    The tester produces real findings from simulated activity, but it deploys test resources, takes time and covers a set of common types rather than the six chosen ones.

  • b
    Import a hand-built finding for each type into Security Hub CSPM with BatchImportFindings and watch for the page.

    An imported finding enters at Security Hub CSPM and never passes through GuardDuty or the GuardDuty-sourced rules, so the start of the route is not tested.

  • c
    Use a Security Hub CSPM custom action to send six existing findings to EventBridge and watch for the page.

    Custom actions emit a Security Hub CSPM event with a different source and detail type, so rules that match GuardDuty findings do not fire, and the start of the route is skipped.

  • d
    Call CreateSampleFindings for each of the six finding types and confirm that each one produces a page. Correct

    Correct. CreateSampleFindings generates a GuardDuty finding of each named type on demand, marked as a sample. It enters the route at GuardDuty, so the EventBridge rules, the Lambda function and the page are all exercised.

The concept

GuardDuty sample findings, generated per finding type with the CreateSampleFindings API (the console generates one of every type), test EventBridge rules and finding automation end to end without real activity.

Why that’s the answer

Each option tests part of the route. The tester creates real activity but needs deployed resources and covers common types only. Importing into Security Hub CSPM or using a custom action starts the test downstream of GuardDuty with events the GuardDuty rules do not match. Sample findings of the exact six types start at GuardDuty, arrive within minutes and need no resources.

How to reason it out
  1. Identify where the test must start: GuardDuty.
  2. Remove methods that inject downstream (Security Hub CSPM import or custom action).
  3. Remove methods that need deployed resources or cannot target specific types.
  4. Generate sample findings for each matched type and trace each to the page.

Exam tip: To test finding automation from GuardDuty onward, generate sample findings of the exact types your rules match.

Design and Test an AWS Incident Response Plan (SCS-C03) — the lesson that teaches this.

Domain 3: Infrastructure Security

18% of the SCS-C03 exam, so 4 of the 25 questions on this page.

Question 9Infrastructure Security

A static website's assets are stored in an Amazon S3 bucket and served through a CloudFront distribution. S3 Block Public Access must stay on for the bucket, and objects must be readable through this distribution and no other, including distributions in other AWS accounts. Which configuration meets the requirement?

Choose one.

  • a
    Use an origin access identity, with a bucket policy allowing that identity and an AWS:SourceArn condition for the distribution.

    Requests signed with a legacy origin access identity do not come from the CloudFront service principal and carry no source ARN for this condition to match, so the design mixes two mechanisms and access fails.

  • b
    Use origin access control, with a bucket policy allowing the cloudfront.amazonaws.com service principal without a condition.

    Without an AWS:SourceArn condition the policy trusts the CloudFront service principal for any distribution, including other accounts' distributions configured with this bucket as origin.

  • c
    Use the S3 website endpoint as a custom origin, with a bucket policy allowing requests carrying a secret Referer value.

    A website endpoint serves anonymous requests, so the bucket policy must grant access to everyone (with a Referer condition), which Block Public Access does not allow; Referer is also easy to forge.

  • d
    Use origin access control, with a bucket policy allowing the cloudfront.amazonaws.com service principal for this distribution's ARN. Correct

    OAC signs origin requests with SigV4, and a bucket policy granting the CloudFront service principal with AWS:SourceArn equal to the distribution ARN lets only this distribution read the private bucket.

The concept

For S3 origins, origin access control (OAC) plus a bucket policy that allows the cloudfront.amazonaws.com service principal with an AWS:SourceArn condition naming the distribution keeps the bucket private and readable only through that distribution.

Why that’s the answer

OAC makes CloudFront sign requests as the service principal, and the AWS:SourceArn condition narrows the grant to one distribution, so the bucket stays private and other distributions are refused. Without the condition, any distribution could read the bucket. The OAI option mixes the legacy identity principal with a condition only OAC requests satisfy. A website endpoint needs anonymous public access, which conflicts with Block Public Access, and Referer secrets are forgeable.

How to reason it out
  1. Keep Block Public Access on, which rules out the website endpoint design.
  2. Use OAC so CloudFront signs requests as the cloudfront.amazonaws.com service principal.
  3. Grant s3:GetObject to that principal with AWS:SourceArn equal to the distribution ARN.
  4. Confirm direct S3 URLs are denied while the distribution serves the objects.

Exam tip: Private S3 origin = OAC plus a bucket policy for the CloudFront service principal with AWS:SourceArn set to your distribution.

Edge Security on AWS: WAF, Shield, and CloudFront as Controls — the lesson that teaches this.

Question 10Infrastructure Security

A subscription video service delivers each title as an HLS manifest that references hundreds of segment files by relative path. Only signed-in subscribers may stream, access should last a few hours for a whole title, and the team will not rewrite manifests or segment URLs per viewer. How should the application authorize viewers at the edge?

Choose one.

  • a
    Issue a signed URL with a custom policy whose resource is a wildcard for the title's path.

    A wildcard custom policy can cover the path, but the signature lives in each URL's query string; segments requested by relative path from the manifest arrive without it unless URLs are rewritten.

  • b
    Set signed cookies with a custom policy for the title's path, verified by a trusted key group. Correct

    Signed cookies are sent with every request to the domain, and a custom policy can name a wildcard path and an expiry, so every segment of the title is authorized without changing any URL.

  • c
    Set signed cookies with a canned policy for the title, verified by a trusted key group.

    A canned policy names a single exact resource and cannot use wildcards, so it cannot authorize the hundreds of segment files of a title.

  • d
    Enable origin access control on the S3 origin with a bucket policy scoped to the distribution.

    OAC stops viewers bypassing CloudFront to reach S3, but it does not decide which viewers may stream through the distribution.

The concept

CloudFront signed URLs carry the signature in each URL; signed cookies cover many objects without changing URLs. A canned policy covers one exact resource; a custom policy can use wildcards, date ranges and IP conditions. Both are verified against a trusted key group.

Why that’s the answer

Two facts decide it: cookies avoid touching URLs, and only a custom policy can cover a wildcard path. Signed cookies with a custom policy for the title path authorize every segment for the chosen period. A wildcard signed URL still needs the signature on each segment request. Signed cookies with a canned policy cover a single object. OAC protects the origin, not viewer authorization.

How to reason it out
  1. Note that URLs cannot change, which points to signed cookies over signed URLs.
  2. Note that one grant must cover many files, which needs a custom policy with a wildcard path.
  3. Create a trusted key group with the public key and set it on the cache behavior.
  4. After authenticating a subscriber, the application sets the signed cookies with an expiry of a few hours.

Exam tip: Many files and no URL changes = signed cookies with a custom (wildcard) policy; canned policies cover one exact object.

Edge Security on AWS: WAF, Shield, and CloudFront as Controls — the lesson that teaches this.

Question 11Infrastructure Security

A newly launched PHP application runs on Amazon Linux EC2 instances behind an Application Load Balancer and stores data in Aurora MySQL. The small security team wants AWS WAF protection against common OWASP Top 10 exploits, known bad inputs, SQL injection and attacks aimed at its stack, with AWS maintaining the signatures and no capacity spent on irrelevant rules. Which managed rule groups should they add?

Choose one.

  • a
    Core rule set, Known bad inputs, SQL database, Windows operating system and PHP application

    The Windows operating system group targets Windows-specific exploits such as PowerShell commands, which do not apply to Amazon Linux hosts and only consume capacity.

  • b
    Core rule set, Known bad inputs, SQL database, Linux operating system and WordPress application

    The WordPress application group targets WordPress-specific exploits; the application is plain PHP, so the PHP application group is the relevant one.

  • c
    Core rule set, Known bad inputs, SQL database, Linux operating system and PHP application Correct

    Each group matches the stack: the Core rule set and Known bad inputs for common exploits, SQL database for SQL injection, Linux operating system for the hosts and PHP application for the runtime.

  • d
    Core rule set, Known bad inputs, Bot Control, Linux operating system and PHP application

    Bot Control classifies automated clients; it does not inspect for SQL injection, and the Core rule set has no SQL injection rules, so this set leaves that threat uncovered.

The concept

AWS managed rule groups split into baseline groups (Core rule set, Admin protection, Known bad inputs), use-case groups (SQL database, Linux, POSIX and Windows operating system, PHP and WordPress application) and IP reputation groups; you add the ones that match the application stack.

Why that’s the answer

The application is PHP on Amazon Linux with a MySQL database, so the matching set is Core rule set + Known bad inputs + SQL database + Linux operating system + PHP application. SQL injection is covered by the SQL database group, not by the Core rule set, so dropping it for Bot Control leaves a gap. The Windows group and the WordPress group target platforms the application does not use and only consume web ACL capacity units.

How to reason it out
  1. List the threats: common exploits, known bad inputs, SQL injection, stack-specific attacks.
  2. Map common exploits and known bad inputs to the Core rule set and Known bad inputs groups.
  3. Map SQL injection to the SQL database group, which the Core rule set does not replace.
  4. Add only the OS and application groups that match the stack: Linux and PHP.

Exam tip: Choose AWS managed rule groups by stack: Core and Known bad inputs as baseline, SQL database for SQLi, plus the matching OS and application groups.

Edge Security on AWS: WAF, Shield, and CloudFront as Controls — the lesson that teaches this.

Question 12Infrastructure Security

A web ACL contains three rules, listed by ascending priority number: an Allow rule for the corporate office IP set, the AWS Managed Rules Core rule set with its default Block actions, and a rate-based rule with a Block action. A request arrives from the corporate office carrying a cross-site scripting payload. What happens to the request?

Choose one.

  • a
    Blocked, because managed rule groups are evaluated before the custom rules in a web ACL.

    WAF evaluates rules strictly by priority number; a managed group is not moved ahead of custom rules.

  • b
    Allowed, and the Core rule set records the cross-site scripting match as a Count in the logs.

    Once the Allow rule terminates evaluation, the Core rule set never inspects the request, so no match of any kind is recorded for it.

  • c
    Allowed, because the corporate IP-set rule matches first and its action ends rule evaluation. Correct

    Allow is a terminating action, and the corporate IP-set rule has the lowest priority number, so it matches first and evaluation stops before the Core rule set.

  • d
    Blocked, because a Block action in the Core rule set overrides an Allow from an earlier rule.

    WAF has no precedence of Block over Allow; the first terminating action wins, and here that is the earlier Allow.

The concept

WAF evaluates rules in ascending priority number and stops at the first terminating action (Allow, Block, and CAPTCHA/Challenge when they end the request); Count is non-terminating.

Why that’s the answer

The corporate IP-set Allow rule has the lowest priority number and matches, and Allow is terminating, so the request is allowed and the Core rule set never sees the payload. Managed groups are not evaluated ahead of custom rules, Block does not override an earlier Allow, and a rule that was never reached records nothing.

How to reason it out
  1. Order the rules by ascending priority number.
  2. Find the first rule that matches the request: the corporate IP-set Allow.
  3. Recall that Allow terminates evaluation, so later rules do not run.
  4. To keep inspecting trusted traffic, narrow the Allow rule or place it after the managed groups.

Exam tip: The first terminating action wins: a broad early Allow silently skips every managed rule after it.

Edge Security on AWS: WAF, Shield, and CloudFront as Controls — the lesson that teaches this.

Domain 4: Identity and Access Management

20% of the SCS-C03 exam, so 5 of the 25 questions on this page.

Question 13Identity and Access Management

RoleB has a maximum session duration of 4 hours. An automation first assumes RoleA, then uses RoleA's temporary credentials to call AssumeRole on RoleB with DurationSeconds set to 14400. That call fails with a validation error on DurationSeconds, while the same call with DurationSeconds set to 3600 succeeds. What explains this?

Choose one.

  • a
    A session requested with another role's temporary credentials is limited to 1 hour, so asking for more fails. Correct

    This is role chaining: when one role's temporary credentials are used to assume another role, the new session is limited to 1 hour. A chained request above 3600 seconds fails instead of being shortened, whatever RoleB's maximum is.

  • b
    RoleB's maximum session duration covers console sessions, and API sessions default to a 1-hour limit.

    The maximum session duration applies to API, CLI and console sessions alike; a first-hop AssumeRole from the API can request the full 4 hours.

  • c
    A session policy passed when RoleA was assumed limits sessions created with its temporary credentials to 1 hour.

    Session policies limit permissions, not duration. No policy can change how long a later session lasts.

  • d
    RoleA's session has about 1 hour left, and STS fails a request for a new session that would outlast that parent session.

    There is no rule tying a new session's length to the remaining time of the calling session; the 1-hour limit applies to any chained session, however fresh the caller is.

The concept

Role chaining (using an assumed role's temporary credentials to assume another role) limits the new session to 1 hour. A chained AssumeRole that requests more than 3600 seconds fails with a validation error; it is not silently shortened.

Why that’s the answer

The pattern (fails at 14400, succeeds at 3600, caller is a role session) is the role-chaining limit. A role's maximum session duration applies whether the role is assumed from the API or the console; session policies affect permissions only; and there is no "cannot outlive the parent" rule. A longer session needs a first-hop AssumeRole from non-role credentials.

How to reason it out
  1. Identify that RoleB is assumed with another role's temporary credentials (a chain).
  2. Recall that a chained session is limited to 1 hour.
  3. Recall that a chained request above 3600 seconds fails rather than being shortened.
  4. Request 3600 seconds or less, or assume RoleB on the first hop if a longer session is needed.

Exam tip: Chained AssumeRole calls must request 3600 seconds or less; only a first-hop AssumeRole can use the role's full maximum session duration.

AWS Authentication Strategies: MFA, STS, and Federation — the lesson that teaches this.

Question 14Identity and Access Management

A company has 45 AWS accounts in AWS Organizations and manages its workforce in Okta. Employees need single sign-on with short-lived credentials across the accounts, and changes to Okta users and group memberships (joiners, movers and leavers) must be reflected in AWS access without manual work. The team wants the least ongoing administration. Which design meets these requirements?

Choose one.

  • a
    IAM Identity Center with Okta as the external IdP over SAML, SCIM provisioning on, and groups assigned to permission sets. Correct

    SAML handles sign-in and SCIM keeps Identity Center users and group memberships in step with Okta, so group changes and disabled users flow through without manual work; permission sets are provisioned as roles in each assigned account.

  • b
    IAM Identity Center with Okta as the external IdP over SAML, users and groups created by hand, and permission sets.

    Without SCIM, every new user and membership change must be mirrored manually in Identity Center, which breaks the "no manual work" requirement.

  • c
    A SAML provider and roles in IAM in each of the 45 accounts, with Okta group rules sending the role ARNs each user may assume.

    This can work, but it means maintaining a SAML provider, roles and Okta mappings in 45 accounts, far more ongoing administration than Identity Center.

  • d
    Amazon Cognito user pools federated with Okta over SAML, with identity pools issuing role credentials per account.

    Cognito is built for customer identity in applications, not workforce console access across an organization's accounts.

The concept

IAM Identity Center is the workforce answer for multi-account access: an external IdP authenticates users over SAML 2.0, SCIM provisions users and groups automatically, and permission sets become roles in each assigned account.

Why that’s the answer

Two requirements decide: automatic reflection of user and group changes (SCIM) and least administration across 45 accounts (Identity Center rather than per-account SAML). Identity Center without SCIM still needs manual user and group creation. Per-account IAM SAML federation works but multiplies configuration. Cognito targets application end users, not the workforce.

How to reason it out
  1. List the requirements: SSO across 45 accounts, automatic joiner/mover/leaver handling, least administration.
  2. Pick IAM Identity Center for multi-account workforce access.
  3. Add SCIM so users and group memberships sync from Okta.
  4. Assign Okta groups to permission sets across the accounts.

Exam tip: Identity Center + external IdP: SAML for sign-in, SCIM for provisioning; without SCIM, user and group changes are manual.

AWS Authentication Strategies: MFA, STS, and Federation — the lesson that teaches this.

Question 15Identity and Access Management

A mobile app signs users in with an Amazon Cognito user pool. Each signed-in user must upload photos directly to one S3 bucket using temporary AWS credentials, and must only be able to write under a prefix that belongs to that user, even if two users share a device. Which configuration meets these requirements?

Choose one.

  • a
    The app calls S3 with the user pool access token, with writes limited to ${cognito-identity.amazonaws.com:sub}/.

    S3 accepts requests signed with AWS credentials (SigV4), not Cognito JWTs, and without an identity pool there is no Cognito identity for the variable to resolve to. A user pool token on its own grants no AWS access.

  • b
    An identity pool with guest access enabled, with role access limited to ${cognito-identity.amazonaws.com:sub}/.

    Guest (unauthenticated) identities are not tied to the signed-in user, so two users on one device could share an identity and its prefix.

  • c
    An identity pool that accepts the user pool ID token, with role access limited to ${cognito-identity.amazonaws.com:sub}/. Correct

    An identity pool with the user pool as an authentication provider exchanges the ID token for temporary role credentials; the policy variable resolves to the caller's identity ID, giving each user their own prefix.

  • d
    An identity pool that accepts the user pool ID token, with role access limited to the ${aws:username}/ prefix.

    aws:username exists only for IAM users. Cognito callers use a role session, so the variable does not resolve and no per-user prefix is enforced.

The concept

A Cognito user pool authenticates users and issues JWTs; an identity pool exchanges a user pool ID token for temporary AWS credentials from an IAM role. Per-user scoping uses the policy variable ${cognito-identity.amazonaws.com:sub}, which is the caller's identity ID.

Why that’s the answer

Two facts combine: only an identity pool turns a sign-in into AWS credentials, and only the cognito-identity.amazonaws.com:sub variable separates users who share a role. Guest access gives credentials but not a user-bound identity; aws:username does not exist for role sessions; and S3 does not accept a Cognito JWT as a credential.

How to reason it out
  1. Separate authentication (user pool) from AWS credentials (identity pool).
  2. Use authenticated identities so each signed-in user gets their own identity ID.
  3. Scope the role policy with ${cognito-identity.amazonaws.com:sub}.
  4. Reject variables that only exist for IAM users.

Exam tip: User pool to sign in, identity pool to get credentials, and ${cognito-identity.amazonaws.com:sub} to give each user their own prefix.

AWS Authentication Strategies: MFA, STS, and Federation — the lesson that teaches this.

Question 16Identity and Access Management

A fleet of on-premises application servers must call AWS APIs, each application under its own IAM role, without any long-term AWS credentials stored on the servers. Each server already holds an X.509 certificate issued by the company's private certificate authority. Which approach meets these requirements?

Choose one.

  • a
    Register the servers as Systems Manager hybrid managed nodes and let applications use the nodes' credentials.

    Hybrid activation gives the SSM Agent credentials from the single service role chosen at activation, for Systems Manager's own use; it is not a way to give each application its own role.

  • b
    Register the private CA as an IAM Roles Anywhere trust anchor and exchange each certificate for role credentials. Correct

    IAM Roles Anywhere trusts certificates issued by the registered CA; with a profile and a role per application, the credential helper exchanges the certificate for temporary credentials for that role.

  • c
    Register the private CA as an IAM OIDC identity provider and exchange each certificate with AssumeRoleWithWebIdentity.

    AssumeRoleWithWebIdentity accepts OIDC JSON web tokens from an OIDC issuer; it does not accept X.509 certificates, and a CA is not an OIDC provider.

  • d
    Upload each server's certificate as an IAM user signing certificate and sign each AWS API request with it.

    IAM user signing certificates are long-term credentials tied to an IAM user, which the requirement rules out, and they do not give each application its own role.

The concept

IAM Roles Anywhere lets workloads outside AWS use X.509 certificates from a CA registered as a trust anchor to obtain temporary credentials for an IAM role selected through a profile.

Why that’s the answer

The constraints are: outside AWS, existing private-CA certificates, no long-term keys, a role per application. Roles Anywhere meets all four. OIDC federation uses tokens, not certificates. Systems Manager hybrid activation gives the agent a single service role for its own use. IAM user signing certificates are long-term credentials.

How to reason it out
  1. Note the workload runs outside AWS and already has X.509 certificates.
  2. Rule out anything that stores long-term credentials.
  3. Register the CA as a Roles Anywhere trust anchor and create a profile per role.
  4. Use the credential helper to exchange the certificate for role credentials.

Exam tip: Workloads outside AWS with X.509 certificates use IAM Roles Anywhere: CA as trust anchor, certificate exchanged for temporary role credentials.

AWS Authentication Strategies: MFA, STS, and Federation — the lesson that teaches this.

Question 17Identity and Access Management

An engineer in account 111122223333 has an identity policy that allows sts:AssumeRole on arn:aws:iam::444455556666:role/DeployRole, yet the call returns AccessDenied. CloudTrail in the engineer's account records the failed AssumeRole event, and the engineer confirms that no SCP or permissions boundary denies it. Which cause is most likely?

Choose one.

  • a
    The engineer's identity policy does not also allow iam:PassRole on DeployRole.

    iam:PassRole is needed to hand a role to a service, not to assume a role yourself.

  • b
    DeployRole's trust policy does not list the engineer's account or ARN as a principal. Correct

    Role assumption is checked on both sides. With the caller side cleared (identity policy allows, no SCP or boundary), the remaining check is the role's trust policy, which must name the caller or its account.

  • c
    DeployRole has not yet had a permissions policy attached to it by an administrator.

    A role with no permissions policies can still be assumed; the session simply has no permissions.

  • d
    Accounts 111122223333 and 444455556666 are not in the same AWS organization.

    Cross-account role assumption works between any accounts whose policies allow it; AWS Organizations membership is not required.

The concept

AssumeRole is authorized on two sides: the caller's policies must allow sts:AssumeRole on the role ARN (with no SCP or boundary deny), and the role's trust policy must name the caller (or its account) with every condition met.

Why that’s the answer

The stem clears the caller side, so the failure is on the role side: the trust policy does not trust this principal. iam:PassRole is for handing roles to services; an empty permissions policy does not block assumption; and Organizations membership is not required for cross-account roles.

How to reason it out
  1. Treat AssumeRole AccessDenied as a two-sided check.
  2. Clear the caller side: identity policy, SCPs, permissions boundaries.
  3. Check the role side: the trust policy Principal and its conditions.
  4. Confirm in CloudTrail which role and caller the failed event names.

Exam tip: AssumeRole needs both an allow for the caller and a trust policy that names the caller; when the caller side is clean, check the trust policy.

AWS Authentication Strategies: MFA, STS, and Federation — the lesson that teaches this.

Domain 5: Data Protection

18% of the SCS-C03 exam, so 4 of the 25 questions on this page.

Question 18Data Protection

A B2B API on Amazon API Gateway (REST API) must accept only partner clients that present certificates issued by the company's private CA. The team configured mutual TLS on a Regional custom domain with a truststore in Amazon S3, and calls through that custom domain without a certificate now fail. A penetration test still reaches the API without any client certificate. What is the cause?

Choose one.

  • a
    The default execute-api endpoint remains enabled, and requests sent to it bypass the mTLS check Correct

    Mutual TLS is enforced on the custom domain only. The default https://{api-id}.execute-api.{region}.amazonaws.com endpoint stays reachable unless it is disabled, and it does not ask for a client certificate.

  • b
    The truststore lists just an intermediate CA, so API Gateway admits clients that send no certificate

    An incomplete truststore makes validation fail for legitimate clients; it does not let certificate-less clients in. API Gateway fails closed on the custom domain, as the team already observed.

  • c
    No revocation check is configured for the truststore, so API Gateway admits certificate-less calls

    Revocation checking is something you add with a Lambda authorizer; its absence does not let requests without a certificate through. The custom domain already rejects those requests.

  • d
    The API's resource policy grants access to the wildcard principal, and resource policies outrank mTLS

    Resource policies add authorization after the TLS handshake; they do not override the handshake requirement on the custom domain. The bypass is a different endpoint, not a policy.

The concept

API Gateway enforces mutual TLS on the custom domain name. The default execute-api endpoint does not enforce it, so it must be disabled for mTLS to be the only way in.

Why that’s the answer

Calls through the custom domain already fail without a certificate, so mTLS is working there. The penetration test therefore used another entry point: the default execute-api endpoint, which ignores the custom domain's mTLS settings until you disable it (disableExecuteApiEndpoint). An incomplete truststore and a missing revocation check both fail closed or have no effect on certificate-less clients, and a resource policy cannot override the TLS handshake.

How to reason it out
  1. Note that the custom domain correctly rejects calls without a certificate.
  2. Ask which other path reaches the same API: the default execute-api endpoint.
  3. Recall that mTLS is configured per custom domain and is not applied to the default endpoint.
  4. Fix by disabling the default endpoint so all traffic must use the mTLS custom domain.

Exam tip: API Gateway mTLS lives on the custom domain; disable the default execute-api endpoint or it stays a bypass.

Data in Transit on AWS: TLS, ACM, and End-to-End Encryption Design — the lesson that teaches this.

Question 19Data Protection

Two VPCs in different AWS Regions replicate a database over inter-Region VPC peering. The database engine's own TLS is turned off for performance. A compliance team asks whether the replication stream is encrypted while it travels between the two Regions. What is the accurate answer?

Choose one.

  • a
    Yes: AWS encrypts inter-Region peering traffic at the physical layer on the AWS global network Correct

    AWS states that inter-Region VPC peering traffic is encrypted and that data crossing Regions on the AWS global network is encrypted at the physical layer before it leaves AWS facilities. The inter-Region hop is encrypted even with the engine's TLS off.

  • b
    No: inter-Region peering is plaintext unless a Site-to-Site VPN is built between the two VPCs

    A VPN would add another layer, but it is not needed for the inter-Region hop, which AWS already encrypts. The premise that peering traffic is plaintext between Regions is wrong.

  • c
    No: intra-Region peering is encrypted, but the inter-Region hop needs a Transit Gateway peering

    This reverses the facts: the guarantee is for traffic that crosses Regions on the AWS global network. Transit Gateway inter-Region peering is encrypted the same way, so switching to it changes nothing.

  • d
    Yes, provided both VPCs use Nitro-based instances, because Nitro encryption protects peering traffic

    Nitro in-transit encryption applies between supported instance types, but the inter-Region encryption comes from the AWS global network and does not depend on the instance types at either end.

The concept

Traffic that crosses AWS Regions on the AWS global network, including inter-Region VPC peering and Transit Gateway peering, is encrypted by AWS automatically.

Why that’s the answer

AWS encrypts data at the physical layer before it leaves AWS secured facilities for another Region, and documents inter-Region VPC peering traffic as encrypted. That satisfies a requirement about the hop between Regions without a VPN or Transit Gateway. Nitro encryption is a separate, instance-level feature and is not what protects the inter-Region link. Application-level TLS is still the way to protect data end to end inside each Region.

How to reason it out
  1. Identify the scope of the question: the hop between Regions, not the whole path.
  2. Recall that AWS encrypts traffic crossing Regions on its global network, including inter-Region peering.
  3. Reject options that add a VPN or Transit Gateway for a hop that is already encrypted.
  4. Separate Nitro instance-to-instance encryption from backbone encryption.

Exam tip: Inter-Region traffic on the AWS backbone is encrypted by AWS; use TLS when you need end-to-end protection.

Data in Transit on AWS: TLS, ACM, and End-to-End Encryption Design — the lesson that teaches this.

Question 20Data Protection

A security team plans to move an Application Load Balancer from a policy that allows TLS 1.0 to one with a TLS 1.2 minimum. Last time a similar change silently cut off a batch of embedded devices. Before the change, the team wants a list of the client IP addresses that still negotiate TLS 1.0 or TLS 1.1 today. Which data source provides that list?

Choose one.

  • a
    ALB access logs delivered to Amazon S3, queried with Amazon Athena on the ssl_protocol field Correct

    ALB access logs record the client IP and the negotiated ssl_protocol and ssl_cipher for each HTTPS request. Querying them lists exactly which clients still use TLS 1.0 or 1.1.

  • b
    VPC Flow Logs on the ALB's network interfaces, filtered for client connections to port 443

    Flow logs capture IP addresses, ports, protocol numbers and byte counts. They record no TLS version, so they show which clients connect on 443 but not which ones negotiate an old version.

  • c
    The ALB's ClientTLSNegotiationErrorCount metric in Amazon CloudWatch, grouped by client IP address

    This metric counts failed TLS negotiations. It is only useful after the change, and it has no client IP dimension, so it cannot identify which clients are affected.

  • d
    AWS CloudTrail management events for Elastic Load Balancing, queried with Amazon Athena

    CloudTrail records ELB management API calls such as listener and policy changes. It has no per-request events for client connections, so it holds no negotiated TLS versions.

The concept

Before raising a TLS minimum, inventory the clients that would break from the load balancer's own logs: ALB access logs (and connection logs) record the negotiated TLS protocol and cipher per client.

Why that’s the answer

The access log fields ssl_protocol and ssl_cipher, together with the client IP, show which clients still negotiate TLS 1.0 or 1.1 before anything is changed. ALB connection logs also record the TLS protocol per connection, including failed handshakes, which helps after a change. Flow logs have no TLS fields, the CloudWatch metric only counts failures with no per-client detail, and CloudTrail records only management API calls for Elastic Load Balancing, not connections.

How to reason it out
  1. The team needs per-client TLS versions from current traffic, before the change.
  2. Find a source that records the negotiated protocol per client: the ALB's access logs.
  3. Reject sources that only count failures or that do not see TLS at all.
  4. Query the ssl_protocol field for TLSv1 and TLSv1.1 to list the clients to fix first.

Exam tip: Before raising an ALB TLS minimum, query access logs for ssl_protocol to see who would break.

Data in Transit on AWS: TLS, ACM, and End-to-End Encryption Design — the lesson that teaches this.

Question 21Data Protection

An Application Load Balancer's HTTPS listener holds certificates for api.example.com, shop.example.com and admin.example.com. Browsers work for every name. An old monitoring probe and a legacy client library that call shop.example.com fail with "certificate name does not match host", and the certificate they receive is the one for api.example.com. What is the most likely cause?

Choose one.

  • a
    The security policy became ELBSecurityPolicy-TLS13-1-3-2021-06, which the legacy library does not support

    ELBSecurityPolicy-TLS13-1-3-2021-06 allows TLS 1.3 only. A client that cannot negotiate TLS 1.3 fails the handshake before any certificate is accepted; these clients complete enough of the handshake to receive a certificate, just the wrong one.

  • b
    The shop.example.com certificate was issued by AWS Private CA, which the legacy library does not trust

    A trust problem would produce an untrusted-issuer error on the shop.example.com certificate. These clients are not receiving that certificate at all.

  • c
    The listener rule for the shop.example.com host name has a lower priority than the rule for api.example.com

    Listener rules route requests after the TLS handshake. They do not decide which certificate is presented during the handshake.

  • d
    The probe and library send no Server Name Indication, so the ALB presents the listener's default certificate Correct

    An ALB chooses among multiple certificates by the SNI hostname in the ClientHello. A client that sends no SNI gets the default certificate, here api.example.com, so validation fails with a name mismatch while SNI-capable browsers work.

The concept

With several certificates on one listener, an ALB selects the certificate by the SNI hostname the client sends; clients without SNI receive the listener's default certificate.

Why that’s the answer

The clue is that the failing clients receive a valid certificate for a different name. Certificate selection is driven by SNI, and legacy libraries and probes that omit SNI get the default certificate. A TLS 1.3-only policy would break the handshake outright, a private CA would raise a trust error on the right certificate, and listener rules act after the handshake.

How to reason it out
  1. Note the exact symptom: the right site, the wrong certificate, a name mismatch.
  2. Ask what decides which certificate an ALB presents: the SNI hostname in the ClientHello.
  3. Notice that only old clients fail; old libraries and probes often omit SNI.
  4. Fix the clients to send SNI, or make the default certificate cover the names they call.

Exam tip: Wrong certificate from a multi-certificate ALB = the client sent no SNI and got the default certificate.

Data in Transit on AWS: TLS, ACM, and End-to-End Encryption Design — the lesson that teaches this.

Domain 6: Security Foundations and Governance

14% of the SCS-C03 exam, so 4 of the 25 questions on this page.

Question 22Security Foundations and Governance

Investigators found that an attacker in a compromised member account tried to remove the account from the organization so that its guardrails would no longer apply. The security team wants a preventive control that stops this in member accounts from now on. Which control should they apply?

Choose one.

  • a
    An SCP that denies organizations:LeaveOrganization, attached to the organization root Correct

    Attached to the root, the SCP applies to every member account, including its root user, so no principal there can call LeaveOrganization.

  • b
    An RCP that denies organizations:LeaveOrganization, attached to the organization root

    RCPs restrict access to resources in the services they support, and AWS Organizations is not among them. The call is made by a principal in the member account, which is what an SCP constrains.

  • c
    An SCP that denies organizations:LeaveOrganization, attached to the management account

    SCPs do not affect the management account, and the call comes from the member account anyway, so this attachment protects nothing.

  • d
    A declarative policy that locks the organization-membership setting at the organization root

    Declarative policies enforce supported service configurations, such as EC2 and VPC settings; there is no organization-membership attribute to lock.

The concept

Denying organizations:LeaveOrganization in an SCP on the root or OUs keeps compromised member accounts inside their guardrails.

Why that’s the answer

LeaveOrganization is called by a principal in the member account, so the control must constrain member-account principals: an SCP attached where it is inherited by those accounts. The RCP version uses the wrong policy type for a service RCPs do not support, the management-account attachment has no effect, and declarative policies have no membership setting.

How to reason it out
  1. Identify who makes the call: a principal in the member account.
  2. Pick the policy type that constrains member-account principals: an SCP.
  3. Attach it where member accounts inherit it (root or OUs), not to the management account.

Exam tip: Deny organizations:LeaveOrganization with an SCP on the root or OUs.

AWS Organizations, SCPs, and Control Tower: Multi-Account Security Strategy — the lesson that teaches this.

Question 23Security Foundations and Governance

A bucket policy in a member account was found granting s3:GetObject to Principal "*". Leadership wants one organization-wide policy that stops principals from outside the organization from reaching S3 buckets, KMS keys, SQS queues and Secrets Manager secrets in member accounts, even when a resource policy is wrong, without breaking AWS services that act on the company's behalf. Which policy meets this?

Choose one.

  • a
    RCP on the root: Deny when aws:PrincipalOrgID is not o-a1b2c3 and BoolIfExists aws:PrincipalIsAWSService is false Correct

    An RCP applies to every caller of the supported services in member accounts, external principals included. PrincipalOrgID blocks callers from outside the organization, and the service-principal exception keeps AWS services working.

  • b
    SCP on the root: Deny when aws:ResourceOrgID is not o-a1b2c3 and BoolIfExists aws:PrincipalIsAWSService is false

    This stops the company's own principals from using resources outside the organization. It cannot constrain an external principal, who is not subject to the company's SCPs.

  • c
    RCP on the root: Deny when aws:ResourceOrgID is not o-a1b2c3 and BoolIfExists aws:PrincipalIsAWSService is false

    The resource is always in the organization, so aws:ResourceOrgID always matches and the deny never fires. The perimeter has to test the caller, with aws:PrincipalOrgID.

  • d
    SCP on the root: Deny when aws:PrincipalOrgID is not o-a1b2c3 and BoolIfExists aws:PrincipalIsAWSService is false

    The condition is right, but an SCP only constrains principals in member accounts, and they are all inside the organization. Outside callers are never evaluated against it.

The concept

An RCP perimeter with aws:PrincipalOrgID caps access to member-account resources for every caller, so a mis-shared resource policy cannot expose data outside the organization.

Why that’s the answer

Two facts decide this. First, the policy type: only an RCP is evaluated against callers from outside the organization; an SCP constrains only the organization's own principals. Second, the condition key: the perimeter must test the caller (aws:PrincipalOrgID), not the resource (aws:ResourceOrgID, which is always your organization for your own resources). The aws:PrincipalIsAWSService exception is the documented way to keep AWS services working.

How to reason it out
  1. Identify who must be stopped: callers outside the organization.
  2. Choose the policy type evaluated for those callers: an RCP, not an SCP.
  3. Test the caller with aws:PrincipalOrgID; aws:ResourceOrgID describes the resource.
  4. Keep the AWS service principal exception so service-to-service access keeps working.

Exam tip: Resource perimeter = RCP denying unless aws:PrincipalOrgID matches; SCPs cannot reach external callers.

AWS Organizations, SCPs, and Control Tower: Multi-Account Security Strategy — the lesson that teaches this.

Question 24Security Foundations and Governance

A platform team using AWS Control Tower enables three controls on the Workloads OU: one blocks member accounts from changing the CloudTrail configuration Control Tower manages, one flags EBS volumes that are already unencrypted, and one rejects a CloudFormation stack that declares an unencrypted RDS instance before anything is created. Which mechanisms implement these controls, in that order?

Choose one.

  • a
    An AWS Config rule; an SCP; a CloudFormation hook

    This swaps the first two: a Config rule only evaluates resources after the fact, and an SCP blocks API calls rather than flagging existing volumes.

  • b
    An SCP; a CloudFormation hook; an AWS Config rule

    This swaps the last two: a hook evaluates resources during provisioning, so it cannot flag volumes that already exist, while a Config rule cannot stop a stack before creation.

  • c
    A CloudFormation hook; an AWS Config rule; an SCP

    A hook only sees resources deployed through CloudFormation, so it cannot block console or API changes to CloudTrail; an SCP cannot inspect a stack template.

  • d
    An SCP; an AWS Config rule; a CloudFormation hook Correct

    Preventive controls are organization policies (SCPs, and for some controls RCPs), detective controls are AWS Config rules, and proactive controls are CloudFormation hooks that check resources before provisioning.

The concept

Control Tower controls are preventive (SCPs or RCPs), detective (AWS Config rules) or proactive (CloudFormation hooks evaluated during provisioning).

Why that’s the answer

Match each behaviour to its mechanism. Blocking an API action for member accounts is preventive, implemented as an SCP (some newer preventive controls use RCPs or declarative policies). Flagging resources that already exist is detective, implemented as an AWS Config rule. Rejecting a noncompliant resource in a CloudFormation stack before it is created is proactive, implemented as a CloudFormation hook. The other orderings swap two mechanisms.

How to reason it out
  1. Classify each control: block an action, flag existing state, or check a template before creation.
  2. Map block to an SCP, flag to an AWS Config rule, and pre-creation check to a CloudFormation hook.
  3. Read the order in the stem and pick the matching sequence.

Exam tip: Preventive = SCP/RCP, detective = Config rule, proactive = CloudFormation hook.

AWS Organizations, SCPs, and Control Tower: Multi-Account Security Strategy — the lesson that teaches this.

Question 25Security Foundations and Governance

A company has run AWS Control Tower for a year. Business units request new accounts weekly. Each account must be enrolled in Control Tower and placed in its target OU with the baseline and that OU's controls applied as it is created, with no follow-up step. The platform team is small and wants the approach with the least operational overhead. Which approach meets this?

Choose one.

  • a
    Provision each account through Account Factory, choosing the target OU in the request Correct

    Account Factory is the built-in account vending in Control Tower: it creates the account already enrolled, in the selected OU, with the baseline and the OU’s controls applied.

  • b
    Create each account in Organizations, then run Enroll account in Control Tower for it

    Enrollment does govern the account, but only as a second step after creation, which the stem rules out.

  • c
    Deploy Account Factory for Terraform and submit one account request file for each account

    AFT also vends governed accounts in the requested OU, but it means deploying and operating a separate Terraform pipeline, which is more overhead than the built-in Account Factory.

  • d
    Use a Customizations for Control Tower manifest to create each account in the target OU

    Customizations for Control Tower deploys templates and SCPs into accounts through its own pipeline; it does not create accounts.

The concept

Control Tower Account Factory vends new accounts that are enrolled from the start, in the chosen OU, with the baseline and controls applied.

Why that’s the answer

Account Factory, which is built into Control Tower, creates accounts already governed in the chosen OU. Enrolling an account created in Organizations works but adds the follow-up step the stem excludes. AFT meets the governance requirement too, but it is a Terraform pipeline the team would have to deploy and run, so it loses on operational overhead. Customizations for Control Tower does not create accounts at all.

How to reason it out
  1. Note the constraints: governed as it is created, no follow-up step, least overhead.
  2. Rule out the two-step create-then-enroll path.
  3. Compare the two vending options: built-in Account Factory versus the AFT pipeline.
  4. Rule out Customizations for Control Tower, which customizes accounts but does not create them.

Exam tip: New governed accounts come from Account Factory; existing accounts are enrolled.

AWS Organizations, SCPs, and Control Tower: Multi-Account Security Strategy — the lesson that teaches this.

Keep going with SCS-C03

SCS-C03 practice by domain

SCS-C03 sample questions: your questions

No. Real exam questions are confidential. These are original questions written to the skills in the official SCS-C03 exam guide, so they test the same knowledge in the same style without being copies of the exam.

Source

The domains and weights on this page come from the official SCS-C03 exam guide.