fix(opensearchservice): use KMS Key ARN for cross-account encryption #36020
+142
−3
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Issue # (if applicable)
Closes #36017.
Reason for this change
OpenSearch Domain construct fails when using cross-account KMS keys for encryption at rest. The construct currently uses KMS Key ID (
keyRef.keyId) which doesn't work for cross-account scenarios - OpenSearch requires the full ARN to properly identify and access keys from different accounts.This blocks users from implementing cross-account encryption patterns, which are common in enterprise multi-account architectures.
Description of changes
Added intelligent KMS key identifier selection logic that chooses between Key ID and Key ARN based on the key's account and region:
Implementation details:
selectKmsKeyIdentifier()private method to Domain classStack.of()andToken.isUnresolved()for account/region comparisondomain.tsto use the new selection logicThis follows the same pattern used in the DynamoDB construct for encryption key handling.
Describe any new or updated permissions being added
N/A - No new IAM permissions required. This change only affects how the KMS key identifier is passed to CloudFormation.
Description of how you validated changes
Unit tests: Added 3 comprehensive test cases:
Integration tests: All 18 OpenSearch integration tests passed with UNCHANGED snapshots, confirming no breaking changes to existing scenarios
Test results: 1,709/1,709 unit tests passed (100% pass rate)
Backward compatibility: Verified via UNCHANGED integration test snapshots - existing same-account scenarios continue to use Key ID format
Checklist
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license