What is the SageMaker Model Registry and how does it support a governed release process?
Updated Aug 1, 2026
Short answer
The Model Registry versions models into model package groups with metadata, metrics and lineage, and carries an approval status that deployment automation keys off — separating 'a model was trained' from 'a model is approved for production'.
Deep explanation
Without a registry, deployment tends to mean "someone points at an S3 path", which leaves no record of what is running, why it was chosen, or who approved it. The registry makes the model a first-class governed artefact.
Structure: a model package group (e.g. fraud-models) contains ordered model package versions. Each version records the artefact URI, the inference image, supported instance types, evaluation metrics, bias and explainability reports, and an approval status of PendingManualApproval, Approved or Rejected.
from sagemaker.model_metrics import ModelMetrics, MetricsSource
model_metrics = ModelMetrics( model_statistics=MetricsSource( s3_uri="s3://my-bucket/eval/evaluation.json", content_type="application/json"), bias=MetricsSource( s3_uri="s3://my-bucket/clarify/bias.json", content_type="application/json"), explainability=MetricsSource( s3_uri="s3://my-bucket/clarify/shap.json", content_type="application/json"),)
model_package = estimator.register( model_package_group_name="fraud-models", content_types=["application/json"], response_types=["application/json"], inference_instances=["ml.m5.xlarge", "ml.c5.xlarge"], transform_instances=["ml.m5.4xlarge"], model_metrics=model_metrics, approval_status="PendingManualApproval", # nothing auto-deploys customer_metadata_properties={ "training_data_window": "2026-01-01/2026-06-30", "git_commit": "9f3ac21", "owner": "fraud-ml", },)Approval then becomes the deployment trigger:
sm.update_model_package( ModelPackageArn=arn, ModelApprovalStatus="Approved", ApprovalDescription="Risk review 2026-07-14; AUC 0.842, DPPL within tolerance",)An EventBridge rule listens for the state change and starts the deployment pipeline:
{ "source": ["aws.sagemaker"], "detail-type": ["SageMaker Model Package State Change"], "detail": { "ModelPackageGroupName": ["fraud-models"], "ModelApprovalStatus": ["Approved"] }}This gives you the property auditors ask for: nothing reaches production without a recorded, attributable approval, and every deployed version traces back to its training job, data and metrics.
Real-world example
An insurer under model-risk regulation registers every candidate with metrics, a Clarify bias report and a model card. A validator reviews and approves in the registry; only then does automation deploy. When a regulator asks which model scored a policy in March and who signed it off, the answer is a registry lookup plus a CloudTrail entry, not an archaeology exercise across notebooks.
Common mistakes
- - Registering models with no metrics attached, leaving reviewers nothing to judge.
- - Auto-approving at registration, which reduces the registry to a filing cabinet and defeats the control.
- - Deploying from `estimator.deploy()` in a notebook, bypassing the registry entirely.
- - Using one group for unrelated models
- a group should represent one model's lineage over time so versions are comparable.
- - Not recording the git commit and data window, so a version cannot be reproduced later.
Follow-up questions
- How do you roll back to a previous model version?
- What is a SageMaker Model Card and how does it relate to the registry?
- How do you promote a model across accounts?