Govern models with MLflow and Amazon SageMaker AI Model Registry sync: Part 2 AWS published a guide for governing ML models across accounts using MLflow and Amazon SageMaker AI Model Registry sync, detailing hub-and-spoke and hybrid topologies for regulated environments. The post extends Part 1's single-account setup to cross-account governance, introducing administrator and model owner personas, and includes working notebooks in a GitHub repository. Artificial Intelligence /blogs/machine-learning/ Govern models with MLflow and Amazon SageMaker AI Model Registry sync: Part 2 Governing models across accounts is the natural next step once automatic model registration is in place. In Part 1 /blogs/machine-learning/govern-models-with-mlflow-and-amazon-sagemaker-ai-model-registry-sync-part-1/ we introduced how managed MLflow on Amazon SageMaker AI /sagemaker-ai/ synchronizes registered models into the SageMaker AI Model Registry https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry.html . We walked through a single-account setup where AWS Identity and Access Management IAM condition keys separate the data scientist and governance officer personas. Larger organizations, however, separate development from production at the account level. They run multiple development accounts and a central governance function. In regulated environments, they also impose a hard requirement that development workloads cannot write into production-grade accounts. In this post, we extend the same building blocks to two cross-account governance topologies. The first is a hub-and-spoke pattern that centralizes governance by sharing one MLflow app across development accounts with AWS Resource Access Manager AWS RAM . The second is a hybrid pattern for regulated environments that keeps development accounts fully isolated from the governance hub. We close by showing how an approved model moves from the registry to a deployed endpoint through continuous integration and continuous delivery CI/CD , and we compare the topologies to help you choose one. Working notebooks are available in the accompanying GitHub repository https://github.com/aws-samples/genai-ml-platform-examples/tree/main/operations . The personas Part 1 /blogs/machine-learning/govern-models-with-mlflow-and-amazon-sagemaker-ai-model-registry-sync-part-1/ introduced the data scientist works in a Jupyter notebook, interacts only with MLflow and the governance officer works in the Amazon SageMaker Studio Models UI . Cross-account topologies add two more. The administrator performs the one-time cross-account setup: AWS RAM shares, bucket policies, and destination groups, using the console or CLI. In the hybrid topology, a model owner in each development account approves models locally before they are promoted to the hub. Each topology that follows is organized by these persona workflows. Prerequisites Before starting this walkthrough, make sure you have the following: - Completion of Part 1. Familiarity with automatic model registration, the lifecycle staging construct, and IAM condition key gates from Part 1 /blogs/machine-learning/govern-models-with-mlflow-and-amazon-sagemaker-ai-model-registry-sync-part-1/ . - Two AWS accounts , a development spoke account and a governance hub account. Configure a named AWS Command Line Interface AWS CLI profile for each for example, mlops-spoke and mlops-hub . For setup details, see the Account and profile setup REPO LINK account-and-profile-setup section in the accompanying repository. - The accompanying AWS CloudFormation stack deployed into both accounts. The template cfn/sagemaker-studio-mlflow.yaml REPO LINK provisions a SageMaker AI Studio domain, user profile, execution role, and a Managed MLflow app with AutoModelRegistrationEnabled . Deploy one stack per account. See Provision the environment REPO LINK provision-the-environment-cloudformation in the repository README for the exact commands. For the full provisioning walkthrough, including CloudFormation deployment, reading stack outputs, and setting environment variables, refer to the accompanying repository REPO LINK . Topology 1: Hub-and-spoke central governance For larger organizations with multiple teams, it is common to have multiple separate development accounts with a central governance account. This topology provides workload isolation for development within each development account, with shared services offered through a centralized account hosting the MLflow app and the central Model Registry. The centralized hub account shares the MLflow app with one or more spoke development accounts using AWS RAM. This pattern extends the approach described in Centralize model governance with SageMaker Model Registry and AWS RAM sharing /blogs/machine-learning/centralize-model-governance-with-sagemaker-model-registry-resource-access-manager-sharing/ . The following figure illustrates the workflow: 1. The hub creates an AWS RAM resource share for the MLflow app and the spoke accepts the invitation. Using external principals lets the share work even when the accounts are not in the same organization. 2. A data scientist in the spoke registers a model against the shared MLflow app. With automatic registration, you get the Model Package Group and version in the hub account, created synchronously with the register call. 3. The hub attaches a resource policy to the group and shares it back to the spoke with the AllowDeploy managed permission, so the spoke can describe and deploy the model. 4. The governance officer validates the synced metrics and lineage and approves the model centrally in the hub. 5. The approval event triggers a CI/CD pipeline, and a machine learning ML engineer deploys the approved model to an Amazon SageMaker endpoint in the spoke account. Administrator: Set up cross-account access one-time The administrator prepares the hub and the sharing before either persona starts working. Prerequisite: model artifacts live in the hub’s MLflow artifact store, an S3 bucket in the hub account. Cross-account S3 access is needed on both sides: - Resource side: a bucket policy on the hub artifact bucket granting the spoke account s3:GetObject , s3:PutObject , s3:ListBucket , and s3:GetBucketLocation . Without it, the data scientist’s log model call fails with an S3 access error before registration happens. - Identity side: the spoke execution role needs s3:GetObject on the hub bucket for deploy-time artifact reads. AmazonSageMakerFullAccess covers buckets whose name contains sagemaker . If the spoke role is scoped tighter, add the hub bucket explicitly. With the prerequisite in place, the administrator: 1. Creates an AWS RAM resource share for the hub MLflow app, which the spoke accepts. 2. After the first registration, attaches a resource policy to the synced Model Package Group and RAM-shares it back to the spoke with the AllowDeploy managed permission. In the hub AWS RAM console both shares show as Active: Data scientist: Register from the spoke, in a notebook The workflow is identical to Part 1, with one difference: the notebook points the MLflow tracking URI at the hub app’s Amazon Resource Name ARN . Automatic registration creates the Model Package Group and version in the hub , synchronously with the register call. The candidate appears in the hub registry pending approval, with the metrics, evaluation card, and lineage from the spoke’s run, as shown in the following figure: Two points to plan for. First, automatic registration appends a short hash suffix to the group name, so my-model becomes my-model-