Skip to main content
compliance · aws

Bedrock custom models encrypted with an AWS owned key instead of a customer managed KMS key

resource types
1
rule IDs covered
1
severity
medium

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

How ZopNight evaluates Bedrock custom models encrypted with an AWS owned key instead of a customer managed KMS key.
Field Value
Rule IDsRC-1631
Categorycompliance
Severitymedium
Metricnone — pure configuration read
Thresholdno customer managed key
SourceZopNight
Permissions usedbedrock:ListCustomModels · bedrock:GetCustomModel

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:

Terminal window
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)"
done

The 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

  1. Create or choose a customer managed KMS key whose key policy allows Bedrock to use it for the customization job’s role.
  2. Run the model customization job again, passing the key as the output model key (--custom-model-kms-key-id on aws bedrock create-model-customization-job).
  3. Validate the new model and point deployments or provisioned throughput at it.
  4. Delete the model that uses the AWS owned key once traffic has moved.

See it fire on your bill.

Connect an account read-only. The first findings land in minutes.

472 rule families across 353 resource types on 22 platforms. Every threshold, metric, and IAM action is documented on these pages before you grant anything.

472 rule families documented
353 resource types covered
read-only default access level
Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console· Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console·