Bedrock custom models encrypted with an AWS owned key instead of a customer managed KMS key
What does ZopNight detect here?
ZopNight flags an Amazon Bedrock custom model that is encrypted with the default AWS owned key rather than a customer managed AWS KMS key, visible as an empty `modelKmsKeyArn` in `bedrock:GetCustomModel`. With an AWS owned key you cannot audit, rotate or revoke access to your fine-tuned model artifacts. No saving is involved.
Signal and threshold
| Field | Value |
|---|---|
| Rule IDs | RC-1631 |
| Category | compliance |
| Severity | medium |
| Metric | none — pure configuration read |
| Threshold | no customer managed key |
| Source | ZopNight |
| Permissions used | bedrock:ListCustomModels · bedrock:GetCustomModel |
Where it applies
Why key ownership matters for a fine-tuned model
A custom model is the product of your training data. The custom model encryption guide explains that Bedrock encrypts custom models with AWS owned keys by default, and that you cannot view, manage or use AWS owned keys or audit their use. With a customer managed key, Bedrock accesses the key through a KMS grant that you can retire or revoke, and if you remove its access Bedrock can no longer use the model encrypted by that key. That revocation lever is what security reviews usually ask for.
Checking which key each custom model uses
get-custom-model returns modelKmsKeyArn when a customer managed key was used; None in text
output means the AWS owned default:
for m in $(aws bedrock list-custom-models --query 'modelSummaries[].modelArn' --output text); do echo "$m $(aws bedrock get-custom-model --model-identifier "$m" \ --query modelKmsKeyArn --output text)"doneThe single test applied
ZopNight records, for each custom model, whether it has a customer managed key. The finding fires only when that record explicitly says it does not. There is no threshold or time window.
When ZopNight gives no finding
If the key information could not be read for a model, the record is missing and the rule stays silent rather than assuming the worst. Models that do use a customer managed key are never reported.
A control gap with no dollar figure
The saving is $0. Moving to a customer managed key adds cost: the Bedrock guide notes that AWS KMS charges apply for customer managed keys, while the AWS owned default is free. The trade is a small KMS bill for the ability to audit, rotate and cut off access to the model.
Moving to a customer managed key
- Create or choose a customer managed KMS key whose key policy allows Bedrock to use it for the customization job’s role.
- Run the model customization job again, passing the key as the output model key
(
--custom-model-kms-key-idonaws bedrock create-model-customization-job). - Validate the new model and point deployments or provisioned throughput at it.
- Delete the model that uses the AWS owned key once traffic has moved.