Good practice is not just finding the correct option. The wrong answers often show the exact trap the exam wants you to fall into.
A
Distractor review
Add kms:Decrypt to the KMS key policy in Account A for the Account B role arn:aws:iam::account-b:role/app-read, and remove kms:Decrypt from the role policy in Account B.
Adding kms:Decrypt to the KMS key policy is a valid approach, but removing kms:Decrypt from the role policy is not required to fix an AccessDenied kms:Decrypt failure. KMS authorization requires both (1) identity policy permission (in Account B) and (2) the KMS key policy permission (in Account A). Removing the role permission can cause the failure to continue or move to a different authorization denial.
B
Distractor review
Update the IAM role in Account B to use the s3:GetObject permission only, and rely on S3 to authorize KMS decrypt automatically.
S3 authorization to call GetObject does not eliminate the need for KMS permissions to call kms:Decrypt. For SSE-KMS, the GetObject request ultimately requires kms:Decrypt in KMS, which is authorized by both the caller’s IAM permissions and the KMS key policy.
C
Best answer
Modify the KMS key policy in Account A to allow kms:Decrypt for the Account B role arn:aws:iam::account-b:role/app-read, using the appropriate cross-account conditions (for example, allowing the use via S3 and the expected encryption context for the bucket).
For SSE-KMS, S3 must call KMS Decrypt when serving objects. KMS authorization is evaluated against the KMS key policy in Account A in addition to the identity policy in Account B. If the error includes kms:Decrypt AccessDenied in a cross-account scenario, the most direct fix is to update the KMS key policy to allow the Account B role to use the key for decrypt (often with conditions tied to S3 usage and the specific bucket/object encryption context).
D
Distractor review
Switch the S3 bucket encryption from SSE-KMS to SSE-S3, keeping all existing IAM and KMS configuration unchanged.
Changing to SSE-S3 avoids KMS decryption entirely, so it could remove the kms:Decrypt failure. However, that is not a targeted fix for the underlying authorization issue and conflicts with the stated requirement of using the existing customer-managed KMS key for SSE-KMS.