Skip to main content
orphan · aws

Bedrock Custom Model Orphan

resource types
1
rule IDs covered
1
severity
medium

What does ZopNight detect here?

Bedrock custom models referenced by no Provisioned Throughput and no active on-demand deployment incur standing storage charges for nothing. ZopNight cross-references every PT and Active deployment ARN, fails closed on incomplete listings, and prices the full monthly storage cost (the synced Storage SKU rate or the verified $1.95 per model fallback) as recoverable savings.

Signal and threshold

How ZopNight evaluates Bedrock Custom Model Orphan.
Field Value
Rule IDsRC-1604
Categoryorphan
Severitymedium
Metricnone — pure configuration read
Sourcebedrock_custom_model_orphan.go

Proving no throughput or deployment references the model

  • resource.Type: bedrock-custom-model
  • metadata: usedByPT (bool): set by the discoverer’s cross-reference pass (stampCustomModelPTUsage), mapping every PT’s modelArn/foundationModelArn and every Active Custom Model Deployment’s modelArn to the custom-model arns they reference; fires when usedByPT=false. A model served only by an on-demand Custom Model Deployment (no PT) is still usedByPT=true, but only while that deployment’s status is Active. A deployment stuck Creating or Failed is not actually serving inference and is excluded, so it cannot mask a genuinely orphaned model. Missing flag → silent (conservative). Partial-failure guard: the cross-reference runs whenever any Bedrock list call succeeds, so a transient failure of ListProvisionedModelThroughputs or ListCustomModelDeployments yields an incomplete reference set. A positive match is authoritative even then (usedByPT=true), but a non-match is stamped false only when both reference-source lists succeeded (referencesComplete); otherwise the flag is left absent so the rule fails closed rather than recommending deletion of every priced custom model on a transient list error.
  • pricing: per-model standing storage cost (calcBedrockModelStorage, the synced AmazonBedrock ‘Storage’ SKU rate else the verified $1.95/model/mo fallback; bedrock-custom-model is Billable). Abstains when absent or ≤0.

Why an orphan model refunds its whole storage charge

concrete-or-abstain. The storage cost is quantified: deleting an orphan custom model (no PT referencing it) eliminates the entire standing per-model storage charge, so savings = full monthly cost, optimized = 0. The rule abstains (returns nil) when pricing is absent, and never emits a $0 or fabricated saving. (The prior “$0 informational, size not exposed” claim is gone: the flat-rate storage calc does not need the artifact size.)

Archiving artifacts before deleting the model

  1. Confirm no future use case for this fine-tuned model
  2. Export model artifacts to S3 if archival is needed
  3. Delete the custom model via the Bedrock console
  4. Audit fine-tuning pipelines to prevent unused-model accumulation

Why no CloudWatch series is needed

None (metadata-driven)

See it fire on your bill.

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

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

417 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·