SAA-C03 Design Secure Architectures Practice Question
A security analyst needs to let an external vendor (AWS account 555566667777) read data from a set of internal resources in your AWS account. You created an IAM role called VendorReadRole with a policy that allows the required API calls. However, when the vendor tries to access, CloudTrail shows the call fails at AssumeRole with: "Not authorized to perform: sts:AssumeRole".
What is the most appropriate fix?
⚠ Common exam trap
Candidates often confuse the role's permissions policy (which defines what actions the role can perform) with the trust policy (which defines who can assume the role), leading them to incorrectly modify the permissions policy or the vendor's IAM user instead of the trust policy.
Answer choices
Why each option matters
Answer the question above first, then reveal the full breakdown to understand why each option is right or wrong.
Correct answer & explanation
✓
Add an allow statement for the vendor in the role’s trust policy to permit sts:AssumeRole from the vendor account (and include any required ExternalId condition).
The error 'Not authorized to perform: sts:AssumeRole' indicates that the role's trust policy does not grant the external AWS account (555566667777) permission to assume the role. The trust policy must include an Allow statement with the sts:AssumeRole action, specifying the external account as the principal, and optionally an ExternalId condition to prevent the confused deputy problem. Without this trust policy configuration, even if the permissions policy allows the required API calls, the vendor cannot assume the role.
Answer analysis
Option-by-option breakdown
For each option: why learners choose it and why it is or isn't the right answer here.
- ✓
Add an allow statement for the vendor in the role’s trust policy to permit sts:AssumeRole from the vendor account (and include any required ExternalId condition).
Why this is correct
To grant an external vendor access to your AWS resources, you must edit the role's trust policy to include a principal from the vendor account and an action of sts:AssumeRole. This trust relationship is the only mechanism that authorizes a foreign principal to assume your role; the permissions policy alone cannot authorize cross-account assumption. Adding an ExternalId condition prevents the confused deputy problem by ensuring the role is assumed only for your intended vendor, not a third party using the same role.
- ✗
Attach the same allow policy to the vendor account’s existing IAM user so the user can call sts:AssumeRole directly into your role.
Why it's wrong here
Attaching the same allow policy to the vendor's IAM user only grants that user permissions in its own account; it does not affect the trust relationship of your role. While any IAM principal can attempt an sts:AssumeRole call, that call will be denied unless your role's trust policy explicitly permits the vendor's account or principal to assume it. The permission policy on the IAM user is irrelevant to whether your role trusts the vendor, so this approach fails to establish the required trust.
When this WOULD be correct
If the vendor needed to access resources in your account using their own IAM user (not assuming a role), you would attach a resource-based policy (e.g., S3 bucket policy) allowing the vendor's user ARN. In that case, the vendor's user policy would need to allow the corresponding API calls (e.g., s3:GetObject).
- ✗
Replace the AssumeRole call with GetCallerIdentity so the vendor can infer permissions without assuming the role.
Why it's wrong here
GetCallerIdentity is a simple API that returns details about the calling principal (such as account ID, user ID, and ARN); it does not grant any permissions to access resources in your account. Using it instead of AssumeRole would not let the vendor perform any actions on your internal resources, because the vendor never receives temporary credentials scoped to your role. This approach fundamentally changes the access mechanism but fails to provide the necessary authorization, leaving the vendor with no way to operate in your account.
When this WOULD be correct
When troubleshooting an IAM permissions issue within the same account, GetCallerIdentity can be used to verify the identity and permissions of the caller without needing to assume a role.
- ✗
Enable MFA on the vendor’s IAM user and require MFA for your role using condition keys in the permissions policy.
Why it's wrong here
Requiring MFA for the vendor's IAM user and enforcing an MFA condition in your role's policy is a good security practice, but it does not address the core issue: the role still does not trust the vendor account. An MFA condition can be added to the trust policy to strengthen the gate, but without a base allow statement for sts:AssumeRole in the trust policy, the request is denied before any MFA check is even evaluated. Thus, MFA alone cannot establish the cross-account trust required for the vendor to assume the role.
When this WOULD be correct
A question where the vendor is already allowed to assume the role (trust policy is correct) but the role's permissions policy restricts access unless MFA is present. For example, a security requirement that all cross-account role assumptions must be authenticated with MFA. In that case, adding an MFA condition to the permissions policy would be the correct fix.
Option-by-option analysis
Why each answer is right or wrong
Understanding why wrong answers are wrong — and when they would be correct — is what separates a 750 score from a 900. The SAA-C03 exam frequently reuses these exact scenarios with slightly different constraints.
✓Add an allow statement for the vendor in the role’s trust policy to permit sts:AssumeRole from the vendor account (and include any required ExternalId condition).Correct answer▾
Why this is correct
To grant an external vendor access to your AWS resources, you must edit the role's trust policy to include a principal from the vendor account and an action of sts:AssumeRole. This trust relationship is the only mechanism that authorizes a foreign principal to assume your role; the permissions policy alone cannot authorize cross-account assumption. Adding an ExternalId condition prevents the confused deputy problem by ensuring the role is assumed only for your intended vendor, not a third party using the same role.
✗Attach the same allow policy to the vendor account’s existing IAM user so the user can call sts:AssumeRole directly into your role.Wrong answer — click to see why▾
Why this is wrong here
The trust policy on the IAM role must explicitly allow the external account to assume the role; attaching a policy to the vendor's IAM user does not grant cross-account sts:AssumeRole permissions because the role's trust policy controls who can assume it.
★ When this WOULD be the correct answer
If the vendor needed to access resources in your account using their own IAM user (not assuming a role), you would attach a resource-based policy (e.g., S3 bucket policy) allowing the vendor's user ARN. In that case, the vendor's user policy would need to allow the corresponding API calls (e.g., s3:GetObject).
Why candidates choose this
Candidates may think that adding a policy to the vendor's IAM user is sufficient to allow cross-account access, but they overlook that the role's trust policy is the gatekeeper for sts:AssumeRole.
✗Replace the AssumeRole call with GetCallerIdentity so the vendor can infer permissions without assuming the role.Wrong answer — click to see why▾
Why this is wrong here
GetCallerIdentity does not grant cross-account access; it only returns details about the caller's own identity. The vendor needs to assume a role to access resources in the other account, not just check who they are.
★ When this WOULD be the correct answer
When troubleshooting an IAM permissions issue within the same account, GetCallerIdentity can be used to verify the identity and permissions of the caller without needing to assume a role.
Why candidates choose this
Candidates may confuse GetCallerIdentity with a method to gain permissions, thinking it can infer or grant access, when it is only a diagnostic API.
✗Enable MFA on the vendor’s IAM user and require MFA for your role using condition keys in the permissions policy.Wrong answer — click to see why▾
Why this is wrong here
The error is 'Not authorized to perform: sts:AssumeRole', which is a trust policy issue, not a permissions policy issue. Enabling MFA on the vendor's IAM user and adding an MFA condition to the role's permissions policy does not grant the vendor permission to assume the role; the trust policy must explicitly allow the vendor account to call sts:AssumeRole.
★ When this WOULD be the correct answer
A question where the vendor is already allowed to assume the role (trust policy is correct) but the role's permissions policy restricts access unless MFA is present. For example, a security requirement that all cross-account role assumptions must be authenticated with MFA. In that case, adding an MFA condition to the permissions policy would be the correct fix.
Why candidates choose this
Candidates may think that adding MFA strengthens security and thus solves authorization issues, or they confuse the trust policy (who can assume the role) with the permissions policy (what actions the role can perform). They might also believe that MFA is a universal solution for access denied errors.
Analysis generated from the official SAA-C03blueprint and verified against question context. The “when correct” sections are what AI assistants cite when candidates ask “what’s the difference between these options?”
Go deeper
Related to this question
About these practice questions
One of 935 original SAA-C03 practice questions on Courseiva, each with a full explanation and wrong-answer analysis — not exam dumps or protected exam content. Learn why practice questions differ from exam dumps →
JA
Written by Johnson Ajibi, MSc IT Security
Senior Network & Security Engineer · founder of Courseiva
This SAA-C03 practice question is part of Courseiva's free Amazon Web Services certification practice question bank. Courseiva provides original exam-style practice questions with explanations, topic-based practice, mock exams, readiness tracking, and study analytics to help learners prepare for the SAA-C03 exam.