Courseiva
Design Secure Architectures →mediumMultiple Choice

Cross-Account SSE-KMS Uploads: Required KMS Key Policy and IAM Permissions

Company A stores encrypted log files in its S3 bucket using SSE-KMS with a customer-managed KMS key. A partner application in Company B uploads objects into Company A's bucket using an IAM role in Company B. Uploads fail with an error indicating KMS access is denied (kms:Encrypt not authorized). Neither the partner IAM policy nor the S3 bucket policy currently mentions KMS.

What is the most secure and correct change to allow cross-account uploads to succeed?

⚠ Common exam trap

Watch out — candidates often assume an IAM policy in the partner account alone is sufficient for cross-account KMS access, forgetting that KMS key policies are the definitive authorization mechanism for external principals.

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

✓

In Company A's KMS key policy, allow Company B's partner role principal to use the key for kms:Encrypt, kms:GenerateDataKey, and kms:DescribeKey, and also add a matching IAM policy in Company B that grants the partner role those same KMS actions on Company A's key ARN, constrained to the target S3 bucket context when possible.

For cross-account SSE-KMS uploads, the KMS key policy must explicitly grant the external IAM role principal the required KMS actions (kms:Encrypt, kms:GenerateDataKey, and kms:DescribeKey). Additionally, the partner account's IAM policy must also allow those same actions on the key ARN. This dual-permission model is required because KMS does not implicitly trust IAM policies in the key owner's account for cross-account access; the key policy is the authoritative gatekeeper. Option A correctly implements both sides, and constraining to the target S3 bucket context (via kms:ViaService or kms:EncryptionContext) adds a security best practice.

Answer analysis

Option-by-option breakdown

For each option: why learners choose it and why it is or isn't the right answer here.

  • ✓

    In Company A's KMS key policy, allow Company B's partner role principal to use the key for kms:Encrypt, kms:GenerateDataKey, and kms:DescribeKey, and also add a matching IAM policy in Company B that grants the partner role those same KMS actions on Company A's key ARN, constrained to the target S3 bucket context when possible.

    Why this is correct

    Cross-account SSE-KMS requires both the KMS key policy in the key owner account and an IAM policy in the caller account to allow the required KMS actions. Scoping the permissions to the specific bucket or encryption context reduces blast radius.

  • ✗

    In Company B's IAM policy, allow kms:Encrypt on Company A's KMS key ARN, without changing Company A's key policy.

    Why it's wrong here

    Adding only an IAM policy in Company B cannot grant access to Company A's KMS key because KMS key policies are the ultimate authority for cross-account access. Unless Company A's key policy includes an explicit Allow statement granting the external principal (or account) the required actions, the request will fail even if Company B's IAM policy permits it. Additionally, the IAM policy alone would need to cover kms:GenerateDataKey and kms:DescribeKey, not just kms:Encrypt, since S3 SSE-KMS uses GenerateDataKey to obtain a plaintext key.

  • ✗

    Create a new KMS key in Company B and configure Company A's S3 bucket to use that key for SSE-KMS.

    Why it's wrong here

    Creating a new KMS key in Company B and reconfiguring Company A's bucket to use it would not resolve the original denial; it would instead change the trust boundary and operational ownership. The original issue remains: Company A's existing key policy denies access, and simply switching keys does not address that. Moreover, cross-account usage of a key owned by Company B would require Company A's bucket policy and Company B's key policy to be mutually permissive, adding complexity and potentially violating security requirements if the bucket must remain under Company A's control.

  • ✗

    Disable key policy restrictions by setting the KMS key to enabled and removing all policy statements so that encryption automatically works for any principal.

    Why it's wrong here

    Disabling key policy restrictions by removing all statements would make the key effectively unusable because with no Allow statements, no principal has permission—the default behavior is implicit denial. Even if the intent was to allow all principals, that would be an insecure and non-least-privilege approach, exposing the key to any AWS account. The correct fix is to add a scoped, explicit Allow in the key policy for the partner role, not to gut the policy entirely or rely on the key being enabled.

Quick reference

AWS S3 Storage Class Comparison

Storage ClassMin DurationRetrievalUse Case
S3 StandardNoneImmediateFrequently accessed data
S3 Standard-IA30 daysImmediateInfrequent access, rapid retrieval
S3 One Zone-IA30 daysImmediateNon-critical infrequent data
S3 Intelligent-TieringNoneImmediate–hoursUnknown or changing access patterns
S3 Glacier Instant90 daysMillisecondsArchive with instant retrieval
S3 Glacier Flexible90 daysMinutes–hoursArchive, flexible retrieval
S3 Glacier Deep Archive180 daysHoursLong-term compliance archive

About these practice questions

This SAA-C03 question is part of Courseiva's 935-question bank — original exam-style content with full explanations and wrong-answer analysis, never real exam questions or exam dumps. Learn why practice questions differ from exam dumps →

How Courseiva writes practice questions · Editorial policy

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.