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

Identity and Access Management practice questions

Identity and Access Management is worth 20% of the SCS-C03 exam — the heaviest of the 6 domains. Authentication and authorization strategies for human, application, and system access — the heaviest-weighted domain on the exam. 6 fully worked examples are further down this page, answers included.

Exam weight
20%
the heaviest of the 6 domains
Questions
128
across 2 topics
Free, no account
5/day
sign up free to remove the cap
Explanations
Every option
right and wrong

Build a practice session

5 free questions left today.

Domains

How many?

Mode

Ready when you are

10 fresh questions drawn across 1 of 6 domains, in Learn mode.

Focused review

Every question you answer incorrectly, and every question you flag while practising, is saved here automatically. Finish a session and you can come back to re-drill just those.

6 sample Identity and Access Management questions, fully explained

Questions from the SCS-C03 bank mapped to domain 4, with the answer key and the reasoning behind every option. None of them repeat the examples on the main SCS-C03 practice page.

Question 1Identity and Access Management

A company attaches a policy to every IAM user that denies all actions when aws:MultiFactorAuthPresent is false (BoolIfExists). Existing users with devices work normally, but newly created users who sign in to the console with only a password cannot register their first MFA device, because the enrollment calls are denied too. Which change lets them enroll while leaving MFA required for everything else?

Choose one.

  • a
    Add a separate Allow statement for the MFA enrollment actions and leave the deny statement as it is.

    An explicit deny overrides any allow, so a separate Allow statement for the enrollment actions does not get past the existing deny.

  • b
    Change the deny's operator from BoolIfExists to Bool so console sessions signed in with a password stop matching.

    A password-only console session carries aws:MultiFactorAuthPresent with the value false, so Bool still matches and still denies. The change would also exempt long-term access-key requests.

  • c
    Write the deny with NotAction that lists the enrollment actions, such as iam:EnableMFADevice. Correct

    With NotAction, the deny applies to everything except the listed self-service actions (create, enable, resync and list MFA devices, plus reading the user's own details), so a user without MFA can enroll a device while every other action still requires MFA.

  • d
    Move the deny into a permissions boundary on new users so the enrollment actions sit outside it.

    A deny in a permissions boundary still denies; a boundary only limits the maximum permissions and cannot carve out exceptions from its own deny statement.

The concept

An MFA-enforcement deny must exempt the self-service actions a user needs to enroll a device; this is done inside the deny statement with NotAction, because an explicit deny cannot be overridden by an allow.

Why that’s the answer

The enrollment calls fail because the deny matches them. The fix is to stop the deny from covering them: NotAction lists the MFA self-service actions (such as iam:CreateVirtualMFADevice, iam:EnableMFADevice, iam:ResyncMFADevice, iam:ListMFADevices) and iam:GetUser, and the deny applies to everything else. A separate Allow loses to the explicit deny. Switching to Bool does not help console users, whose sessions carry the key with the value false. Moving the deny into a permissions boundary keeps it a deny.

How to reason it out
  1. Recognize that the enrollment calls are blocked by an explicit deny.
  2. Recall that an explicit deny beats every allow, so adding an Allow cannot help.
  3. Exclude the enrollment actions from the deny itself with NotAction.
  4. Keep BoolIfExists so long-term access-key requests stay denied.

Exam tip: To let users bootstrap MFA, carve the enrollment actions out of the deny with NotAction; never try to override a deny with an allow.

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

Question 2Identity and Access Management

A standalone AWS account has six IAM users with administrator access who sign in to the console. After a phishing exercise in which testers captured a password and a one-time code through a lookalike sign-in page and used them within seconds, the security team must choose an MFA device type that the same attack cannot defeat. What should each administrator register?

Choose one.

  • a
    A FIDO2 hardware key or synced passkey set up as each administrator's MFA device. Correct

    FIDO2 security keys and passkeys sign a challenge bound to the real sign-in origin, so a lookalike page cannot obtain a response it can replay against AWS. IAM supports them as MFA devices.

  • b
    A virtual authenticator app that generates time-based codes for each administrator.

    Time-based codes are typed by the user, so a proxying lookalike page can capture a code and use it within its validity window: the attack in the exercise.

  • c
    A hardware TOTP token, kept physically by each administrator, as their device.

    A hardware TOTP token protects the secret from malware but still produces a code the user types, which a phishing proxy can relay in real time.

  • d
    A virtual authenticator app, plus a policy requiring aws:MultiFactorAuthAge under 60 seconds.

    A short MFA-age window does not help: the lookalike page relays the captured code within seconds, so the session is still fresh when the attacker uses it. The factor itself must be phishing-resistant.

The concept

MFA factors differ in phishing resistance. FIDO2 security keys and passkeys are origin-bound; TOTP codes, whether from an app or a hardware token, can be relayed by a real-time phishing proxy.

Why that’s the answer

The exercise shows that a typed one-time code can be captured and replayed within seconds. Only an origin-bound factor stops this, because the authenticator refuses to produce a valid response for the lookalike origin. A hardware TOTP token is the tempting choice ("hardware" sounds stronger), but it still yields a relayable code, and tightening aws:MultiFactorAuthAge does not help when the relay happens within seconds.

How to reason it out
  1. Identify the threat: real-time relay of a password plus a one-time code.
  2. Separate code-based factors (virtual or hardware TOTP) from origin-bound factors (FIDO2).
  3. Choose the factor whose response cannot be used on a different site.

Exam tip: For phishing resistance choose FIDO2 security keys or passkeys; any TOTP code, hardware or virtual, can be relayed.

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

Question 3Identity and Access Management

A GitHub Actions workflow in the example-corp organization deploys the payments-api repository to AWS using the GitHub OIDC provider registered in IAM and the configure-aws-credentials action with its default audience. Only workflow runs on the main branch of payments-api may obtain credentials for the deployment role. Which trust policy condition meets this requirement?

Choose one.

  • a
    "StringEquals": {"…:aud": "sts.amazonaws.com"}, "StringLike": {"…:sub": "repo:example-corp/*"}

    A sub pattern of repo:example-corp/* admits every repository and branch in the organization, not just main in payments-api.

  • b
    "StringEquals": {"…:aud": "sts.amazonaws.com"}, "StringLike": {"…:sub": "repo:example-corp/payments-api:*"}

    This narrows to the repository but still admits every branch, tag, environment and pull request run in it.

  • c
    "StringEquals": {"…:aud": "sts.amazonaws.com", "…:sub": "repo:example-corp/payments-api:ref:refs/heads/main"} Correct

    The default audience requested by configure-aws-credentials is sts.amazonaws.com, and a sub of repo:<org>/<repo>:ref:refs/heads/main matches only runs on the main branch of that repository.

  • d
    "StringEquals": {"…:aud": "https://github.com/example-corp", "…:sub": "repo:example-corp/payments-api:ref:refs/heads/main"}

    The sub value is right, but the token's aud claim is sts.amazonaws.com by default, so this aud condition never matches and every run is denied.

The concept

For OIDC workload federation the role trusts the IAM OIDC provider for token.actions.githubusercontent.com and checks two token claims: aud (sts.amazonaws.com for the AWS action's default) and sub (repo:<org>/<repo>:ref:refs/heads/<branch> for a branch run). In the options, "…" stands for token.actions.githubusercontent.com.

Why that’s the answer

Both claims must match what the token actually carries and be no broader than the requirement. An organization-wide or repository-wide wildcard on sub lets other repositories or branches assume the role. A correct sub with the wrong audience fails closed, because the token's aud is sts.amazonaws.com. IAM also refuses to save a GitHub trust policy whose sub condition is missing or is only a wildcard, but it accepts the broader patterns shown, so the scope is still the author's job.

How to reason it out
  1. Recall the default aud claim for the AWS credentials action: sts.amazonaws.com.
  2. Recall the sub format for a branch run: repo:<org>/<repo>:ref:refs/heads/<branch>.
  3. Reject patterns that admit other repositories, branches or pull requests.
  4. Reject an aud value the token does not carry.

Exam tip: Scope GitHub OIDC roles with aud = sts.amazonaws.com and an exact sub for the repository and branch; wildcards widen who can deploy.

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

Question 4Identity and Access Management

A developer runs a CLI script with an IAM user's long-term access keys. The script calls an API that a policy protects with a condition requiring aws:MultiFactorAuthPresent to be true. The user has a virtual MFA device registered, and the security team does not want a role created or assumed for this task. How should the script obtain credentials that satisfy the condition?

Choose one.

  • a
    Call GetFederationToken, passing the device serial number and code, and use the credentials it returns.

    GetFederationToken has no MFA parameters, and the credentials it returns never carry MFA context, so they cannot satisfy the condition.

  • b
    Call GetSessionToken without MFA parameters; the user's registered device marks the session as MFA.

    A registered device is not proof of MFA. Without SerialNumber and TokenCode the session is issued without MFA context.

  • c
    Call GetSessionToken, passing the device serial number and code, and use the credentials it returns. Correct

    GetSessionToken with SerialNumber and TokenCode returns temporary credentials for the same IAM user whose request context has aws:MultiFactorAuthPresent set to true.

  • d
    Set mfa_serial in the CLI profile that holds the access keys, without adding a role_arn to it.

    The CLI prompts for an MFA code from mfa_serial only as part of assuming the role named by role_arn; with no role_arn, requests are signed directly with the long-term keys, which carry no MFA context.

The concept

Long-term access keys never carry MFA context. An IAM user gets MFA-bearing credentials by calling GetSessionToken (or AssumeRole) with SerialNumber and TokenCode.

Why that’s the answer

With roles ruled out, GetSessionToken is the STS call that turns long-term keys plus a current MFA code into temporary credentials with aws:MultiFactorAuthPresent = true. Calling it without the MFA parameters gives a session without MFA. GetFederationToken cannot carry MFA at all. The CLI mfa_serial setting is tempting, but it only drives an MFA prompt when the profile assumes a role.

How to reason it out
  1. Note the constraint: long-term keys, no role.
  2. Recall which STS calls accept SerialNumber and TokenCode: GetSessionToken and AssumeRole.
  3. Rule out GetFederationToken, which carries no MFA context.
  4. Use the returned temporary credentials for the protected call.

Exam tip: From long-term keys without a role, GetSessionToken with the MFA serial and code is how an IAM user gets an MFA-present session.

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

Question 5Identity and Access Management

A company with a single AWS account authenticates employees against on-premises Active Directory through AD FS, which already acts as a SAML 2.0 identity provider for other applications. Employees need AWS console access with permissions that follow their AD group membership. The company does not want to deploy any AWS directory service. What should the security engineer set up?

Choose one.

  • a
    Register AD FS as an IAM OIDC provider, create roles that trust it, and sign in with AssumeRoleWithWebIdentity.

    This builds an OIDC web-identity flow, not the SAML console federation AD FS already provides; there is no console sign-in that maps AD groups to roles this way without custom broker code.

  • b
    Register AD FS as an IAM SAML provider, create roles that trust it, and map AD groups to roles in the Role attribute. Correct

    An IAM SAML identity provider plus roles that trust it lets AD FS post assertions to the AWS sign-in endpoint; the Role attribute lists role ARN and provider ARN pairs derived from group membership, and AssumeRoleWithSAML issues the console session.

  • c
    Deploy AD Connector to the domain, enable IAM Identity Center with it, and assign AD groups to permission sets.

    This works technically, but AD Connector is an AWS Directory Service directory, which the company has ruled out.

  • d
    Register AD FS as an IAM SAML provider, create IAM groups with matching names, and map AD groups to them.

    Federated users receive role sessions; IAM groups contain only IAM users and cannot be the target of a SAML assertion.

The concept

Direct SAML 2.0 federation to IAM: create an IAM SAML identity provider from the IdP metadata, create roles that trust it (sts:AssumeRoleWithSAML), and have the IdP send a Role attribute with role/provider ARN pairs chosen from the user's groups.

Why that’s the answer

The deciding constraint is "no AWS directory service": IAM Identity Center with AD Connector would otherwise be a good answer. With AD FS already speaking SAML, the direct path is an IAM SAML provider and roles; group-to-role mapping happens in the IdP's Role attribute. IAM groups cannot be assumed by federated users, and an OIDC web-identity flow does not give AD-group-driven console sign-in.

How to reason it out
  1. Spot the constraints: one account, existing SAML IdP, no AWS directory service.
  2. Choose direct SAML federation to IAM over Identity Center with AD Connector.
  3. Map groups to roles through the assertion's Role attribute (role ARN, provider ARN).
  4. Remember federated users get role sessions, never IAM users or groups.

Exam tip: For console access from an existing SAML IdP into one account, use an IAM SAML provider and roles; groups map to roles in the Role attribute.

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

Question 6Identity and Access Management

A SaaS monitoring vendor runs its platform from one AWS account and reads data from hundreds of customer accounts by assuming a role in each. You are creating that role in your account with the vendor's account as the trusted principal. Which trust policy condition stops another of the vendor's customers from getting the vendor platform to use your role?

Choose one.

  • a
    A StringEquals condition on sts:ExternalId set to the unique value the vendor generated for your account. Correct

    The vendor generates a unique external ID per customer, stores it with that customer's configuration and sends it on every AssumeRole call. Another customer cannot make the platform send your value, so a request on their behalf fails the condition.

  • b
    A StringEquals condition on aws:PrincipalAccount set to the vendor's AWS account ID.

    This repeats what the Principal element already enforces. The confused deputy request comes from the vendor's own account, so it passes this check.

  • c
    A StringEquals condition on sts:ExternalId set to a value that you generate and send to the vendor.

    If customers supply the value, another customer can enter the same value in their own configuration and the platform would send it; the protection depends on the vendor generating a unique ID that customers cannot choose.

  • d
    An IpAddress condition on aws:SourceIp set to the vendor's published egress IP address ranges.

    The confused deputy request comes from the vendor's own platform and therefore from the same IP ranges, so it passes this check.

The concept

The external ID defends against the confused deputy when a third party assumes roles in many customers' accounts: the vendor generates a unique value per customer, the customer's trust policy requires it, and customers cannot set or change it.

Why that’s the answer

Every request in this scenario, legitimate or not, comes from the vendor's account and IP ranges, so account and IP conditions cannot tell your request from another customer's. Only a value tied to your customer record on the vendor side can. A customer-generated value is the subtle trap: if customers can type the value, a malicious customer can type yours.

How to reason it out
  1. Recognize the confused deputy: the vendor is trusted, and the attacker is another customer of the vendor.
  2. Rule out checks that the vendor's own requests always pass (account, IP).
  3. Require sts:ExternalId in the trust policy.
  4. Make sure the vendor, not the customer, generates the unique value.

Exam tip: Third-party roles need sts:ExternalId, generated by the vendor per customer and not editable by customers.

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

What SCS-C03 domain 4 tests, topic by topic

The official exam guide breaks Identity and Access Management into 2 topics. The question bank follows the same split, so a weak topic shows up as a cluster of misses you can go back and read.

Published SCS-C03 practice questions per topic in Identity and Access Management
TopicWhat it coversQuestions
Design, implement, and troubleshoot authentication strategiesExam guide task 4.1 (SCS-C03). Identity solutions for human, application, and system authentication (AWS IAM Identity Center, Amazon Cognito, multi-factor authentication [MFA], identity provider [IdP] integration); mechanisms to issue temporary credentials (AWS STS, Amazon S3 presigned URLs); troubleshooting authentication issues (CloudTrail, Amazon Cognito, IAM Identity Center permission sets, AWS Directory Service).64
Design, implement, and troubleshoot authorization strategiesExam guide task 4.2 (SCS-C03). Authorization controls for human, application, and system access (Amazon Verified Permissions, IAM paths, IAM Roles Anywhere, resource policies for cross-account access, IAM role trust policies); attribute-based access control (ABAC) and role-based access control (RBAC) strategies (resource access based on tags or attributes); IAM policies following least privilege (permission boundaries, session policies); analyzing authorization failures (IAM Policy Simulator, IAM Access Analyzer); investigating and correcting unintended permissions, authorizations, or privileges (IAM Access Analyzer).64
Total128

Revise Identity and Access Management before you drill it

Other SCS-C03 domains

Identity and Access Management: your questions

Identity and Access Management is domain 4 of the SCS-C03 exam guide and carries 20% of the scored content — the heaviest of the 6 domains. On a 65-question paper that works out to roughly 13 questions, though AWS does not publish an exact per-domain count and individual exam forms vary.

Source

The domain weight and topic list on this page come from the official SCS-C03 exam guide.