> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tensor9.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ECR

> AWS ECR. A private registry for container images, with per repository IAM permissions, image scanning and lifecycle rules that expire old tags.

**On this page**

* [Coverage by target cloud](#coverage-by-target-cloud)
* [How the targets compare](#how-the-targets-compare)
  * [Infrastructure-only adaptation](#infrastructure-only-adaptation)
* [On Google Cloud](#on-google-cloud)
* [On Azure](#on-azure)
* [On OCI](#on-oci)
* [On Private Kubernetes](#on-private-kubernetes)
  * [Via Zot Registry](#via-zot-registry)
  * [Via Distribution Registry](#via-distribution-registry)
  * [Via Harbor Registry](#via-harbor-registry)

## Coverage by target cloud

| Target             | Available |
| ------------------ | --------- |
| Google Cloud       | ✓         |
| Azure              | ✓         |
| OCI                | ✓         |
| Private Kubernetes | ✓         |

## How the targets compare

Each row compares a capability of ECR with its adaptation on each target.
A dash means this row is not stated for that target.

### Infrastructure-only adaptation

| Capability                                    | ECR                                                     | Google Cloud                                                                                                               | Azure                                                                                     | OCI                                                                                                          | Private Kubernetes · Zot Registry                                                                          | Private Kubernetes · Distribution Registry                                                                 | Private Kubernetes · Harbor Registry                                                                       |
| --------------------------------------------- | ------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| Repository topology · repository organization | ECR: repositories within an account-and-region registry | Artifact Registry: one Docker-format repository per ECR repository (N to N), topology preserved                            | ACR: one provisioned registry contains distinct repository paths; image references change | OCIR: one repository per ECR repository (N to N), repository organization preserved                          | in-cluster: the ECR repository set becomes the registry's repositories/namespaces (N to N)                 | in-cluster: the ECR repository set becomes the registry's repositories/namespaces (N to N)                 | in-cluster: the ECR repository set becomes the registry's repositories/namespaces (N to N)                 |
| Tag immutability                              | Yes - image\_tag\_mutability                            | Yes - IMMUTABLE\_TAGS setting                                                                                              | -                                                                                         | Yes - is\_immutable per-repo flag                                                                            | Partial - Zot has no per-repo immutable-tag lock                                                           | No - Distribution has no immutable-tag control                                                             | Yes - Harbor immutable-tag rules (per-repo)                                                                |
| Lifecycle / retention · scope                 | ECR: per-repository expiry rules                        | per-repository keep/delete rules; the bounded single-image-package count/age mapping does not preserve the full ECR policy | ACR: registry-wide retention (Premium tier), a scope change that is surfaced              | OCIR: image retention policies, region-wide by default and overridable per repository, surfaced at the build | Zot retention policies (registry-level)                                                                    | Distribution offers blob garbage-collection only, not tag/age retention                                    | Harbor tag-retention is per-repository, the closest in-cluster analog to ECR lifecycle rules               |
| Vulnerability scanning                        | Yes - ECR enhanced (Inspector)                          | Partial - Container Analysis: on-push + continuous                                                                         | Partial - Microsoft Defender for Containers: native scanner, different coverage           | Partial - OCI Vulnerability Scanning: native scanner, different coverage                                     | Partial - Zot exposes CVE search via an optional Trivy-DB extension (not built-in scan-on-push)            | No - CNCF Distribution has no built-in vulnerability scanner                                               | Partial - Harbor ships a built-in Trivy integration (scan-on-push)                                         |
| API coverage                                  | full                                                    | high                                                                                                                       | high                                                                                      | high                                                                                                         | high                                                                                                       | high                                                                                                       | high                                                                                                       |
| Tag immutability                              | Yes - per-repo image\_tag\_mutability                   | -                                                                                                                          | Partial - image and repository write locks; different from ECR tag immutability           | -                                                                                                            | -                                                                                                          | -                                                                                                          | -                                                                                                          |
| Data path · managed vs in-cluster             | ECR: AWS-managed registry                               | -                                                                                                                          | -                                                                                         | -                                                                                                            | in-cluster registry starts empty: deploy + load (via the appliance) + rewrite refs; no pull-through to AWS | in-cluster registry starts empty: deploy + load (via the appliance) + rewrite refs; no pull-through to AWS | in-cluster registry starts empty: deploy + load (via the appliance) + rewrite refs; no pull-through to AWS |

## On Google Cloud

| Operation                | Area         | Support      | Depth        | Notes                                                                                                                                                                                                                                                                                      |
| ------------------------ | ------------ | ------------ | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Registry authentication  | Auth         | Supported    | Common       | Native registry credentials: the GKE node service account needs Artifact Registry Reader; application workload federation is separate                                                                                                                                                      |
| docker push / pull       | Image path   | Supported    | Common       | byte-identical OCI Distribution v2; the host changes to \<location>-docker.pkg.dev                                                                                                                                                                                                         |
| Image tag policy mapping | Immutability | Supported    | Most usage   | IMMUTABLE\_TAGS repository setting                                                                                                                                                                                                                                                         |
| Lifecycle policy mapping | Lifecycle    | Partial      | Most usage   | Per-repository cleanup policies provide count or age retention for one image package. Keeping ten versions combines delete and keep rules. Tag selectors, ECR rule priority, age clocks and immutable tags require separate policy decisions; the full ECR rule language is not preserved. |
| Replication config       | Replication  | Out of scope | Full surface | ECR destination push replication is not mapped. Multi-region storage, pull-through caches and virtual repositories do not create the specified regional or account replicas; deliver required image copies through your pipeline.                                                          |
| Repository provisioning  | Repositories | Supported    | Common       | one Docker-format repository (format = DOCKER) per ECR repository (N to N)                                                                                                                                                                                                                 |
| Scan-on-push findings    | Scanning     | Partial      | Most usage   | Container Analysis / Artifact Analysis (on-push + continuous)                                                                                                                                                                                                                              |

#### How it works

On AWS your build pushes container images to **Amazon ECR** and your workloads pull from it. **Google Artifact Registry** is Google Cloud's unified artifact service: one system that hosts many package formats, governs access with per-repository IAM, and integrates with VPC Service Controls and customer-managed encryption. At the build, Tensor9 reads your ECR repositories and provisions a Docker-format Artifact Registry repository for each one; afterward your own `docker push` and `docker pull` reach it directly, without routing image traffic through Tensor9.

The image itself never changes. ECR and Artifact Registry both speak the **OCI Distribution v2** protocol, so your image manifest, its layer blobs, and their content digests are byte-identical on both sides; docker and containerd are untouched. The target reference includes the `<location>-docker.pkg.dev` host, project, repository and image path.

This mapping provisions a target registry and updates image references. Docker and containerd use the target's registry protocol and credentials. It does not provide the AWS ECR management or authorization-token API. Applications that call ECR directly, including `GetAuthorizationToken`, need a separate integration.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTg0IiB2aWV3Qm94PSIwIDAgODM2IDE4NCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB5b3VyIGJ1aWxkIHB1c2hlcyBpbWFnZXMgdG8gQW1hem9uIEVDUiBhbmQgeW91ciB3b3JrbG9hZHMgcHVsbCBmcm9tIGl0LiBBZnRlcjogb24gdGhlIHRhcmdldCBjbG91ZCB0aGUgc2FtZSBkb2NrZXIgcHVzaCBhbmQgcHVsbCByZWFjaCBHb29nbGUgQXJ0aWZhY3QgUmVnaXN0cnksIHByb3Zpc2lvbmVkIGF0IHRoZSBidWlsZC4gT25seSB0aGUgcmVnaXN0cnkgYWRkcmVzcyBpcyByZXdyaXR0ZW47IHRoZSBpbWFnZSBpcyB1bmNoYW5nZWQgYW5kIFRlbnNvcjkgaXMgbm90IGluIHRoZSBwdWxsIHBhdGguIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojMzM0MTU1fTwvc3R5bGU+CjxkZWZzPjxtYXJrZXIgaWQ9ImVjcmh3LWdhciIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjOTRhM2I4Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB4PSIxNiIgeT0iNDAiIHdpZHRoPSIzNTgiIGhlaWdodD0iMTIwIiByeD0iMTQiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSIzMCIgeT0iNjAiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiM5NGEzYjgiPk9OIEFXUyBUT0RBWTwvdGV4dD4KPHJlY3QgeD0iMzAiIHk9Ijc4IiB3aWR0aD0iMTE4IiBoZWlnaHQ9IjYwIiByeD0iMTEiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iODkiIHk9IjEwNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMnB4Ij5idWlsZCAvIHBvZHM8L3RleHQ+Cjx0ZXh0IHg9Ijg5IiB5PSIxMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5kb2NrZXIgcHVzaCAvIHB1bGw8L3RleHQ+CjxsaW5lIHgxPSIxNDgiIHkxPSIxMDgiIHgyPSIyMDYiIHkyPSIxMDgiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2Vjcmh3LWdhcikiLz4KPHJlY3QgeD0iMjEwIiB5PSI3OCIgd2lkdGg9IjE1MCIgaGVpZ2h0PSI2MCIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjI4NSIgeT0iMTA0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEycHgiPkFtYXpvbiBFQ1I8L3RleHQ+Cjx0ZXh0IHg9IjI4NSIgeT0iMTIyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+QVdTLW1hbmFnZWQ8L3RleHQ+Cjx0ZXh0IHg9IjQxOCIgeT0iMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtd2VpZ2h0OjcwMCI+Y29tcGlsZWQgYXQgdGhlIGJ1aWxkPC90ZXh0Pgo8cmVjdCB4PSI0NjIiIHk9IjQwIiB3aWR0aD0iMzYyIiBoZWlnaHQ9IjEyMCIgcng9IjE0IiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iNDc2IiB5PSI2MCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6IzA0Nzg1NyI+T04gR09PR0xFIENMT1VEPC90ZXh0Pgo8cmVjdCB4PSI0NzYiIHk9Ijc4IiB3aWR0aD0iMTA0IiBoZWlnaHQ9IjYwIiByeD0iMTEiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNTI4IiB5PSIxMDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTJweCI+YnVpbGQgLyBwb2RzPC90ZXh0Pgo8dGV4dCB4PSI1MjgiIHk9IjEyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDU5NjY5Ij5zYW1lIGNvbW1hbmRzPC90ZXh0Pgo8bGluZSB4MT0iNTgwIiB5MT0iMTA4IiB4Mj0iNjE2IiB5Mj0iMTA4IiBzdHJva2U9IiM5NGEzYjgiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNlY3Jody1nYXIpIi8+CjxyZWN0IHg9IjYyMCIgeT0iNzQiIHdpZHRoPSIxODgiIGhlaWdodD0iNjgiIHJ4PSIxMSIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNyIvPgo8dGV4dCB4PSI3MTQiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjExLjVweCI+R29vZ2xlIEFydGlmYWN0IFJlZ2lzdHJ5PC90ZXh0Pgo8dGV4dCB4PSI3MTQiIHk9IjExNSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM2NDc0OGIiPiZsdDtsb2NhdGlvbiZndDstZG9ja2VyLnBrZy5kZXY8L3RleHQ+Cjx0ZXh0IHg9IjcxNCIgeT0iMTMxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij50aGUgdGFyZ2V0IGNsb3VkJ3MgbmF0aXZlIHJlZ2lzdHJ5PC90ZXh0Pgo8dGV4dCB4PSI2NDMiIHk9IjE3NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC13ZWlnaHQ6NzAwIj5UZW5zb3I5IGlzIG5vdCBpbiB0aGUgcHVsbCBwYXRoPC90ZXh0Pgo8L3N2Zz4=" alt="Before: on AWS your build pushes images to Amazon ECR and your workloads pull from it. After: on the target cloud the same docker push and pull reach Google Artifact Registry, provisioned at the build. Only the registry address is rewritten; the image is unchanged and Tensor9 is not in the pull path." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTg0IiB2aWV3Qm94PSIwIDAgODM2IDE4NCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB5b3VyIGJ1aWxkIHB1c2hlcyBpbWFnZXMgdG8gQW1hem9uIEVDUiBhbmQgeW91ciB3b3JrbG9hZHMgcHVsbCBmcm9tIGl0LiBBZnRlcjogb24gdGhlIHRhcmdldCBjbG91ZCB0aGUgc2FtZSBkb2NrZXIgcHVzaCBhbmQgcHVsbCByZWFjaCBHb29nbGUgQXJ0aWZhY3QgUmVnaXN0cnksIHByb3Zpc2lvbmVkIGF0IHRoZSBidWlsZC4gT25seSB0aGUgcmVnaXN0cnkgYWRkcmVzcyBpcyByZXdyaXR0ZW47IHRoZSBpbWFnZSBpcyB1bmNoYW5nZWQgYW5kIFRlbnNvcjkgaXMgbm90IGluIHRoZSBwdWxsIHBhdGguIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojY2JkNWUxfTwvc3R5bGU+CjxkZWZzPjxtYXJrZXIgaWQ9ImVjcmh3LWdhciIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjOTRhM2I4Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB4PSIxNiIgeT0iNDAiIHdpZHRoPSIzNTgiIGhlaWdodD0iMTIwIiByeD0iMTQiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSIzMCIgeT0iNjAiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjOTRhM2I4Ij5PTiBBV1MgVE9EQVk8L3RleHQ+CjxyZWN0IHg9IjMwIiB5PSI3OCIgd2lkdGg9IjExOCIgaGVpZ2h0PSI2MCIgcng9IjExIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9Ijg5IiB5PSIxMDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTJweCI+YnVpbGQgLyBwb2RzPC90ZXh0Pgo8dGV4dCB4PSI4OSIgeT0iMTIyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+ZG9ja2VyIHB1c2ggLyBwdWxsPC90ZXh0Pgo8bGluZSB4MT0iMTQ4IiB5MT0iMTA4IiB4Mj0iMjA2IiB5Mj0iMTA4IiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNlY3Jody1nYXIpIi8+CjxyZWN0IHg9IjIxMCIgeT0iNzgiIHdpZHRoPSIxNTAiIGhlaWdodD0iNjAiIHJ4PSIxMSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyODUiIHk9IjEwNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMnB4Ij5BbWF6b24gRUNSPC90ZXh0Pgo8dGV4dCB4PSIyODUiIHk9IjEyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPkFXUy1tYW5hZ2VkPC90ZXh0Pgo8dGV4dCB4PSI0MTgiIHk9IjMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXdlaWdodDo3MDAiPmNvbXBpbGVkIGF0IHRoZSBidWlsZDwvdGV4dD4KPHJlY3QgeD0iNDYyIiB5PSI0MCIgd2lkdGg9IjM2MiIgaGVpZ2h0PSIxMjAiIHJ4PSIxNCIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjQ3NiIgeT0iNjAiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjOTBkZWM4Ij5PTiBHT09HTEUgQ0xPVUQ8L3RleHQ+CjxyZWN0IHg9IjQ3NiIgeT0iNzgiIHdpZHRoPSIxMDQiIGhlaWdodD0iNjAiIHJ4PSIxMSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI1MjgiIHk9IjEwNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMnB4Ij5idWlsZCAvIHBvZHM8L3RleHQ+Cjx0ZXh0IHg9IjUyOCIgeT0iMTIyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzYiPnNhbWUgY29tbWFuZHM8L3RleHQ+CjxsaW5lIHgxPSI1ODAiIHkxPSIxMDgiIHgyPSI2MTYiIHkyPSIxMDgiIHN0cm9rZT0iIzQxNGU2MiIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2Vjcmh3LWdhcikiLz4KPHJlY3QgeD0iNjIwIiB5PSI3NCIgd2lkdGg9IjE4OCIgaGVpZ2h0PSI2OCIgcng9IjExIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS43Ii8+Cjx0ZXh0IHg9IjcxNCIgeT0iOTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTEuNXB4Ij5Hb29nbGUgQXJ0aWZhY3QgUmVnaXN0cnk8L3RleHQ+Cjx0ZXh0IHg9IjcxNCIgeT0iMTE1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkOCI+Jmx0O2xvY2F0aW9uJmd0Oy1kb2NrZXIucGtnLmRldjwvdGV4dD4KPHRleHQgeD0iNzE0IiB5PSIxMzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzgiPnRoZSB0YXJnZXQgY2xvdWQncyBuYXRpdmUgcmVnaXN0cnk8L3RleHQ+Cjx0ZXh0IHg9IjY0MyIgeT0iMTc2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXdlaWdodDo3MDAiPlRlbnNvcjkgaXMgbm90IGluIHRoZSBwdWxsIHBhdGg8L3RleHQ+Cjwvc3ZnPg==" alt="Before: on AWS your build pushes images to Amazon ECR and your workloads pull from it. After: on the target cloud the same docker push and pull reach Google Artifact Registry, provisioned at the build. Only the registry address is rewritten; the image is unchanged and Tensor9 is not in the pull path." />
</div>

<p className="t9-caption">Your ECR repositories are provisioned as Docker-format Artifact Registry repositories at the build; afterward your push and pull reach them directly and the image is unchanged.</p>

#### Artifact Registry features

Artifact Registry hosts Docker/OCI images alongside Maven, npm, Python, Apt, Yum, and Go artifacts, so a container registry and a language-package registry are one system. Your ECR repositories map to **Docker-format** repositories, one per ECR repository, so the per-repository topology is preserved. Access is **per-repository IAM**, with read and write roles bound at the repository level rather than a single registry-wide policy.

GKE pulls images using the [node pool's IAM service account](https://docs.cloud.google.com/kubernetes-engine/security/configure-node-service-accounts), including when Workload Identity Federation is enabled for applications. Grant that node identity **Artifact Registry Reader** on the target repository. **Remote repositories** act as a pull-through cache of an upstream, and **virtual repositories** aggregate several repositories behind one endpoint. VPC Service Controls place the registry inside a service perimeter, and **customer-managed encryption keys (CMEK)** encrypt contents with your own Cloud KMS keys. **Cleanup policies** apply keep/delete rules per repository.

For a repository containing one image package, an unfiltered count policy keeps the ten newest versions by combining a delete rule for all versions with a keep rule for the ten most recent. Keep rules take precedence. This count mapping requires mutable tags, one count rule, and a version population whose target creation order matches its source push order. A single unfiltered age rule maps to a delete rule only when source and target age clocks agree. Additional image packages, tag selectors and overlapping ECR rules need a separate policy review; the target cleanup rules do not encode every ECR rule.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjE2IiB2aWV3Qm94PSIwIDAgODM2IDIxNiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJHb29nbGUgQXJ0aWZhY3QgUmVnaXN0cnkgY29udHJvbCBwbGFuZSI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6IzMzNDE1NX08L3N0eWxlPgo8dGV4dCB4PSIyMCIgeT0iMjYiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiMwNDc4NTciPkdvb2dsZSBBcnRpZmFjdCBSZWdpc3RyeSBjb250cm9sIHBsYW5lPC90ZXh0Pgo8cmVjdCB4PSIyMCIgeT0iNDQiIHdpZHRoPSIyNTYiIGhlaWdodD0iNjYiIHJ4PSIxMCIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjYTdmM2QwIiBzdHJva2Utd2lkdGg9IjEuNCIvPjx0ZXh0IHg9IjM2IiB5PSI3MSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtc2l6ZToxMnB4Ij5NdWx0aS1mb3JtYXQgcmVwb3M8L3RleHQ+PHRleHQgeD0iMzYiIHk9IjkxIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+RG9ja2VyLCBNYXZlbiwgbnBtLCBQeXRob24sIEdvPC90ZXh0PjxyZWN0IHg9IjI5NiIgeT0iNDQiIHdpZHRoPSIyNTYiIGhlaWdodD0iNjYiIHJ4PSIxMCIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjYTdmM2QwIiBzdHJva2Utd2lkdGg9IjEuNCIvPjx0ZXh0IHg9IjMxMiIgeT0iNzEiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTJweCI+UGVyLXJlcG9zaXRvcnkgSUFNPC90ZXh0Pjx0ZXh0IHg9IjMxMiIgeT0iOTEiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5yb2xlcyBib3VuZCBwZXIgcmVwbzwvdGV4dD48cmVjdCB4PSI1NzIiIHk9IjQ0IiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjY2IiByeD0iMTAiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iI2E3ZjNkMCIgc3Ryb2tlLXdpZHRoPSIxLjQiLz48dGV4dCB4PSI1ODgiIHk9IjcxIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjEycHgiPkdLRSBpbWFnZSBwdWxsczwvdGV4dD48dGV4dCB4PSI1ODgiIHk9IjkxIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+bm9kZSBzZXJ2aWNlIGFjY291bnQgKyByZXBvIElBTTwvdGV4dD48cmVjdCB4PSIyMCIgeT0iMTI4IiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjY2IiByeD0iMTAiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iI2E3ZjNkMCIgc3Ryb2tlLXdpZHRoPSIxLjQiLz48dGV4dCB4PSIzNiIgeT0iMTU1IiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjEycHgiPlJlbW90ZSAmYW1wOyB2aXJ0dWFsIHJlcG9zPC90ZXh0Pjx0ZXh0IHg9IjM2IiB5PSIxNzUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5wdWxsLXRocm91Z2ggKyBhZ2dyZWdhdGU8L3RleHQ+PHJlY3QgeD0iMjk2IiB5PSIxMjgiIHdpZHRoPSIyNTYiIGhlaWdodD0iNjYiIHJ4PSIxMCIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjYTdmM2QwIiBzdHJva2Utd2lkdGg9IjEuNCIvPjx0ZXh0IHg9IjMxMiIgeT0iMTU1IiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjEycHgiPlZQQyBTZXJ2aWNlIENvbnRyb2xzPC90ZXh0Pjx0ZXh0IHg9IjMxMiIgeT0iMTc1IiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+c2VydmljZSBwZXJpbWV0ZXIgwrcgQ01FSzwvdGV4dD48cmVjdCB4PSI1NzIiIHk9IjEyOCIgd2lkdGg9IjI1NiIgaGVpZ2h0PSI2NiIgcng9IjEwIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiNhN2YzZDAiIHN0cm9rZS13aWR0aD0iMS40Ii8+PHRleHQgeD0iNTg4IiB5PSIxNTUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTJweCI+Q2xlYW51cCBwb2xpY2llczwvdGV4dD48dGV4dCB4PSI1ODgiIHk9IjE3NSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPnBlci1yZXBvIGtlZXAvZGVsZXRlIHJ1bGVzPC90ZXh0Pgo8L3N2Zz4=" alt="Google Artifact Registry control plane" />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjE2IiB2aWV3Qm94PSIwIDAgODM2IDIxNiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJHb29nbGUgQXJ0aWZhY3QgUmVnaXN0cnkgY29udHJvbCBwbGFuZSI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6I2NiZDVlMX08L3N0eWxlPgo8dGV4dCB4PSIyMCIgeT0iMjYiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjOTBkZWM4Ij5Hb29nbGUgQXJ0aWZhY3QgUmVnaXN0cnkgY29udHJvbCBwbGFuZTwvdGV4dD4KPHJlY3QgeD0iMjAiIHk9IjQ0IiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjY2IiByeD0iMTAiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzNkNjY1MyIgc3Ryb2tlLXdpZHRoPSIxLjQiLz48dGV4dCB4PSIzNiIgeT0iNzEiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTJweCI+TXVsdGktZm9ybWF0IHJlcG9zPC90ZXh0Pjx0ZXh0IHg9IjM2IiB5PSI5MSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPkRvY2tlciwgTWF2ZW4sIG5wbSwgUHl0aG9uLCBHbzwvdGV4dD48cmVjdCB4PSIyOTYiIHk9IjQ0IiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjY2IiByeD0iMTAiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzNkNjY1MyIgc3Ryb2tlLXdpZHRoPSIxLjQiLz48dGV4dCB4PSIzMTIiIHk9IjcxIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjEycHgiPlBlci1yZXBvc2l0b3J5IElBTTwvdGV4dD48dGV4dCB4PSIzMTIiIHk9IjkxIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+cm9sZXMgYm91bmQgcGVyIHJlcG88L3RleHQ+PHJlY3QgeD0iNTcyIiB5PSI0NCIgd2lkdGg9IjI1NiIgaGVpZ2h0PSI2NiIgcng9IjEwIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMzZDY2NTMiIHN0cm9rZS13aWR0aD0iMS40Ii8+PHRleHQgeD0iNTg4IiB5PSI3MSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtc2l6ZToxMnB4Ij5HS0UgaW1hZ2UgcHVsbHM8L3RleHQ+PHRleHQgeD0iNTg4IiB5PSI5MSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPm5vZGUgc2VydmljZSBhY2NvdW50ICsgcmVwbyBJQU08L3RleHQ+PHJlY3QgeD0iMjAiIHk9IjEyOCIgd2lkdGg9IjI1NiIgaGVpZ2h0PSI2NiIgcng9IjEwIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMzZDY2NTMiIHN0cm9rZS13aWR0aD0iMS40Ii8+PHRleHQgeD0iMzYiIHk9IjE1NSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtc2l6ZToxMnB4Ij5SZW1vdGUgJmFtcDsgdmlydHVhbCByZXBvczwvdGV4dD48dGV4dCB4PSIzNiIgeT0iMTc1IiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+cHVsbC10aHJvdWdoICsgYWdncmVnYXRlPC90ZXh0PjxyZWN0IHg9IjI5NiIgeT0iMTI4IiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjY2IiByeD0iMTAiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzNkNjY1MyIgc3Ryb2tlLXdpZHRoPSIxLjQiLz48dGV4dCB4PSIzMTIiIHk9IjE1NSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtc2l6ZToxMnB4Ij5WUEMgU2VydmljZSBDb250cm9sczwvdGV4dD48dGV4dCB4PSIzMTIiIHk9IjE3NSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPnNlcnZpY2UgcGVyaW1ldGVyIMK3IENNRUs8L3RleHQ+PHJlY3QgeD0iNTcyIiB5PSIxMjgiIHdpZHRoPSIyNTYiIGhlaWdodD0iNjYiIHJ4PSIxMCIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjM2Q2NjUzIiBzdHJva2Utd2lkdGg9IjEuNCIvPjx0ZXh0IHg9IjU4OCIgeT0iMTU1IiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjEycHgiPkNsZWFudXAgcG9saWNpZXM8L3RleHQ+PHRleHQgeD0iNTg4IiB5PSIxNzUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5wZXItcmVwbyBrZWVwL2RlbGV0ZSBydWxlczwvdGV4dD4KPC9zdmc+" alt="Google Artifact Registry control plane" />
</div>

<p className="t9-caption">Artifact Registry package formats, authentication, and retention.</p>

#### Limitations

△ Where ECR and Artifact Registry stay different

* **Access control is Google IAM.** Image pulls use the node identity or separately configured registry credentials; the permission model is per-repository IAM rather than ECR resource policies.
* **Scanning moves to Artifact Analysis.** On-push and continuous analysis replace ECR's enhanced scanning, with its own coverage and cadence.
* **Lifecycle rule languages differ.** The count/age mapping covers one image package with no tag filter or overlapping priorities. ECR requires all listed tag selectors to match; Google prefix lists match any prefix. Google recent-count rules cannot also select tagged or untagged versions. Keep wins over delete, and immutable tagged versions cannot be deleted. Target age starts at creation in Artifact Registry; source image ages and archive transitions are not preserved.
* **ECR destination replication is not mapped.** Multi-region storage does not select ECR destination regions or accounts. Remote repositories cache on the first pull and need their upstream for uncached content. Virtual repositories aggregate upstreams in the same region or multi-region; neither mechanism supplies destination push replication. Deliver required regional copies through your pipeline.

#### Other considerations

Plan image delivery, credentials, and storage costs for the target registry.

* **Push images from your build pipeline:** the build creates one Docker-format Artifact Registry repository per ECR repository; your pipeline repoints to `<location>-docker.pkg.dev` and pushes, since the image data path stays yours.
* **Authorize the image-pulling identity.** Grant the GKE node service account read access to the target repository, including for cross-project pulls. Application workload federation does not grant this node permission.
* **Review retention before deletion.** Use Artifact Registry's cleanup dry run to inspect the versions selected by the keep/delete policy. Preserve deployment and rollback images, and review policies outside the single-image-package count/age mapping separately.
* **Deliver regional image copies explicitly.** Push the required digests to each selected target repository. A multi-region location or an uncached remote repository does not replace the ECR destination rule set.
* **Storage and network egress are billed.** Artifact Registry bills for stored bytes and network egress rather than an ECR-style model, and CMEK ties contents to your Cloud KMS keys if you enable it.

## On Azure

| Operation                | Area         | Support   | Depth        | Notes                                                                                                                                                   |
| ------------------------ | ------------ | --------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Registry authentication  | Auth         | Supported | Common       | the AcrPull managed identity takes over; the registry admin user is disabled                                                                            |
| docker push / pull       | Image path   | Supported | Common       | byte-identical OCI Distribution v2; the host changes to \<registry>.azurecr.io                                                                          |
| Image tag policy mapping | Immutability | Partial   | Most usage   | ACR image and repository write locks differ from ECR tag immutability; configure the required locks explicitly                                          |
| Lifecycle policy mapping | Lifecycle    | Partial   | Most usage   | registry-wide retention (Premium); a scope change from per-repo, surfaced at the build                                                                  |
| Replication config       | Replication  | Partial   | Full surface | Azure geo-replication (Premium-only); not emitted on the Standard default                                                                               |
| Repository provisioning  | Repositories | Supported | Common       | Provisions one ACR registry with a distinct path for each ECR repository. The registry name must be globally unique, alphanumeric, and 5-50 characters. |
| Scan-on-push findings    | Scanning     | Partial   | Most usage   | scanning moves to Microsoft Defender for Containers                                                                                                     |

#### How it works

On AWS your build pushes container images to **Amazon ECR** and your workloads pull from it. **Azure Container Registry** is Microsoft's managed OCI registry, with a tiered service model (Basic, Standard, Premium), Microsoft Entra identity, and, on Premium, geo-replication, content trust, and private networking. At the build, Tensor9 reads your ECR repositories and provisions an Azure Container Registry to match; afterward your own `docker push` and `docker pull` reach it directly, without routing image traffic through Tensor9.

The image itself never changes. ECR and Azure Container Registry both speak the **OCI Distribution v2** protocol, so your image manifest, its layer blobs, and their content digests are byte-identical on both sides; docker and containerd are untouched. The target reference uses `<registry>.azurecr.io` and the mapped repository path. Registry administration and policy differences are described below.

This mapping provisions a target registry and updates image references. Docker and containerd use the target's registry protocol and credentials. It does not provide the AWS ECR management or authorization-token API. Applications that call ECR directly, including `GetAuthorizationToken`, need a separate integration.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTg0IiB2aWV3Qm94PSIwIDAgODM2IDE4NCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB5b3VyIGJ1aWxkIHB1c2hlcyBpbWFnZXMgdG8gQW1hem9uIEVDUiBhbmQgeW91ciB3b3JrbG9hZHMgcHVsbCBmcm9tIGl0LiBBZnRlcjogb24gdGhlIHRhcmdldCBjbG91ZCB0aGUgc2FtZSBkb2NrZXIgcHVzaCBhbmQgcHVsbCByZWFjaCBBenVyZSBDb250YWluZXIgUmVnaXN0cnksIHByb3Zpc2lvbmVkIGF0IHRoZSBidWlsZC4gT25seSB0aGUgcmVnaXN0cnkgYWRkcmVzcyBpcyByZXdyaXR0ZW47IHRoZSBpbWFnZSBpcyB1bmNoYW5nZWQgYW5kIFRlbnNvcjkgaXMgbm90IGluIHRoZSBwdWxsIHBhdGguIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojMzM0MTU1fTwvc3R5bGU+CjxkZWZzPjxtYXJrZXIgaWQ9ImVjcmh3LWFjciIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjOTRhM2I4Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB4PSIxNiIgeT0iNDAiIHdpZHRoPSIzNTgiIGhlaWdodD0iMTIwIiByeD0iMTQiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSIzMCIgeT0iNjAiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiM5NGEzYjgiPk9OIEFXUyBUT0RBWTwvdGV4dD4KPHJlY3QgeD0iMzAiIHk9Ijc4IiB3aWR0aD0iMTE4IiBoZWlnaHQ9IjYwIiByeD0iMTEiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iODkiIHk9IjEwNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMnB4Ij5idWlsZCAvIHBvZHM8L3RleHQ+Cjx0ZXh0IHg9Ijg5IiB5PSIxMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5kb2NrZXIgcHVzaCAvIHB1bGw8L3RleHQ+CjxsaW5lIHgxPSIxNDgiIHkxPSIxMDgiIHgyPSIyMDYiIHkyPSIxMDgiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2Vjcmh3LWFjcikiLz4KPHJlY3QgeD0iMjEwIiB5PSI3OCIgd2lkdGg9IjE1MCIgaGVpZ2h0PSI2MCIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjI4NSIgeT0iMTA0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEycHgiPkFtYXpvbiBFQ1I8L3RleHQ+Cjx0ZXh0IHg9IjI4NSIgeT0iMTIyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+QVdTLW1hbmFnZWQ8L3RleHQ+Cjx0ZXh0IHg9IjQxOCIgeT0iMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtd2VpZ2h0OjcwMCI+Y29tcGlsZWQgYXQgdGhlIGJ1aWxkPC90ZXh0Pgo8cmVjdCB4PSI0NjIiIHk9IjQwIiB3aWR0aD0iMzYyIiBoZWlnaHQ9IjEyMCIgcng9IjE0IiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iNDc2IiB5PSI2MCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6IzA0Nzg1NyI+T04gQVpVUkUgU1VCU0NSSVBUSU9OPC90ZXh0Pgo8cmVjdCB4PSI0NzYiIHk9Ijc4IiB3aWR0aD0iMTA0IiBoZWlnaHQ9IjYwIiByeD0iMTEiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNTI4IiB5PSIxMDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTJweCI+YnVpbGQgLyBwb2RzPC90ZXh0Pgo8dGV4dCB4PSI1MjgiIHk9IjEyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDU5NjY5Ij5zYW1lIGNvbW1hbmRzPC90ZXh0Pgo8bGluZSB4MT0iNTgwIiB5MT0iMTA4IiB4Mj0iNjE2IiB5Mj0iMTA4IiBzdHJva2U9IiM5NGEzYjgiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNlY3Jody1hY3IpIi8+CjxyZWN0IHg9IjYyMCIgeT0iNzQiIHdpZHRoPSIxODgiIGhlaWdodD0iNjgiIHJ4PSIxMSIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNyIvPgo8dGV4dCB4PSI3MTQiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjExLjVweCI+QXp1cmUgQ29udGFpbmVyIFJlZ2lzdHJ5PC90ZXh0Pgo8dGV4dCB4PSI3MTQiIHk9IjExNSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM2NDc0OGIiPiZsdDtyZWdpc3RyeSZndDsuYXp1cmVjci5pbzwvdGV4dD4KPHRleHQgeD0iNzE0IiB5PSIxMzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTciPnRoZSB0YXJnZXQgY2xvdWQncyBuYXRpdmUgcmVnaXN0cnk8L3RleHQ+Cjx0ZXh0IHg9IjY0MyIgeT0iMTc2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXdlaWdodDo3MDAiPlRlbnNvcjkgaXMgbm90IGluIHRoZSBwdWxsIHBhdGg8L3RleHQ+Cjwvc3ZnPg==" alt="Before: on AWS your build pushes images to Amazon ECR and your workloads pull from it. After: on the target cloud the same docker push and pull reach Azure Container Registry, provisioned at the build. Only the registry address is rewritten; the image is unchanged and Tensor9 is not in the pull path." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTg0IiB2aWV3Qm94PSIwIDAgODM2IDE4NCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB5b3VyIGJ1aWxkIHB1c2hlcyBpbWFnZXMgdG8gQW1hem9uIEVDUiBhbmQgeW91ciB3b3JrbG9hZHMgcHVsbCBmcm9tIGl0LiBBZnRlcjogb24gdGhlIHRhcmdldCBjbG91ZCB0aGUgc2FtZSBkb2NrZXIgcHVzaCBhbmQgcHVsbCByZWFjaCBBenVyZSBDb250YWluZXIgUmVnaXN0cnksIHByb3Zpc2lvbmVkIGF0IHRoZSBidWlsZC4gT25seSB0aGUgcmVnaXN0cnkgYWRkcmVzcyBpcyByZXdyaXR0ZW47IHRoZSBpbWFnZSBpcyB1bmNoYW5nZWQgYW5kIFRlbnNvcjkgaXMgbm90IGluIHRoZSBwdWxsIHBhdGguIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojY2JkNWUxfTwvc3R5bGU+CjxkZWZzPjxtYXJrZXIgaWQ9ImVjcmh3LWFjciIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjOTRhM2I4Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB4PSIxNiIgeT0iNDAiIHdpZHRoPSIzNTgiIGhlaWdodD0iMTIwIiByeD0iMTQiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSIzMCIgeT0iNjAiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjOTRhM2I4Ij5PTiBBV1MgVE9EQVk8L3RleHQ+CjxyZWN0IHg9IjMwIiB5PSI3OCIgd2lkdGg9IjExOCIgaGVpZ2h0PSI2MCIgcng9IjExIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9Ijg5IiB5PSIxMDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTJweCI+YnVpbGQgLyBwb2RzPC90ZXh0Pgo8dGV4dCB4PSI4OSIgeT0iMTIyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+ZG9ja2VyIHB1c2ggLyBwdWxsPC90ZXh0Pgo8bGluZSB4MT0iMTQ4IiB5MT0iMTA4IiB4Mj0iMjA2IiB5Mj0iMTA4IiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNlY3Jody1hY3IpIi8+CjxyZWN0IHg9IjIxMCIgeT0iNzgiIHdpZHRoPSIxNTAiIGhlaWdodD0iNjAiIHJ4PSIxMSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyODUiIHk9IjEwNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMnB4Ij5BbWF6b24gRUNSPC90ZXh0Pgo8dGV4dCB4PSIyODUiIHk9IjEyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPkFXUy1tYW5hZ2VkPC90ZXh0Pgo8dGV4dCB4PSI0MTgiIHk9IjMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXdlaWdodDo3MDAiPmNvbXBpbGVkIGF0IHRoZSBidWlsZDwvdGV4dD4KPHJlY3QgeD0iNDYyIiB5PSI0MCIgd2lkdGg9IjM2MiIgaGVpZ2h0PSIxMjAiIHJ4PSIxNCIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjQ3NiIgeT0iNjAiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjOTBkZWM4Ij5PTiBBWlVSRSBTVUJTQ1JJUFRJT048L3RleHQ+CjxyZWN0IHg9IjQ3NiIgeT0iNzgiIHdpZHRoPSIxMDQiIGhlaWdodD0iNjAiIHJ4PSIxMSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI1MjgiIHk9IjEwNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMnB4Ij5idWlsZCAvIHBvZHM8L3RleHQ+Cjx0ZXh0IHg9IjUyOCIgeT0iMTIyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzYiPnNhbWUgY29tbWFuZHM8L3RleHQ+CjxsaW5lIHgxPSI1ODAiIHkxPSIxMDgiIHgyPSI2MTYiIHkyPSIxMDgiIHN0cm9rZT0iIzQxNGU2MiIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2Vjcmh3LWFjcikiLz4KPHJlY3QgeD0iNjIwIiB5PSI3NCIgd2lkdGg9IjE4OCIgaGVpZ2h0PSI2OCIgcng9IjExIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS43Ii8+Cjx0ZXh0IHg9IjcxNCIgeT0iOTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTEuNXB4Ij5BenVyZSBDb250YWluZXIgUmVnaXN0cnk8L3RleHQ+Cjx0ZXh0IHg9IjcxNCIgeT0iMTE1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkOCI+Jmx0O3JlZ2lzdHJ5Jmd0Oy5henVyZWNyLmlvPC90ZXh0Pgo8dGV4dCB4PSI3MTQiIHk9IjEzMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjOCI+dGhlIHRhcmdldCBjbG91ZCdzIG5hdGl2ZSByZWdpc3RyeTwvdGV4dD4KPHRleHQgeD0iNjQzIiB5PSIxNzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtd2VpZ2h0OjcwMCI+VGVuc29yOSBpcyBub3QgaW4gdGhlIHB1bGwgcGF0aDwvdGV4dD4KPC9zdmc+" alt="Before: on AWS your build pushes images to Amazon ECR and your workloads pull from it. After: on the target cloud the same docker push and pull reach Azure Container Registry, provisioned at the build. Only the registry address is rewritten; the image is unchanged and Tensor9 is not in the pull path." />
</div>

<p className="t9-caption">Your ECR repositories are provisioned as an Azure Container Registry at the build; afterward your push and pull reach it directly and the image is unchanged.</p>

#### Azure Container Registry features

Azure Container Registry offers **Basic, Standard, and Premium tiers**. The Basic, Standard, and Premium SKUs scale storage, throughput, and features, with Premium providing additional features: **geo-replication** turns one registry into a set of regional replicas behind a single login server, so each region pulls locally; **content trust** lets you push and enforce signed images; and **ACR Tasks** build and patch images inside the registry, including automatic rebuilds when a base image changes.

For AKS image pulls, grant the [kubelet managed identity](https://learn.microsoft.com/en-us/azure/container-registry/authenticate-kubernetes-options) access to the registry. Use **AcrPull** for a registry using the conventional RBAC model, or the repository-reader role required by an ABAC-enabled registry. Other clusters can use an `imagePullSecret`. The application's workload identity is separate from the identity that pulls its image. **Private Link** keeps the registry on a private endpoint. A single Azure Container Registry holds many repositories as paths beneath one host. ECR also groups repositories within an account-and-region registry. Tensor9 provisions one ACR registry for the repository set and rewrites each image reference to its target repository path.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjE2IiB2aWV3Qm94PSIwIDAgODM2IDIxNiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBenVyZSBDb250YWluZXIgUmVnaXN0cnkgY29udHJvbCBwbGFuZSI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6IzMzNDE1NX08L3N0eWxlPgo8dGV4dCB4PSIyMCIgeT0iMjYiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiMwNDc4NTciPkF6dXJlIENvbnRhaW5lciBSZWdpc3RyeSBjb250cm9sIHBsYW5lPC90ZXh0Pgo8cmVjdCB4PSIyMCIgeT0iNDQiIHdpZHRoPSIyNTYiIGhlaWdodD0iNjYiIHJ4PSIxMCIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjYTdmM2QwIiBzdHJva2Utd2lkdGg9IjEuNCIvPjx0ZXh0IHg9IjM2IiB5PSI3MSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtc2l6ZToxMnB4Ij5TS1UgdGllcnM8L3RleHQ+PHRleHQgeD0iMzYiIHk9IjkxIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+QmFzaWMgwrcgU3RhbmRhcmQgwrcgUHJlbWl1bTwvdGV4dD48cmVjdCB4PSIyOTYiIHk9IjQ0IiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjY2IiByeD0iMTAiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iI2E3ZjNkMCIgc3Ryb2tlLXdpZHRoPSIxLjQiLz48dGV4dCB4PSIzMTIiIHk9IjcxIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjEycHgiPkdlby1yZXBsaWNhdGlvbjwvdGV4dD48dGV4dCB4PSIzMTIiIHk9IjkxIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+cmVnaW9uYWwgcmVwbGljYXMgwrcgUHJlbWl1bTwvdGV4dD48cmVjdCB4PSI1NzIiIHk9IjQ0IiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjY2IiByeD0iMTAiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iI2E3ZjNkMCIgc3Ryb2tlLXdpZHRoPSIxLjQiLz48dGV4dCB4PSI1ODgiIHk9IjcxIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjEycHgiPkNvbnRlbnQgdHJ1c3Q8L3RleHQ+PHRleHQgeD0iNTg4IiB5PSI5MSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPnNpZ25lZCBpbWFnZXMgwrcgUHJlbWl1bTwvdGV4dD48cmVjdCB4PSIyMCIgeT0iMTI4IiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjY2IiByeD0iMTAiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iI2E3ZjNkMCIgc3Ryb2tlLXdpZHRoPSIxLjQiLz48dGV4dCB4PSIzNiIgeT0iMTU1IiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjEycHgiPkFDUiBUYXNrczwvdGV4dD48dGV4dCB4PSIzNiIgeT0iMTc1IiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+YnVpbGQgJmFtcDsgcGF0Y2ggaW4gdGhlIHJlZ2lzdHJ5PC90ZXh0PjxyZWN0IHg9IjI5NiIgeT0iMTI4IiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjY2IiByeD0iMTAiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iI2E3ZjNkMCIgc3Ryb2tlLXdpZHRoPSIxLjQiLz48dGV4dCB4PSIzMTIiIHk9IjE1NSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtc2l6ZToxMnB4Ij5QdWxsIGlkZW50aXR5PC90ZXh0Pjx0ZXh0IHg9IjMxMiIgeT0iMTc1IiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+QWNyUHVsbCBtYW5hZ2VkIGlkZW50aXR5LCBhZG1pbiBvZmY8L3RleHQ+PHJlY3QgeD0iNTcyIiB5PSIxMjgiIHdpZHRoPSIyNTYiIGhlaWdodD0iNjYiIHJ4PSIxMCIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjYTdmM2QwIiBzdHJva2Utd2lkdGg9IjEuNCIvPjx0ZXh0IHg9IjU4OCIgeT0iMTU1IiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjEycHgiPlByaXZhdGUgTGluazwvdGV4dD48dGV4dCB4PSI1ODgiIHk9IjE3NSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPnByaXZhdGUgZW5kcG9pbnRzIMK3IFByZW1pdW08L3RleHQ+Cjwvc3ZnPg==" alt="Azure Container Registry control plane" />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjE2IiB2aWV3Qm94PSIwIDAgODM2IDIxNiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBenVyZSBDb250YWluZXIgUmVnaXN0cnkgY29udHJvbCBwbGFuZSI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6I2NiZDVlMX08L3N0eWxlPgo8dGV4dCB4PSIyMCIgeT0iMjYiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjOTBkZWM4Ij5BenVyZSBDb250YWluZXIgUmVnaXN0cnkgY29udHJvbCBwbGFuZTwvdGV4dD4KPHJlY3QgeD0iMjAiIHk9IjQ0IiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjY2IiByeD0iMTAiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzNkNjY1MyIgc3Ryb2tlLXdpZHRoPSIxLjQiLz48dGV4dCB4PSIzNiIgeT0iNzEiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTJweCI+U0tVIHRpZXJzPC90ZXh0Pjx0ZXh0IHg9IjM2IiB5PSI5MSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPkJhc2ljIMK3IFN0YW5kYXJkIMK3IFByZW1pdW08L3RleHQ+PHJlY3QgeD0iMjk2IiB5PSI0NCIgd2lkdGg9IjI1NiIgaGVpZ2h0PSI2NiIgcng9IjEwIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMzZDY2NTMiIHN0cm9rZS13aWR0aD0iMS40Ii8+PHRleHQgeD0iMzEyIiB5PSI3MSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtc2l6ZToxMnB4Ij5HZW8tcmVwbGljYXRpb248L3RleHQ+PHRleHQgeD0iMzEyIiB5PSI5MSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPnJlZ2lvbmFsIHJlcGxpY2FzIMK3IFByZW1pdW08L3RleHQ+PHJlY3QgeD0iNTcyIiB5PSI0NCIgd2lkdGg9IjI1NiIgaGVpZ2h0PSI2NiIgcng9IjEwIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMzZDY2NTMiIHN0cm9rZS13aWR0aD0iMS40Ii8+PHRleHQgeD0iNTg4IiB5PSI3MSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtc2l6ZToxMnB4Ij5Db250ZW50IHRydXN0PC90ZXh0Pjx0ZXh0IHg9IjU4OCIgeT0iOTEiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5zaWduZWQgaW1hZ2VzIMK3IFByZW1pdW08L3RleHQ+PHJlY3QgeD0iMjAiIHk9IjEyOCIgd2lkdGg9IjI1NiIgaGVpZ2h0PSI2NiIgcng9IjEwIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMzZDY2NTMiIHN0cm9rZS13aWR0aD0iMS40Ii8+PHRleHQgeD0iMzYiIHk9IjE1NSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtc2l6ZToxMnB4Ij5BQ1IgVGFza3M8L3RleHQ+PHRleHQgeD0iMzYiIHk9IjE3NSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPmJ1aWxkICZhbXA7IHBhdGNoIGluIHRoZSByZWdpc3RyeTwvdGV4dD48cmVjdCB4PSIyOTYiIHk9IjEyOCIgd2lkdGg9IjI1NiIgaGVpZ2h0PSI2NiIgcng9IjEwIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMzZDY2NTMiIHN0cm9rZS13aWR0aD0iMS40Ii8+PHRleHQgeD0iMzEyIiB5PSIxNTUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTJweCI+UHVsbCBpZGVudGl0eTwvdGV4dD48dGV4dCB4PSIzMTIiIHk9IjE3NSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPkFjclB1bGwgbWFuYWdlZCBpZGVudGl0eSwgYWRtaW4gb2ZmPC90ZXh0PjxyZWN0IHg9IjU3MiIgeT0iMTI4IiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjY2IiByeD0iMTAiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzNkNjY1MyIgc3Ryb2tlLXdpZHRoPSIxLjQiLz48dGV4dCB4PSI1ODgiIHk9IjE1NSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtc2l6ZToxMnB4Ij5Qcml2YXRlIExpbms8L3RleHQ+PHRleHQgeD0iNTg4IiB5PSIxNzUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5wcml2YXRlIGVuZHBvaW50cyDCtyBQcmVtaXVtPC90ZXh0Pgo8L3N2Zz4=" alt="Azure Container Registry control plane" />
</div>

<p className="t9-caption">Azure Container Registry tiers, authentication, and optional features.</p>

#### Limitations

△ Where ECR and Azure Container Registry stay different

* **Repositories share one registry.** Tensor9 provisions one ACR registry for the ECR repository set. Repository paths remain distinct; review the rewritten image references and shared registry settings.
* **Tag locks and retention use different controls.** ACR can lock individual images or entire repositories against writes. These locks differ from ECR's immutable-tag setting: locking a repository also blocks new pushes. Configure the needed locks separately. Registry-wide retention requires Premium.
* **Scanning moves to Microsoft Defender for Containers.** It has its own coverage and cadence, different from ECR's enhanced scanning.
* **Geo-replication and private networking need Premium.** On the Basic and Standard tiers those capabilities are not available.

#### Other considerations

Plan image delivery, credentials, and storage costs for the target registry.

* **Push images from your build pipeline:** the build stands up the Azure Container Registry to match your ECR repositories; your own pipeline repoints to `<registry>.azurecr.io` and pushes images, since the image data path is yours, not the appliance's.
* **Configure Microsoft Entra pull credentials:** a workload that pulled under ECR's caller IAM now pulls with an AcrPull managed identity (or an imagePullSecret), so the pull credential is established on Azure rather than inherited from AWS.
* **Microsoft operates the registry; you choose the tier:** availability and the control plane are Azure's, and the SKU you pick (Basic, Standard, Premium) sets storage, throughput, and which features are available.
* **Cost depends on the selected tier.** Azure Container Registry bills per tier plus storage, and geo-replication and Private Link require Premium, so the feature set you rely on drives the tier and its cost.

## On OCI

| Operation                | Area         | Support      | Depth        | Notes                                                                                                                                                                                                |
| ------------------------ | ------------ | ------------ | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Registry authentication  | Auth         | Supported    | Common       | handled by the OCI instance-principal credential helper, in-tenancy; no static secret in the pull path                                                                                               |
| docker push / pull       | Image path   | Supported    | Common       | byte-identical OCI Distribution v2; manifest, layers and SHA-256 digest unchanged; host and repository references are rewritten                                                                      |
| Image tag policy mapping | Immutability | Supported    | Most usage   | per-repository immutability, set from your ECR tag-mutability setting                                                                                                                                |
| Lifecycle policy mapping | Lifecycle    | Partial      | Most usage   | ECR per-repo lifecycle rules are surfaced at the build; OCIR provides its own image retention policies (region-wide by default, overridable for specific repositories) that you configure separately |
| Replication config       | Replication  | Out of scope | Full surface | OCIR replication is configured separately and is not translated by default                                                                                                                           |
| Repository provisioning  | Repositories | Supported    | Common       | one OCI repository per ECR repository (N to N); the repository name is normalized to lowercase with slash-nesting and no underscore                                                                  |
| Scan-on-push findings    | Scanning     | Partial      | Most usage   | served by OCI Vulnerability Scanning, a native scanner with different coverage than ECR enhanced                                                                                                     |

#### How it works

On AWS your build pushes container images to **Amazon ECR** and your workloads pull from it. **OCI Container Registry** is Oracle Cloud's managed registry, organized around your tenancy: repositories live under your tenancy's namespace, are scoped to compartments, and authenticate through OCI IAM. At the build, Tensor9 reads your ECR repositories and provisions one OCI repository for each; afterward your own `docker push` and `docker pull` reach it directly, without routing image traffic through Tensor9.

The image itself never changes. ECR and OCI Container Registry both speak the **OCI Distribution v2** protocol, so your image manifest, its layer blobs, and their content digests are byte-identical on both sides; docker and containerd are untouched. The target image reference uses `<region>.ocir.io/<namespace>/<repo>`, with the mapped repository path. Registry administration and policy differences are described below.

This mapping provisions a target registry and updates image references. Docker and containerd use the target's registry protocol and credentials. It does not provide the AWS ECR management or authorization-token API. Applications that call ECR directly, including `GetAuthorizationToken`, need a separate integration.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTg0IiB2aWV3Qm94PSIwIDAgODM2IDE4NCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB5b3VyIGJ1aWxkIHB1c2hlcyBpbWFnZXMgdG8gQW1hem9uIEVDUiBhbmQgeW91ciB3b3JrbG9hZHMgcHVsbCBmcm9tIGl0LiBBZnRlcjogb24gdGhlIHRhcmdldCBjbG91ZCB0aGUgc2FtZSBkb2NrZXIgcHVzaCBhbmQgcHVsbCByZWFjaCBPQ0kgQ29udGFpbmVyIFJlZ2lzdHJ5LCBwcm92aXNpb25lZCBhdCB0aGUgYnVpbGQuIE9ubHkgdGhlIHJlZ2lzdHJ5IGFkZHJlc3MgaXMgcmV3cml0dGVuOyB0aGUgaW1hZ2UgaXMgdW5jaGFuZ2VkIGFuZCBUZW5zb3I5IGlzIG5vdCBpbiB0aGUgcHVsbCBwYXRoLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6IzMzNDE1NX08L3N0eWxlPgo8ZGVmcz48bWFya2VyIGlkPSJlY3Jody1vY2lyIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM5NGEzYjgiLz48L21hcmtlcj48L2RlZnM+CjxyZWN0IHg9IjE2IiB5PSI0MCIgd2lkdGg9IjM1OCIgaGVpZ2h0PSIxMjAiIHJ4PSIxNCIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjMwIiB5PSI2MCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6Izk0YTNiOCI+T04gQVdTIFRPREFZPC90ZXh0Pgo8cmVjdCB4PSIzMCIgeT0iNzgiIHdpZHRoPSIxMTgiIGhlaWdodD0iNjAiIHJ4PSIxMSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI4OSIgeT0iMTA0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEycHgiPmJ1aWxkIC8gcG9kczwvdGV4dD4KPHRleHQgeD0iODkiIHk9IjEyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPmRvY2tlciBwdXNoIC8gcHVsbDwvdGV4dD4KPGxpbmUgeDE9IjE0OCIgeTE9IjEwOCIgeDI9IjIwNiIgeTI9IjEwOCIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZWNyaHctb2NpcikiLz4KPHJlY3QgeD0iMjEwIiB5PSI3OCIgd2lkdGg9IjE1MCIgaGVpZ2h0PSI2MCIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjI4NSIgeT0iMTA0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEycHgiPkFtYXpvbiBFQ1I8L3RleHQ+Cjx0ZXh0IHg9IjI4NSIgeT0iMTIyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+QVdTLW1hbmFnZWQ8L3RleHQ+Cjx0ZXh0IHg9IjQxOCIgeT0iMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtd2VpZ2h0OjcwMCI+Y29tcGlsZWQgYXQgdGhlIGJ1aWxkPC90ZXh0Pgo8cmVjdCB4PSI0NjIiIHk9IjQwIiB3aWR0aD0iMzYyIiBoZWlnaHQ9IjEyMCIgcng9IjE0IiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iNDc2IiB5PSI2MCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6IzA0Nzg1NyI+T04gT0NJIFRFTkFOQ1k8L3RleHQ+CjxyZWN0IHg9IjQ3NiIgeT0iNzgiIHdpZHRoPSIxMDQiIGhlaWdodD0iNjAiIHJ4PSIxMSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI1MjgiIHk9IjEwNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMnB4Ij5idWlsZCAvIHBvZHM8L3RleHQ+Cjx0ZXh0IHg9IjUyOCIgeT0iMTIyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNTk2NjkiPnNhbWUgY29tbWFuZHM8L3RleHQ+CjxsaW5lIHgxPSI1ODAiIHkxPSIxMDgiIHgyPSI2MTYiIHkyPSIxMDgiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2Vjcmh3LW9jaXIpIi8+CjxyZWN0IHg9IjYyMCIgeT0iNzQiIHdpZHRoPSIxODgiIGhlaWdodD0iNjgiIHJ4PSIxMSIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNyIvPgo8dGV4dCB4PSI3MTQiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjExLjVweCI+T0NJIENvbnRhaW5lciBSZWdpc3RyeTwvdGV4dD4KPHRleHQgeD0iNzE0IiB5PSIxMTUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiIj4mbHQ7cmVnaW9uJmd0Oy5vY2lyLmlvLyZsdDtucyZndDs8L3RleHQ+Cjx0ZXh0IHg9IjcxNCIgeT0iMTMxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij50aGUgdGFyZ2V0IGNsb3VkJ3MgbmF0aXZlIHJlZ2lzdHJ5PC90ZXh0Pgo8dGV4dCB4PSI2NDMiIHk9IjE3NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC13ZWlnaHQ6NzAwIj5UZW5zb3I5IGlzIG5vdCBpbiB0aGUgcHVsbCBwYXRoPC90ZXh0Pgo8L3N2Zz4=" alt="Before: on AWS your build pushes images to Amazon ECR and your workloads pull from it. After: on the target cloud the same docker push and pull reach OCI Container Registry, provisioned at the build. Only the registry address is rewritten; the image is unchanged and Tensor9 is not in the pull path." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTg0IiB2aWV3Qm94PSIwIDAgODM2IDE4NCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB5b3VyIGJ1aWxkIHB1c2hlcyBpbWFnZXMgdG8gQW1hem9uIEVDUiBhbmQgeW91ciB3b3JrbG9hZHMgcHVsbCBmcm9tIGl0LiBBZnRlcjogb24gdGhlIHRhcmdldCBjbG91ZCB0aGUgc2FtZSBkb2NrZXIgcHVzaCBhbmQgcHVsbCByZWFjaCBPQ0kgQ29udGFpbmVyIFJlZ2lzdHJ5LCBwcm92aXNpb25lZCBhdCB0aGUgYnVpbGQuIE9ubHkgdGhlIHJlZ2lzdHJ5IGFkZHJlc3MgaXMgcmV3cml0dGVuOyB0aGUgaW1hZ2UgaXMgdW5jaGFuZ2VkIGFuZCBUZW5zb3I5IGlzIG5vdCBpbiB0aGUgcHVsbCBwYXRoLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6I2NiZDVlMX08L3N0eWxlPgo8ZGVmcz48bWFya2VyIGlkPSJlY3Jody1vY2lyIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM5NGEzYjgiLz48L21hcmtlcj48L2RlZnM+CjxyZWN0IHg9IjE2IiB5PSI0MCIgd2lkdGg9IjM1OCIgaGVpZ2h0PSIxMjAiIHJ4PSIxNCIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjMwIiB5PSI2MCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6ICM5NGEzYjgiPk9OIEFXUyBUT0RBWTwvdGV4dD4KPHJlY3QgeD0iMzAiIHk9Ijc4IiB3aWR0aD0iMTE4IiBoZWlnaHQ9IjYwIiByeD0iMTEiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iODkiIHk9IjEwNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMnB4Ij5idWlsZCAvIHBvZHM8L3RleHQ+Cjx0ZXh0IHg9Ijg5IiB5PSIxMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5kb2NrZXIgcHVzaCAvIHB1bGw8L3RleHQ+CjxsaW5lIHgxPSIxNDgiIHkxPSIxMDgiIHgyPSIyMDYiIHkyPSIxMDgiIHN0cm9rZT0iIzQxNGU2MiIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2Vjcmh3LW9jaXIpIi8+CjxyZWN0IHg9IjIxMCIgeT0iNzgiIHdpZHRoPSIxNTAiIGhlaWdodD0iNjAiIHJ4PSIxMSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyODUiIHk9IjEwNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMnB4Ij5BbWF6b24gRUNSPC90ZXh0Pgo8dGV4dCB4PSIyODUiIHk9IjEyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPkFXUy1tYW5hZ2VkPC90ZXh0Pgo8dGV4dCB4PSI0MTgiIHk9IjMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXdlaWdodDo3MDAiPmNvbXBpbGVkIGF0IHRoZSBidWlsZDwvdGV4dD4KPHJlY3QgeD0iNDYyIiB5PSI0MCIgd2lkdGg9IjM2MiIgaGVpZ2h0PSIxMjAiIHJ4PSIxNCIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjQ3NiIgeT0iNjAiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjOTBkZWM4Ij5PTiBPQ0kgVEVOQU5DWTwvdGV4dD4KPHJlY3QgeD0iNDc2IiB5PSI3OCIgd2lkdGg9IjEwNCIgaGVpZ2h0PSI2MCIgcng9IjExIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjUyOCIgeT0iMTA0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjEycHgiPmJ1aWxkIC8gcG9kczwvdGV4dD4KPHRleHQgeD0iNTI4IiB5PSIxMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2MDAgMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjNiI+c2FtZSBjb21tYW5kczwvdGV4dD4KPGxpbmUgeDE9IjU4MCIgeTE9IjEwOCIgeDI9IjYxNiIgeTI9IjEwOCIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZWNyaHctb2NpcikiLz4KPHJlY3QgeD0iNjIwIiB5PSI3NCIgd2lkdGg9IjE4OCIgaGVpZ2h0PSI2OCIgcng9IjExIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS43Ii8+Cjx0ZXh0IHg9IjcxNCIgeT0iOTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTEuNXB4Ij5PQ0kgQ29udGFpbmVyIFJlZ2lzdHJ5PC90ZXh0Pgo8dGV4dCB4PSI3MTQiIHk9IjExNSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDgiPiZsdDtyZWdpb24mZ3Q7Lm9jaXIuaW8vJmx0O25zJmd0OzwvdGV4dD4KPHRleHQgeD0iNzE0IiB5PSIxMzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzgiPnRoZSB0YXJnZXQgY2xvdWQncyBuYXRpdmUgcmVnaXN0cnk8L3RleHQ+Cjx0ZXh0IHg9IjY0MyIgeT0iMTc2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXdlaWdodDo3MDAiPlRlbnNvcjkgaXMgbm90IGluIHRoZSBwdWxsIHBhdGg8L3RleHQ+Cjwvc3ZnPg==" alt="Before: on AWS your build pushes images to Amazon ECR and your workloads pull from it. After: on the target cloud the same docker push and pull reach OCI Container Registry, provisioned at the build. Only the registry address is rewritten; the image is unchanged and Tensor9 is not in the pull path." />
</div>

<p className="t9-caption">Your ECR repositories are provisioned as tenancy-namespaced OCI repositories at the build; afterward your push and pull reach them directly and the image is unchanged.</p>

#### OCI Container Registry features

OCI Container Registry is organized around your **tenancy**. Every repository name is prefixed by your tenancy's object-storage namespace (`<namespace>/<repo>`, with slash-nested paths), and repositories are scoped to **compartments** for access control and billing. Your ECR repositories map **one-to-one** to OCI repositories, so the per-repository topology is preserved, and each keeps an **immutability** flag matching your ECR tag-mutability setting.

Authentication is **OCI IAM**: a workload pulls with an auth token, or with an instance or workload principal through the configured credential helper. An auth token is a credential that you must store and rotate; the principal-based helper avoids a static registry token. The registry is **regional**, with cross-region image copy for multi-region estates, and **OCI Vulnerability Scanning** provides native image scanning. Image retention policies apply region-wide by default and can be overridden with custom policies for specific repositories, deleting images that have not been pulled or versioned within a set number of days.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjE2IiB2aWV3Qm94PSIwIDAgODM2IDIxNiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJPQ0kgQ29udGFpbmVyIFJlZ2lzdHJ5IGNvbnRyb2wgcGxhbmUiPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiMzMzQxNTV9PC9zdHlsZT4KPHRleHQgeD0iMjAiIHk9IjI2IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDojMDQ3ODU3Ij5PQ0kgQ29udGFpbmVyIFJlZ2lzdHJ5IGNvbnRyb2wgcGxhbmU8L3RleHQ+CjxyZWN0IHg9IjIwIiB5PSI0NCIgd2lkdGg9IjI1NiIgaGVpZ2h0PSI2NiIgcng9IjEwIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiNhN2YzZDAiIHN0cm9rZS13aWR0aD0iMS40Ii8+PHRleHQgeD0iMzYiIHk9IjcxIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjEycHgiPlRlbmFuY3ktbmFtZXNwYWNlZDwvdGV4dD48dGV4dCB4PSIzNiIgeT0iOTEiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj4mbHQ7bmFtZXNwYWNlJmd0Oy8mbHQ7cmVwbyZndDsgwrcgY29tcGFydG1lbnRzPC90ZXh0PjxyZWN0IHg9IjI5NiIgeT0iNDQiIHdpZHRoPSIyNTYiIGhlaWdodD0iNjYiIHJ4PSIxMCIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjYTdmM2QwIiBzdHJva2Utd2lkdGg9IjEuNCIvPjx0ZXh0IHg9IjMxMiIgeT0iNzEiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTJweCI+T0NJIElBTSBhdXRoIHRva2VuczwvdGV4dD48dGV4dCB4PSIzMTIiIHk9IjkxIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+dG9rZW4gb3IgaW5zdGFuY2UgcHJpbmNpcGFsPC90ZXh0PjxyZWN0IHg9IjU3MiIgeT0iNDQiIHdpZHRoPSIyNTYiIGhlaWdodD0iNjYiIHJ4PSIxMCIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjYTdmM2QwIiBzdHJva2Utd2lkdGg9IjEuNCIvPjx0ZXh0IHg9IjU4OCIgeT0iNzEiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTJweCI+UmVnaW9uYWwgcmVnaXN0cnk8L3RleHQ+PHRleHQgeD0iNTg4IiB5PSI5MSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPmNyb3NzLXJlZ2lvbiBpbWFnZSBjb3B5PC90ZXh0PjxyZWN0IHg9IjIwIiB5PSIxMjgiIHdpZHRoPSIyNTYiIGhlaWdodD0iNjYiIHJ4PSIxMCIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjYTdmM2QwIiBzdHJva2Utd2lkdGg9IjEuNCIvPjx0ZXh0IHg9IjM2IiB5PSIxNTUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTJweCI+UGVyLXJlcG8gaW1tdXRhYmlsaXR5PC90ZXh0Pjx0ZXh0IHg9IjM2IiB5PSIxNzUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5pbW11dGFibGUtcmVwb3NpdG9yeSBzZXR0aW5nPC90ZXh0PjxyZWN0IHg9IjI5NiIgeT0iMTI4IiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjY2IiByeD0iMTAiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iI2E3ZjNkMCIgc3Ryb2tlLXdpZHRoPSIxLjQiLz48dGV4dCB4PSIzMTIiIHk9IjE1NSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtc2l6ZToxMnB4Ij5WdWxuZXJhYmlsaXR5IHNjYW5uaW5nPC90ZXh0Pjx0ZXh0IHg9IjMxMiIgeT0iMTc1IiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+T0NJIFZ1bG5lcmFiaWxpdHkgU2Nhbm5pbmc8L3RleHQ+PHJlY3QgeD0iNTcyIiB5PSIxMjgiIHdpZHRoPSIyNTYiIGhlaWdodD0iNjYiIHJ4PSIxMCIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjYTdmM2QwIiBzdHJva2Utd2lkdGg9IjEuNCIvPjx0ZXh0IHg9IjU4OCIgeT0iMTU1IiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjEycHgiPkltYWdlIHJldGVudGlvbiBwb2xpY2llczwvdGV4dD48dGV4dCB4PSI1ODgiIHk9IjE3NSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPnJlZ2lvbiBkZWZhdWx0IMK3IHBlci1yZXBvIGN1c3RvbTwvdGV4dD4KPC9zdmc+" alt="OCI Container Registry control plane" />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjE2IiB2aWV3Qm94PSIwIDAgODM2IDIxNiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJPQ0kgQ29udGFpbmVyIFJlZ2lzdHJ5IGNvbnRyb2wgcGxhbmUiPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiNjYmQ1ZTF9PC9zdHlsZT4KPHRleHQgeD0iMjAiIHk9IjI2IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDogIzkwZGVjOCI+T0NJIENvbnRhaW5lciBSZWdpc3RyeSBjb250cm9sIHBsYW5lPC90ZXh0Pgo8cmVjdCB4PSIyMCIgeT0iNDQiIHdpZHRoPSIyNTYiIGhlaWdodD0iNjYiIHJ4PSIxMCIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjM2Q2NjUzIiBzdHJva2Utd2lkdGg9IjEuNCIvPjx0ZXh0IHg9IjM2IiB5PSI3MSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtc2l6ZToxMnB4Ij5UZW5hbmN5LW5hbWVzcGFjZWQ8L3RleHQ+PHRleHQgeD0iMzYiIHk9IjkxIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+Jmx0O25hbWVzcGFjZSZndDsvJmx0O3JlcG8mZ3Q7IMK3IGNvbXBhcnRtZW50czwvdGV4dD48cmVjdCB4PSIyOTYiIHk9IjQ0IiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjY2IiByeD0iMTAiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzNkNjY1MyIgc3Ryb2tlLXdpZHRoPSIxLjQiLz48dGV4dCB4PSIzMTIiIHk9IjcxIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjEycHgiPk9DSSBJQU0gYXV0aCB0b2tlbnM8L3RleHQ+PHRleHQgeD0iMzEyIiB5PSI5MSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPnRva2VuIG9yIGluc3RhbmNlIHByaW5jaXBhbDwvdGV4dD48cmVjdCB4PSI1NzIiIHk9IjQ0IiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjY2IiByeD0iMTAiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzNkNjY1MyIgc3Ryb2tlLXdpZHRoPSIxLjQiLz48dGV4dCB4PSI1ODgiIHk9IjcxIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjEycHgiPlJlZ2lvbmFsIHJlZ2lzdHJ5PC90ZXh0Pjx0ZXh0IHg9IjU4OCIgeT0iOTEiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5jcm9zcy1yZWdpb24gaW1hZ2UgY29weTwvdGV4dD48cmVjdCB4PSIyMCIgeT0iMTI4IiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjY2IiByeD0iMTAiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzNkNjY1MyIgc3Ryb2tlLXdpZHRoPSIxLjQiLz48dGV4dCB4PSIzNiIgeT0iMTU1IiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjEycHgiPlBlci1yZXBvIGltbXV0YWJpbGl0eTwvdGV4dD48dGV4dCB4PSIzNiIgeT0iMTc1IiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+aW1tdXRhYmxlLXJlcG9zaXRvcnkgc2V0dGluZzwvdGV4dD48cmVjdCB4PSIyOTYiIHk9IjEyOCIgd2lkdGg9IjI1NiIgaGVpZ2h0PSI2NiIgcng9IjEwIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMzZDY2NTMiIHN0cm9rZS13aWR0aD0iMS40Ii8+PHRleHQgeD0iMzEyIiB5PSIxNTUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTJweCI+VnVsbmVyYWJpbGl0eSBzY2FubmluZzwvdGV4dD48dGV4dCB4PSIzMTIiIHk9IjE3NSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPk9DSSBWdWxuZXJhYmlsaXR5IFNjYW5uaW5nPC90ZXh0PjxyZWN0IHg9IjU3MiIgeT0iMTI4IiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjY2IiByeD0iMTAiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzNkNjY1MyIgc3Ryb2tlLXdpZHRoPSIxLjQiLz48dGV4dCB4PSI1ODgiIHk9IjE1NSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtc2l6ZToxMnB4Ij5JbWFnZSByZXRlbnRpb24gcG9saWNpZXM8L3RleHQ+PHRleHQgeD0iNTg4IiB5PSIxNzUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5yZWdpb24gZGVmYXVsdCDCtyBwZXItcmVwbyBjdXN0b208L3RleHQ+Cjwvc3ZnPg==" alt="OCI Container Registry control plane" />
</div>

<p className="t9-caption">OCI Container Registry's control plane, organized around your tenancy and compartments.</p>

#### Limitations

△ Where ECR and OCI Container Registry stay different

* **Image retention is configured separately.** ECR's per-repository lifecycle rule has no direct analog; OCIR applies a region-wide retention policy by default that you can override for specific repositories.
* **Scanning moves to OCI Vulnerability Scanning.** A native scanner with its own coverage, different from ECR's enhanced scanning.
* **Cross-region replication is a separate feature.** OCIR replication is configured on its own and is not translated on the default configuration.

#### Other considerations

Plan image delivery, credentials, and storage costs for the target registry.

* **Push images from your build pipeline:** the build creates one tenancy-namespaced OCI repository per ECR repository; your pipeline repoints to `<region>.ocir.io` and pushes, since the image data path stays yours.
* **Pull identity moves to OCI IAM:** a workload pulls with an auth token or an in-tenancy instance or workload principal, replacing the ECR caller-IAM pull; the pull credential is established on OCI.
* **Repositories live under your tenancy namespace and compartments.** Oracle operates the registry, and the compartment placement that scopes access and billing is set on OCI rather than inherited from AWS.
* **Image storage is billed to the tenancy.** OCIR bills stored image data under your tenancy, retention applies region-wide by default, and cross-region copy is configured separately when a multi-region estate needs it.

## On Private Kubernetes

### Via Zot Registry

| Operation                | Area         | Support      | Depth        | Notes                                                                                                                                              |
| ------------------------ | ------------ | ------------ | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| Registry authentication  | Auth         | Supported    | Common       | in-cluster imagePullSecret; Harbor also supports robot accounts                                                                                    |
| Reference rewrite        | Image path   | Supported    | Common       | every consumer's ECR image ref is rewritten to the in-cluster host; the imagePullSecret is injected and the ECR auth helper dropped                |
| docker push / pull       | Image path   | Supported    | Common       | byte-identical OCI Distribution v2; the host changes to registry.\<ns>.svc                                                                         |
| Lifecycle policy mapping | Lifecycle    | Partial      | Most usage   | Zot retention policies (registry-level)                                                                                                            |
| Image load (bootstrap)   | Migration    | Supported    | Common       | The appliance loads images before workloads pull them. Images are identified by content, so repeating the load does not duplicate them.            |
| Cross-region replication | Replication  | Out of scope | Full surface | an in-cluster registry has no cross-region replica; the pull-through cache to ECR is deliberately not used, so there is no outbound AWS dependency |
| Repository provisioning  | Repositories | Supported    | Common       | the registry is deployed in-cluster and the ECR repository set becomes its repositories/namespaces (N to N)                                        |
| Scan-on-push findings    | Scanning     | Partial      | Most usage   | Zot exposes CVE search via an optional Trivy-DB extension (not built-in scan-on-push)                                                              |

#### How it works

On AWS your build pushes container images to **Amazon ECR** and your workloads pull from it. When the target is your own **Kubernetes cluster**, the registry runs inside the cluster: an open-source registry you operate, with no cloud registry service behind it. Harbor is the recommended registry; Zot is a smaller alternative; Distribution provides basic image storage and delivery. At the build, Tensor9 provisions the registry, loads your images into it through the appliance, and rewrites every image reference to the in-cluster host; afterward your workloads pull directly from it.

The image itself never changes. ECR and the in-cluster registry both speak the **OCI Distribution v2** protocol, so your image manifest, its layer blobs, and their content digests are byte-identical; docker and containerd are untouched. The one thing rewritten at the build is the registry address: your ECR host becomes `registry.<ns>.svc`. You operate the registry and configure its policies.

This mapping provisions a target registry and updates image references. Docker and containerd use the target's registry protocol and credentials. It does not provide the AWS ECR management or authorization-token API. Applications that call ECR directly, including `GetAuthorizationToken`, need a separate integration.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTg0IiB2aWV3Qm94PSIwIDAgODM2IDE4NCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB5b3VyIGJ1aWxkIHB1c2hlcyBpbWFnZXMgdG8gQW1hem9uIEVDUiBhbmQgeW91ciB3b3JrbG9hZHMgcHVsbCBmcm9tIGl0LiBBZnRlcjogb24gdGhlIHRhcmdldCBjbG91ZCB0aGUgc2FtZSBkb2NrZXIgcHVzaCBhbmQgcHVsbCByZWFjaCBpbi1jbHVzdGVyIHJlZ2lzdHJ5LCBwcm92aXNpb25lZCBhdCB0aGUgYnVpbGQuIE9ubHkgdGhlIHJlZ2lzdHJ5IGFkZHJlc3MgaXMgcmV3cml0dGVuOyB0aGUgaW1hZ2UgaXMgdW5jaGFuZ2VkIGFuZCBUZW5zb3I5IGlzIG5vdCBpbiB0aGUgcHVsbCBwYXRoLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6IzMzNDE1NX08L3N0eWxlPgo8ZGVmcz48bWFya2VyIGlkPSJlY3Jody1pbmNsdXN0ZXIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzk0YTNiOCIvPjwvbWFya2VyPjwvZGVmcz4KPHJlY3QgeD0iMTYiIHk9IjQwIiB3aWR0aD0iMzU4IiBoZWlnaHQ9IjEyMCIgcng9IjE0IiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iMzAiIHk9IjYwIiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDojOTRhM2I4Ij5PTiBBV1MgVE9EQVk8L3RleHQ+CjxyZWN0IHg9IjMwIiB5PSI3OCIgd2lkdGg9IjExOCIgaGVpZ2h0PSI2MCIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9Ijg5IiB5PSIxMDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTJweCI+YnVpbGQgLyBwb2RzPC90ZXh0Pgo8dGV4dCB4PSI4OSIgeT0iMTIyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+ZG9ja2VyIHB1c2ggLyBwdWxsPC90ZXh0Pgo8bGluZSB4MT0iMTQ4IiB5MT0iMTA4IiB4Mj0iMjA2IiB5Mj0iMTA4IiBzdHJva2U9IiM5NGEzYjgiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNlY3Jody1pbmNsdXN0ZXIpIi8+CjxyZWN0IHg9IjIxMCIgeT0iNzgiIHdpZHRoPSIxNTAiIGhlaWdodD0iNjAiIHJ4PSIxMSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyODUiIHk9IjEwNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMnB4Ij5BbWF6b24gRUNSPC90ZXh0Pgo8dGV4dCB4PSIyODUiIHk9IjEyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPkFXUy1tYW5hZ2VkPC90ZXh0Pgo8dGV4dCB4PSI0MTgiIHk9IjMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXdlaWdodDo3MDAiPmNvbXBpbGVkIGF0IHRoZSBidWlsZDwvdGV4dD4KPHJlY3QgeD0iNDYyIiB5PSI0MCIgd2lkdGg9IjM2MiIgaGVpZ2h0PSIxMjAiIHJ4PSIxNCIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjQ3NiIgeT0iNjAiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiMwNDc4NTciPklOIEtVQkVSTkVURVMgQ0xVU1RFUjwvdGV4dD4KPHJlY3QgeD0iNDc2IiB5PSI3OCIgd2lkdGg9IjEwNCIgaGVpZ2h0PSI2MCIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjUyOCIgeT0iMTA0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEycHgiPmJ1aWxkIC8gcG9kczwvdGV4dD4KPHRleHQgeD0iNTI4IiB5PSIxMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2MDAgMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA1OTY2OSI+c2FtZSBjb21tYW5kczwvdGV4dD4KPGxpbmUgeDE9IjU4MCIgeTE9IjEwOCIgeDI9IjYxNiIgeTI9IjEwOCIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZWNyaHctaW5jbHVzdGVyKSIvPgo8cmVjdCB4PSI2MjAiIHk9Ijc0IiB3aWR0aD0iMTg4IiBoZWlnaHQ9IjY4IiByeD0iMTEiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjciLz4KPHRleHQgeD0iNzE0IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtc2l6ZToxMS41cHgiPmluLWNsdXN0ZXIgcmVnaXN0cnk8L3RleHQ+Cjx0ZXh0IHg9IjcxNCIgeT0iMTE1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzY0NzQ4YiI+cmVnaXN0cnkuJmx0O25zJmd0Oy5zdmM8L3RleHQ+Cjx0ZXh0IHg9IjcxNCIgeT0iMTMxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij55b3Ugb3BlcmF0ZSBpdCwgaW4tY2x1c3RlcjwvdGV4dD4KPHRleHQgeD0iNjQzIiB5PSIxNzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtd2VpZ2h0OjcwMCI+VGVuc29yOSBpcyBub3QgaW4gdGhlIHB1bGwgcGF0aDwvdGV4dD4KPC9zdmc+" alt="Before: on AWS your build pushes images to Amazon ECR and your workloads pull from it. After: on the target cloud the same docker push and pull reach in-cluster registry, provisioned at the build. Only the registry address is rewritten; the image is unchanged and Tensor9 is not in the pull path." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTg0IiB2aWV3Qm94PSIwIDAgODM2IDE4NCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB5b3VyIGJ1aWxkIHB1c2hlcyBpbWFnZXMgdG8gQW1hem9uIEVDUiBhbmQgeW91ciB3b3JrbG9hZHMgcHVsbCBmcm9tIGl0LiBBZnRlcjogb24gdGhlIHRhcmdldCBjbG91ZCB0aGUgc2FtZSBkb2NrZXIgcHVzaCBhbmQgcHVsbCByZWFjaCBpbi1jbHVzdGVyIHJlZ2lzdHJ5LCBwcm92aXNpb25lZCBhdCB0aGUgYnVpbGQuIE9ubHkgdGhlIHJlZ2lzdHJ5IGFkZHJlc3MgaXMgcmV3cml0dGVuOyB0aGUgaW1hZ2UgaXMgdW5jaGFuZ2VkIGFuZCBUZW5zb3I5IGlzIG5vdCBpbiB0aGUgcHVsbCBwYXRoLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6I2NiZDVlMX08L3N0eWxlPgo8ZGVmcz48bWFya2VyIGlkPSJlY3Jody1pbmNsdXN0ZXIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzk0YTNiOCIvPjwvbWFya2VyPjwvZGVmcz4KPHJlY3QgeD0iMTYiIHk9IjQwIiB3aWR0aD0iMzU4IiBoZWlnaHQ9IjEyMCIgcng9IjE0IiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iMzAiIHk9IjYwIiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDogIzk0YTNiOCI+T04gQVdTIFRPREFZPC90ZXh0Pgo8cmVjdCB4PSIzMCIgeT0iNzgiIHdpZHRoPSIxMTgiIGhlaWdodD0iNjAiIHJ4PSIxMSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI4OSIgeT0iMTA0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjEycHgiPmJ1aWxkIC8gcG9kczwvdGV4dD4KPHRleHQgeD0iODkiIHk9IjEyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPmRvY2tlciBwdXNoIC8gcHVsbDwvdGV4dD4KPGxpbmUgeDE9IjE0OCIgeTE9IjEwOCIgeDI9IjIwNiIgeTI9IjEwOCIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZWNyaHctaW5jbHVzdGVyKSIvPgo8cmVjdCB4PSIyMTAiIHk9Ijc4IiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjYwIiByeD0iMTEiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjg1IiB5PSIxMDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTJweCI+QW1hem9uIEVDUjwvdGV4dD4KPHRleHQgeD0iMjg1IiB5PSIxMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5BV1MtbWFuYWdlZDwvdGV4dD4KPHRleHQgeD0iNDE4IiB5PSIzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC13ZWlnaHQ6NzAwIj5jb21waWxlZCBhdCB0aGUgYnVpbGQ8L3RleHQ+CjxyZWN0IHg9IjQ2MiIgeT0iNDAiIHdpZHRoPSIzNjIiIGhlaWdodD0iMTIwIiByeD0iMTQiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSI0NzYiIHk9IjYwIiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDogIzkwZGVjOCI+SU4gS1VCRVJORVRFUyBDTFVTVEVSPC90ZXh0Pgo8cmVjdCB4PSI0NzYiIHk9Ijc4IiB3aWR0aD0iMTA0IiBoZWlnaHQ9IjYwIiByeD0iMTEiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNTI4IiB5PSIxMDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTJweCI+YnVpbGQgLyBwb2RzPC90ZXh0Pgo8dGV4dCB4PSI1MjgiIHk9IjEyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM2Ij5zYW1lIGNvbW1hbmRzPC90ZXh0Pgo8bGluZSB4MT0iNTgwIiB5MT0iMTA4IiB4Mj0iNjE2IiB5Mj0iMTA4IiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNlY3Jody1pbmNsdXN0ZXIpIi8+CjxyZWN0IHg9IjYyMCIgeT0iNzQiIHdpZHRoPSIxODgiIGhlaWdodD0iNjgiIHJ4PSIxMSIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNyIvPgo8dGV4dCB4PSI3MTQiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjExLjVweCI+aW4tY2x1c3RlciByZWdpc3RyeTwvdGV4dD4KPHRleHQgeD0iNzE0IiB5PSIxMTUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4Ij5yZWdpc3RyeS4mbHQ7bnMmZ3Q7LnN2YzwvdGV4dD4KPHRleHQgeD0iNzE0IiB5PSIxMzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzgiPnlvdSBvcGVyYXRlIGl0LCBpbi1jbHVzdGVyPC90ZXh0Pgo8dGV4dCB4PSI2NDMiIHk9IjE3NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC13ZWlnaHQ6NzAwIj5UZW5zb3I5IGlzIG5vdCBpbiB0aGUgcHVsbCBwYXRoPC90ZXh0Pgo8L3N2Zz4=" alt="Before: on AWS your build pushes images to Amazon ECR and your workloads pull from it. After: on the target cloud the same docker push and pull reach in-cluster registry, provisioned at the build. Only the registry address is rewritten; the image is unchanged and Tensor9 is not in the pull path." />
</div>

<p className="t9-caption">Your images are loaded into an in-cluster registry through the appliance at the build; afterward your workloads pull from it directly and the image is unchanged.</p>

#### Registry features and operation

The customer operates the registry and configures the features provided by the selected software. The registry is deployed empty : your images are loaded into it through the appliance's image delivery service before any workload pulls, and there is deliberately **no pull-through cache** back to ECR, which removes the outbound AWS dependency entirely.

**Harbor**, the recommended registry, ships built-in Trivy scan-on-push, robot accounts, per-repository retention, and immutable-tag rules, the closest match to ECR's registry-management features. **Zot** is lightweight and OCI-native, with vulnerability (CVE) search available through an optional extension. **Distribution** is the bare reference registry: it stores and serves images and offers blob garbage-collection, but no scanning or tag controls. Whichever you run, your ECR repositories map one-to-one to the registry's repositories, and a workload pulls with an injected `imagePullSecret`; Harbor's robot accounts provide the richer, scoped path.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjE2IiB2aWV3Qm94PSIwIDAgODM2IDIxNiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJJbi1jbHVzdGVyIHJlZ2lzdHJ5IG1vZGVsIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojMzM0MTU1fTwvc3R5bGU+Cjx0ZXh0IHg9IjIwIiB5PSIyNiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6IzA0Nzg1NyI+SW4tY2x1c3RlciByZWdpc3RyeSBtb2RlbDwvdGV4dD4KPHJlY3QgeD0iMjAiIHk9IjQ0IiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjY2IiByeD0iMTAiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iI2E3ZjNkMCIgc3Ryb2tlLXdpZHRoPSIxLjQiLz48dGV4dCB4PSIzNiIgeT0iNzEiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTJweCI+U2VsZi1tYW5hZ2VkPC90ZXh0Pjx0ZXh0IHg9IjM2IiB5PSI5MSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPnlvdSBvcGVyYXRlIHRoZSByZWdpc3RyeTwvdGV4dD48cmVjdCB4PSIyOTYiIHk9IjQ0IiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjY2IiByeD0iMTAiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iI2E3ZjNkMCIgc3Ryb2tlLXdpZHRoPSIxLjQiLz48dGV4dCB4PSIzMTIiIHk9IjcxIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjEycHgiPkRlcGxveWVkIGVtcHR5PC90ZXh0Pjx0ZXh0IHg9IjMxMiIgeT0iOTEiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5pbWFnZXMgbG9hZGVkIHZpYSB0aGUgYXBwbGlhbmNlPC90ZXh0PjxyZWN0IHg9IjU3MiIgeT0iNDQiIHdpZHRoPSIyNTYiIGhlaWdodD0iNjYiIHJ4PSIxMCIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjYTdmM2QwIiBzdHJva2Utd2lkdGg9IjEuNCIvPjx0ZXh0IHg9IjU4OCIgeT0iNzEiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTJweCI+SGFyYm9yIMK3IHJlY29tbWVuZGVkPC90ZXh0Pjx0ZXh0IHg9IjU4OCIgeT0iOTEiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5Ucml2eSBzY2FuIMK3IHJvYm90IGFjY291bnRzPC90ZXh0PjxyZWN0IHg9IjIwIiB5PSIxMjgiIHdpZHRoPSIyNTYiIGhlaWdodD0iNjYiIHJ4PSIxMCIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjYTdmM2QwIiBzdHJva2Utd2lkdGg9IjEuNCIvPjx0ZXh0IHg9IjM2IiB5PSIxNTUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTJweCI+Wm90PC90ZXh0Pjx0ZXh0IHg9IjM2IiB5PSIxNzUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5saWdodHdlaWdodCwgT0NJLW5hdGl2ZTwvdGV4dD48cmVjdCB4PSIyOTYiIHk9IjEyOCIgd2lkdGg9IjI1NiIgaGVpZ2h0PSI2NiIgcng9IjEwIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiNhN2YzZDAiIHN0cm9rZS13aWR0aD0iMS40Ii8+PHRleHQgeD0iMzEyIiB5PSIxNTUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTJweCI+RGlzdHJpYnV0aW9uPC90ZXh0Pjx0ZXh0IHg9IjMxMiIgeT0iMTc1IiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+YmFyZSByZWZlcmVuY2UsIGJsb2IgR0Mgb25seTwvdGV4dD48cmVjdCB4PSI1NzIiIHk9IjEyOCIgd2lkdGg9IjI1NiIgaGVpZ2h0PSI2NiIgcng9IjEwIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiNhN2YzZDAiIHN0cm9rZS13aWR0aD0iMS40Ii8+PHRleHQgeD0iNTg4IiB5PSIxNTUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTJweCI+UHVsbCBpZGVudGl0eTwvdGV4dD48dGV4dCB4PSI1ODgiIHk9IjE3NSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPmltYWdlUHVsbFNlY3JldCAvIHJvYm90IGFjY291bnRzPC90ZXh0Pgo8L3N2Zz4=" alt="In-cluster registry model" />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjE2IiB2aWV3Qm94PSIwIDAgODM2IDIxNiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJJbi1jbHVzdGVyIHJlZ2lzdHJ5IG1vZGVsIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojY2JkNWUxfTwvc3R5bGU+Cjx0ZXh0IHg9IjIwIiB5PSIyNiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6ICM5MGRlYzgiPkluLWNsdXN0ZXIgcmVnaXN0cnkgbW9kZWw8L3RleHQ+CjxyZWN0IHg9IjIwIiB5PSI0NCIgd2lkdGg9IjI1NiIgaGVpZ2h0PSI2NiIgcng9IjEwIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMzZDY2NTMiIHN0cm9rZS13aWR0aD0iMS40Ii8+PHRleHQgeD0iMzYiIHk9IjcxIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjEycHgiPlNlbGYtbWFuYWdlZDwvdGV4dD48dGV4dCB4PSIzNiIgeT0iOTEiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij55b3Ugb3BlcmF0ZSB0aGUgcmVnaXN0cnk8L3RleHQ+PHJlY3QgeD0iMjk2IiB5PSI0NCIgd2lkdGg9IjI1NiIgaGVpZ2h0PSI2NiIgcng9IjEwIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMzZDY2NTMiIHN0cm9rZS13aWR0aD0iMS40Ii8+PHRleHQgeD0iMzEyIiB5PSI3MSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtc2l6ZToxMnB4Ij5EZXBsb3llZCBlbXB0eTwvdGV4dD48dGV4dCB4PSIzMTIiIHk9IjkxIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+aW1hZ2VzIGxvYWRlZCB2aWEgdGhlIGFwcGxpYW5jZTwvdGV4dD48cmVjdCB4PSI1NzIiIHk9IjQ0IiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjY2IiByeD0iMTAiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzNkNjY1MyIgc3Ryb2tlLXdpZHRoPSIxLjQiLz48dGV4dCB4PSI1ODgiIHk9IjcxIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjEycHgiPkhhcmJvciDCtyByZWNvbW1lbmRlZDwvdGV4dD48dGV4dCB4PSI1ODgiIHk9IjkxIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+VHJpdnkgc2NhbiDCtyByb2JvdCBhY2NvdW50czwvdGV4dD48cmVjdCB4PSIyMCIgeT0iMTI4IiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjY2IiByeD0iMTAiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzNkNjY1MyIgc3Ryb2tlLXdpZHRoPSIxLjQiLz48dGV4dCB4PSIzNiIgeT0iMTU1IiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjEycHgiPlpvdDwvdGV4dD48dGV4dCB4PSIzNiIgeT0iMTc1IiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+bGlnaHR3ZWlnaHQsIE9DSS1uYXRpdmU8L3RleHQ+PHJlY3QgeD0iMjk2IiB5PSIxMjgiIHdpZHRoPSIyNTYiIGhlaWdodD0iNjYiIHJ4PSIxMCIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjM2Q2NjUzIiBzdHJva2Utd2lkdGg9IjEuNCIvPjx0ZXh0IHg9IjMxMiIgeT0iMTU1IiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjEycHgiPkRpc3RyaWJ1dGlvbjwvdGV4dD48dGV4dCB4PSIzMTIiIHk9IjE3NSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPmJhcmUgcmVmZXJlbmNlLCBibG9iIEdDIG9ubHk8L3RleHQ+PHJlY3QgeD0iNTcyIiB5PSIxMjgiIHdpZHRoPSIyNTYiIGhlaWdodD0iNjYiIHJ4PSIxMCIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjM2Q2NjUzIiBzdHJva2Utd2lkdGg9IjEuNCIvPjx0ZXh0IHg9IjU4OCIgeT0iMTU1IiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjEycHgiPlB1bGwgaWRlbnRpdHk8L3RleHQ+PHRleHQgeD0iNTg4IiB5PSIxNzUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5pbWFnZVB1bGxTZWNyZXQgLyByb2JvdCBhY2NvdW50czwvdGV4dD4KPC9zdmc+" alt="In-cluster registry model" />
</div>

<p className="t9-caption">Choose the registry features your application needs: Harbor, Zot, or Distribution.</p>

#### Limitations

△ Where ECR and an in-cluster registry stay different

* **The registry starts empty.** Your images are loaded through the appliance before any workload pulls; there is deliberately no pull-through cache back to ECR.
* **Scanning, immutability, and retention depend on which registry you run.** Harbor supports most ECR management features; Zot covers it partially; Distribution is a bare registry with none of it built in.
* **There is no managed cross-region replica.** An in-cluster registry serves the cluster it runs in; images are seeded through the appliance rather than replicated across regions.

#### Other considerations

Plan image delivery, credentials, and storage costs for the target registry.

* **Images are seeded through the appliance, then served locally:** the registry is deployed empty and your images are loaded through the appliance before any workload pulls, with no pull-through cache back to ECR, so the running cluster has no outbound AWS dependency.
* **You operate the registry:** there is no cloud control plane; Harbor, Zot, or Distribution is yours to run, and its availability, upgrades, and access model are your responsibility.
* **Back up the registry's persistent volume:** the registry's blobs live on a PersistentVolume in the cluster, so backup and retention of the image store are yours, not a managed registry's.
* **Budget for cluster compute and storage:** the registry consumes the cluster's own compute and storage rather than a managed per-tier or per-byte charge, and the feature depth (scanning, immutability, retention) follows which registry you chose.

### Via Distribution Registry

| Operation                | Area         | Support      | Depth        | Notes                                                                                                                                              |
| ------------------------ | ------------ | ------------ | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| Registry authentication  | Auth         | Supported    | Common       | in-cluster imagePullSecret; Harbor also supports robot accounts                                                                                    |
| Reference rewrite        | Image path   | Supported    | Common       | every consumer's ECR image ref is rewritten to the in-cluster host; the imagePullSecret is injected and the ECR auth helper dropped                |
| docker push / pull       | Image path   | Supported    | Common       | byte-identical OCI Distribution v2; the host changes to registry.\<ns>.svc                                                                         |
| Lifecycle policy mapping | Lifecycle    | Partial      | Most usage   | Distribution offers blob garbage-collection only, not tag/age retention                                                                            |
| Image load (bootstrap)   | Migration    | Supported    | Common       | The appliance loads images before workloads pull them. Images are identified by content, so repeating the load does not duplicate them.            |
| Cross-region replication | Replication  | Out of scope | Full surface | an in-cluster registry has no cross-region replica; the pull-through cache to ECR is deliberately not used, so there is no outbound AWS dependency |
| Repository provisioning  | Repositories | Supported    | Common       | the registry is deployed in-cluster and the ECR repository set becomes its repositories/namespaces (N to N)                                        |
| Scan-on-push findings    | Scanning     | Out of scope | Most usage   | CNCF Distribution has no built-in vulnerability scanner                                                                                            |

#### How it works

On AWS your build pushes container images to **Amazon ECR** and your workloads pull from it. When the target is your own **Kubernetes cluster**, the registry runs inside the cluster: an open-source registry you operate, with no cloud registry service behind it. Harbor is the recommended registry; Zot is a smaller alternative; Distribution provides basic image storage and delivery. At the build, Tensor9 provisions the registry, loads your images into it through the appliance, and rewrites every image reference to the in-cluster host; afterward your workloads pull directly from it.

The image itself never changes. ECR and the in-cluster registry both speak the **OCI Distribution v2** protocol, so your image manifest, its layer blobs, and their content digests are byte-identical; docker and containerd are untouched. The one thing rewritten at the build is the registry address: your ECR host becomes `registry.<ns>.svc`. You operate the registry and configure its policies.

This mapping provisions a target registry and updates image references. Docker and containerd use the target's registry protocol and credentials. It does not provide the AWS ECR management or authorization-token API. Applications that call ECR directly, including `GetAuthorizationToken`, need a separate integration.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTg0IiB2aWV3Qm94PSIwIDAgODM2IDE4NCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB5b3VyIGJ1aWxkIHB1c2hlcyBpbWFnZXMgdG8gQW1hem9uIEVDUiBhbmQgeW91ciB3b3JrbG9hZHMgcHVsbCBmcm9tIGl0LiBBZnRlcjogb24gdGhlIHRhcmdldCBjbG91ZCB0aGUgc2FtZSBkb2NrZXIgcHVzaCBhbmQgcHVsbCByZWFjaCBpbi1jbHVzdGVyIHJlZ2lzdHJ5LCBwcm92aXNpb25lZCBhdCB0aGUgYnVpbGQuIE9ubHkgdGhlIHJlZ2lzdHJ5IGFkZHJlc3MgaXMgcmV3cml0dGVuOyB0aGUgaW1hZ2UgaXMgdW5jaGFuZ2VkIGFuZCBUZW5zb3I5IGlzIG5vdCBpbiB0aGUgcHVsbCBwYXRoLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6IzMzNDE1NX08L3N0eWxlPgo8ZGVmcz48bWFya2VyIGlkPSJlY3Jody1pbmNsdXN0ZXIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzk0YTNiOCIvPjwvbWFya2VyPjwvZGVmcz4KPHJlY3QgeD0iMTYiIHk9IjQwIiB3aWR0aD0iMzU4IiBoZWlnaHQ9IjEyMCIgcng9IjE0IiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iMzAiIHk9IjYwIiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDojOTRhM2I4Ij5PTiBBV1MgVE9EQVk8L3RleHQ+CjxyZWN0IHg9IjMwIiB5PSI3OCIgd2lkdGg9IjExOCIgaGVpZ2h0PSI2MCIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9Ijg5IiB5PSIxMDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTJweCI+YnVpbGQgLyBwb2RzPC90ZXh0Pgo8dGV4dCB4PSI4OSIgeT0iMTIyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+ZG9ja2VyIHB1c2ggLyBwdWxsPC90ZXh0Pgo8bGluZSB4MT0iMTQ4IiB5MT0iMTA4IiB4Mj0iMjA2IiB5Mj0iMTA4IiBzdHJva2U9IiM5NGEzYjgiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNlY3Jody1pbmNsdXN0ZXIpIi8+CjxyZWN0IHg9IjIxMCIgeT0iNzgiIHdpZHRoPSIxNTAiIGhlaWdodD0iNjAiIHJ4PSIxMSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyODUiIHk9IjEwNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMnB4Ij5BbWF6b24gRUNSPC90ZXh0Pgo8dGV4dCB4PSIyODUiIHk9IjEyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPkFXUy1tYW5hZ2VkPC90ZXh0Pgo8dGV4dCB4PSI0MTgiIHk9IjMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXdlaWdodDo3MDAiPmNvbXBpbGVkIGF0IHRoZSBidWlsZDwvdGV4dD4KPHJlY3QgeD0iNDYyIiB5PSI0MCIgd2lkdGg9IjM2MiIgaGVpZ2h0PSIxMjAiIHJ4PSIxNCIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjQ3NiIgeT0iNjAiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiMwNDc4NTciPklOIEtVQkVSTkVURVMgQ0xVU1RFUjwvdGV4dD4KPHJlY3QgeD0iNDc2IiB5PSI3OCIgd2lkdGg9IjEwNCIgaGVpZ2h0PSI2MCIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjUyOCIgeT0iMTA0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEycHgiPmJ1aWxkIC8gcG9kczwvdGV4dD4KPHRleHQgeD0iNTI4IiB5PSIxMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2MDAgMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA1OTY2OSI+c2FtZSBjb21tYW5kczwvdGV4dD4KPGxpbmUgeDE9IjU4MCIgeTE9IjEwOCIgeDI9IjYxNiIgeTI9IjEwOCIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZWNyaHctaW5jbHVzdGVyKSIvPgo8cmVjdCB4PSI2MjAiIHk9Ijc0IiB3aWR0aD0iMTg4IiBoZWlnaHQ9IjY4IiByeD0iMTEiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjciLz4KPHRleHQgeD0iNzE0IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtc2l6ZToxMS41cHgiPmluLWNsdXN0ZXIgcmVnaXN0cnk8L3RleHQ+Cjx0ZXh0IHg9IjcxNCIgeT0iMTE1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzY0NzQ4YiI+cmVnaXN0cnkuJmx0O25zJmd0Oy5zdmM8L3RleHQ+Cjx0ZXh0IHg9IjcxNCIgeT0iMTMxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij55b3Ugb3BlcmF0ZSBpdCwgaW4tY2x1c3RlcjwvdGV4dD4KPHRleHQgeD0iNjQzIiB5PSIxNzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtd2VpZ2h0OjcwMCI+VGVuc29yOSBpcyBub3QgaW4gdGhlIHB1bGwgcGF0aDwvdGV4dD4KPC9zdmc+" alt="Before: on AWS your build pushes images to Amazon ECR and your workloads pull from it. After: on the target cloud the same docker push and pull reach in-cluster registry, provisioned at the build. Only the registry address is rewritten; the image is unchanged and Tensor9 is not in the pull path." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTg0IiB2aWV3Qm94PSIwIDAgODM2IDE4NCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB5b3VyIGJ1aWxkIHB1c2hlcyBpbWFnZXMgdG8gQW1hem9uIEVDUiBhbmQgeW91ciB3b3JrbG9hZHMgcHVsbCBmcm9tIGl0LiBBZnRlcjogb24gdGhlIHRhcmdldCBjbG91ZCB0aGUgc2FtZSBkb2NrZXIgcHVzaCBhbmQgcHVsbCByZWFjaCBpbi1jbHVzdGVyIHJlZ2lzdHJ5LCBwcm92aXNpb25lZCBhdCB0aGUgYnVpbGQuIE9ubHkgdGhlIHJlZ2lzdHJ5IGFkZHJlc3MgaXMgcmV3cml0dGVuOyB0aGUgaW1hZ2UgaXMgdW5jaGFuZ2VkIGFuZCBUZW5zb3I5IGlzIG5vdCBpbiB0aGUgcHVsbCBwYXRoLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6I2NiZDVlMX08L3N0eWxlPgo8ZGVmcz48bWFya2VyIGlkPSJlY3Jody1pbmNsdXN0ZXIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzk0YTNiOCIvPjwvbWFya2VyPjwvZGVmcz4KPHJlY3QgeD0iMTYiIHk9IjQwIiB3aWR0aD0iMzU4IiBoZWlnaHQ9IjEyMCIgcng9IjE0IiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iMzAiIHk9IjYwIiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDogIzk0YTNiOCI+T04gQVdTIFRPREFZPC90ZXh0Pgo8cmVjdCB4PSIzMCIgeT0iNzgiIHdpZHRoPSIxMTgiIGhlaWdodD0iNjAiIHJ4PSIxMSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI4OSIgeT0iMTA0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjEycHgiPmJ1aWxkIC8gcG9kczwvdGV4dD4KPHRleHQgeD0iODkiIHk9IjEyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPmRvY2tlciBwdXNoIC8gcHVsbDwvdGV4dD4KPGxpbmUgeDE9IjE0OCIgeTE9IjEwOCIgeDI9IjIwNiIgeTI9IjEwOCIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZWNyaHctaW5jbHVzdGVyKSIvPgo8cmVjdCB4PSIyMTAiIHk9Ijc4IiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjYwIiByeD0iMTEiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjg1IiB5PSIxMDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTJweCI+QW1hem9uIEVDUjwvdGV4dD4KPHRleHQgeD0iMjg1IiB5PSIxMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5BV1MtbWFuYWdlZDwvdGV4dD4KPHRleHQgeD0iNDE4IiB5PSIzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC13ZWlnaHQ6NzAwIj5jb21waWxlZCBhdCB0aGUgYnVpbGQ8L3RleHQ+CjxyZWN0IHg9IjQ2MiIgeT0iNDAiIHdpZHRoPSIzNjIiIGhlaWdodD0iMTIwIiByeD0iMTQiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSI0NzYiIHk9IjYwIiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDogIzkwZGVjOCI+SU4gS1VCRVJORVRFUyBDTFVTVEVSPC90ZXh0Pgo8cmVjdCB4PSI0NzYiIHk9Ijc4IiB3aWR0aD0iMTA0IiBoZWlnaHQ9IjYwIiByeD0iMTEiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNTI4IiB5PSIxMDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTJweCI+YnVpbGQgLyBwb2RzPC90ZXh0Pgo8dGV4dCB4PSI1MjgiIHk9IjEyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM2Ij5zYW1lIGNvbW1hbmRzPC90ZXh0Pgo8bGluZSB4MT0iNTgwIiB5MT0iMTA4IiB4Mj0iNjE2IiB5Mj0iMTA4IiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNlY3Jody1pbmNsdXN0ZXIpIi8+CjxyZWN0IHg9IjYyMCIgeT0iNzQiIHdpZHRoPSIxODgiIGhlaWdodD0iNjgiIHJ4PSIxMSIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNyIvPgo8dGV4dCB4PSI3MTQiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjExLjVweCI+aW4tY2x1c3RlciByZWdpc3RyeTwvdGV4dD4KPHRleHQgeD0iNzE0IiB5PSIxMTUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4Ij5yZWdpc3RyeS4mbHQ7bnMmZ3Q7LnN2YzwvdGV4dD4KPHRleHQgeD0iNzE0IiB5PSIxMzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzgiPnlvdSBvcGVyYXRlIGl0LCBpbi1jbHVzdGVyPC90ZXh0Pgo8dGV4dCB4PSI2NDMiIHk9IjE3NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC13ZWlnaHQ6NzAwIj5UZW5zb3I5IGlzIG5vdCBpbiB0aGUgcHVsbCBwYXRoPC90ZXh0Pgo8L3N2Zz4=" alt="Before: on AWS your build pushes images to Amazon ECR and your workloads pull from it. After: on the target cloud the same docker push and pull reach in-cluster registry, provisioned at the build. Only the registry address is rewritten; the image is unchanged and Tensor9 is not in the pull path." />
</div>

<p className="t9-caption">Your images are loaded into an in-cluster registry through the appliance at the build; afterward your workloads pull from it directly and the image is unchanged.</p>

#### Registry features and operation

The customer operates the registry and configures the features provided by the selected software. The registry is deployed empty : your images are loaded into it through the appliance's image delivery service before any workload pulls, and there is deliberately **no pull-through cache** back to ECR, which removes the outbound AWS dependency entirely.

**Harbor**, the recommended registry, ships built-in Trivy scan-on-push, robot accounts, per-repository retention, and immutable-tag rules, the closest match to ECR's registry-management features. **Zot** is lightweight and OCI-native, with vulnerability (CVE) search available through an optional extension. **Distribution** is the bare reference registry: it stores and serves images and offers blob garbage-collection, but no scanning or tag controls. Whichever you run, your ECR repositories map one-to-one to the registry's repositories, and a workload pulls with an injected `imagePullSecret`; Harbor's robot accounts provide the richer, scoped path.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjE2IiB2aWV3Qm94PSIwIDAgODM2IDIxNiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJJbi1jbHVzdGVyIHJlZ2lzdHJ5IG1vZGVsIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojMzM0MTU1fTwvc3R5bGU+Cjx0ZXh0IHg9IjIwIiB5PSIyNiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6IzA0Nzg1NyI+SW4tY2x1c3RlciByZWdpc3RyeSBtb2RlbDwvdGV4dD4KPHJlY3QgeD0iMjAiIHk9IjQ0IiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjY2IiByeD0iMTAiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iI2E3ZjNkMCIgc3Ryb2tlLXdpZHRoPSIxLjQiLz48dGV4dCB4PSIzNiIgeT0iNzEiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTJweCI+U2VsZi1tYW5hZ2VkPC90ZXh0Pjx0ZXh0IHg9IjM2IiB5PSI5MSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPnlvdSBvcGVyYXRlIHRoZSByZWdpc3RyeTwvdGV4dD48cmVjdCB4PSIyOTYiIHk9IjQ0IiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjY2IiByeD0iMTAiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iI2E3ZjNkMCIgc3Ryb2tlLXdpZHRoPSIxLjQiLz48dGV4dCB4PSIzMTIiIHk9IjcxIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjEycHgiPkRlcGxveWVkIGVtcHR5PC90ZXh0Pjx0ZXh0IHg9IjMxMiIgeT0iOTEiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5pbWFnZXMgbG9hZGVkIHZpYSB0aGUgYXBwbGlhbmNlPC90ZXh0PjxyZWN0IHg9IjU3MiIgeT0iNDQiIHdpZHRoPSIyNTYiIGhlaWdodD0iNjYiIHJ4PSIxMCIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjYTdmM2QwIiBzdHJva2Utd2lkdGg9IjEuNCIvPjx0ZXh0IHg9IjU4OCIgeT0iNzEiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTJweCI+SGFyYm9yIMK3IHJlY29tbWVuZGVkPC90ZXh0Pjx0ZXh0IHg9IjU4OCIgeT0iOTEiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5Ucml2eSBzY2FuIMK3IHJvYm90IGFjY291bnRzPC90ZXh0PjxyZWN0IHg9IjIwIiB5PSIxMjgiIHdpZHRoPSIyNTYiIGhlaWdodD0iNjYiIHJ4PSIxMCIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjYTdmM2QwIiBzdHJva2Utd2lkdGg9IjEuNCIvPjx0ZXh0IHg9IjM2IiB5PSIxNTUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTJweCI+Wm90PC90ZXh0Pjx0ZXh0IHg9IjM2IiB5PSIxNzUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5saWdodHdlaWdodCwgT0NJLW5hdGl2ZTwvdGV4dD48cmVjdCB4PSIyOTYiIHk9IjEyOCIgd2lkdGg9IjI1NiIgaGVpZ2h0PSI2NiIgcng9IjEwIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiNhN2YzZDAiIHN0cm9rZS13aWR0aD0iMS40Ii8+PHRleHQgeD0iMzEyIiB5PSIxNTUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTJweCI+RGlzdHJpYnV0aW9uPC90ZXh0Pjx0ZXh0IHg9IjMxMiIgeT0iMTc1IiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+YmFyZSByZWZlcmVuY2UsIGJsb2IgR0Mgb25seTwvdGV4dD48cmVjdCB4PSI1NzIiIHk9IjEyOCIgd2lkdGg9IjI1NiIgaGVpZ2h0PSI2NiIgcng9IjEwIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiNhN2YzZDAiIHN0cm9rZS13aWR0aD0iMS40Ii8+PHRleHQgeD0iNTg4IiB5PSIxNTUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTJweCI+UHVsbCBpZGVudGl0eTwvdGV4dD48dGV4dCB4PSI1ODgiIHk9IjE3NSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPmltYWdlUHVsbFNlY3JldCAvIHJvYm90IGFjY291bnRzPC90ZXh0Pgo8L3N2Zz4=" alt="In-cluster registry model" />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjE2IiB2aWV3Qm94PSIwIDAgODM2IDIxNiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJJbi1jbHVzdGVyIHJlZ2lzdHJ5IG1vZGVsIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojY2JkNWUxfTwvc3R5bGU+Cjx0ZXh0IHg9IjIwIiB5PSIyNiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6ICM5MGRlYzgiPkluLWNsdXN0ZXIgcmVnaXN0cnkgbW9kZWw8L3RleHQ+CjxyZWN0IHg9IjIwIiB5PSI0NCIgd2lkdGg9IjI1NiIgaGVpZ2h0PSI2NiIgcng9IjEwIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMzZDY2NTMiIHN0cm9rZS13aWR0aD0iMS40Ii8+PHRleHQgeD0iMzYiIHk9IjcxIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjEycHgiPlNlbGYtbWFuYWdlZDwvdGV4dD48dGV4dCB4PSIzNiIgeT0iOTEiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij55b3Ugb3BlcmF0ZSB0aGUgcmVnaXN0cnk8L3RleHQ+PHJlY3QgeD0iMjk2IiB5PSI0NCIgd2lkdGg9IjI1NiIgaGVpZ2h0PSI2NiIgcng9IjEwIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMzZDY2NTMiIHN0cm9rZS13aWR0aD0iMS40Ii8+PHRleHQgeD0iMzEyIiB5PSI3MSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtc2l6ZToxMnB4Ij5EZXBsb3llZCBlbXB0eTwvdGV4dD48dGV4dCB4PSIzMTIiIHk9IjkxIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+aW1hZ2VzIGxvYWRlZCB2aWEgdGhlIGFwcGxpYW5jZTwvdGV4dD48cmVjdCB4PSI1NzIiIHk9IjQ0IiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjY2IiByeD0iMTAiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzNkNjY1MyIgc3Ryb2tlLXdpZHRoPSIxLjQiLz48dGV4dCB4PSI1ODgiIHk9IjcxIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjEycHgiPkhhcmJvciDCtyByZWNvbW1lbmRlZDwvdGV4dD48dGV4dCB4PSI1ODgiIHk9IjkxIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+VHJpdnkgc2NhbiDCtyByb2JvdCBhY2NvdW50czwvdGV4dD48cmVjdCB4PSIyMCIgeT0iMTI4IiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjY2IiByeD0iMTAiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzNkNjY1MyIgc3Ryb2tlLXdpZHRoPSIxLjQiLz48dGV4dCB4PSIzNiIgeT0iMTU1IiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjEycHgiPlpvdDwvdGV4dD48dGV4dCB4PSIzNiIgeT0iMTc1IiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+bGlnaHR3ZWlnaHQsIE9DSS1uYXRpdmU8L3RleHQ+PHJlY3QgeD0iMjk2IiB5PSIxMjgiIHdpZHRoPSIyNTYiIGhlaWdodD0iNjYiIHJ4PSIxMCIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjM2Q2NjUzIiBzdHJva2Utd2lkdGg9IjEuNCIvPjx0ZXh0IHg9IjMxMiIgeT0iMTU1IiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjEycHgiPkRpc3RyaWJ1dGlvbjwvdGV4dD48dGV4dCB4PSIzMTIiIHk9IjE3NSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPmJhcmUgcmVmZXJlbmNlLCBibG9iIEdDIG9ubHk8L3RleHQ+PHJlY3QgeD0iNTcyIiB5PSIxMjgiIHdpZHRoPSIyNTYiIGhlaWdodD0iNjYiIHJ4PSIxMCIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjM2Q2NjUzIiBzdHJva2Utd2lkdGg9IjEuNCIvPjx0ZXh0IHg9IjU4OCIgeT0iMTU1IiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjEycHgiPlB1bGwgaWRlbnRpdHk8L3RleHQ+PHRleHQgeD0iNTg4IiB5PSIxNzUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5pbWFnZVB1bGxTZWNyZXQgLyByb2JvdCBhY2NvdW50czwvdGV4dD4KPC9zdmc+" alt="In-cluster registry model" />
</div>

<p className="t9-caption">Choose the registry features your application needs: Harbor, Zot, or Distribution.</p>

#### Limitations

△ Where ECR and an in-cluster registry stay different

* **The registry starts empty.** Your images are loaded through the appliance before any workload pulls; there is deliberately no pull-through cache back to ECR.
* **Scanning, immutability, and retention depend on which registry you run.** Harbor supports most ECR management features; Zot covers it partially; Distribution is a bare registry with none of it built in.
* **There is no managed cross-region replica.** An in-cluster registry serves the cluster it runs in; images are seeded through the appliance rather than replicated across regions.

#### Other considerations

Plan image delivery, credentials, and storage costs for the target registry.

* **Images are seeded through the appliance, then served locally:** the registry is deployed empty and your images are loaded through the appliance before any workload pulls, with no pull-through cache back to ECR, so the running cluster has no outbound AWS dependency.
* **You operate the registry:** there is no cloud control plane; Harbor, Zot, or Distribution is yours to run, and its availability, upgrades, and access model are your responsibility.
* **Back up the registry's persistent volume:** the registry's blobs live on a PersistentVolume in the cluster, so backup and retention of the image store are yours, not a managed registry's.
* **Budget for cluster compute and storage:** the registry consumes the cluster's own compute and storage rather than a managed per-tier or per-byte charge, and the feature depth (scanning, immutability, retention) follows which registry you chose.

### Via Harbor Registry

| Operation                | Area         | Support      | Depth        | Notes                                                                                                                                              |
| ------------------------ | ------------ | ------------ | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| Registry authentication  | Auth         | Supported    | Common       | in-cluster imagePullSecret; Harbor also supports robot accounts                                                                                    |
| Reference rewrite        | Image path   | Supported    | Common       | every consumer's ECR image ref is rewritten to the in-cluster host; the imagePullSecret is injected and the ECR auth helper dropped                |
| docker push / pull       | Image path   | Supported    | Common       | byte-identical OCI Distribution v2; the host changes to registry.\<ns>.svc                                                                         |
| Lifecycle policy mapping | Lifecycle    | Partial      | Most usage   | Harbor tag-retention is per-repository, the closest in-cluster analog to ECR lifecycle rules                                                       |
| Image load (bootstrap)   | Migration    | Supported    | Common       | The appliance loads images before workloads pull them. Images are identified by content, so repeating the load does not duplicate them.            |
| Cross-region replication | Replication  | Out of scope | Full surface | an in-cluster registry has no cross-region replica; the pull-through cache to ECR is deliberately not used, so there is no outbound AWS dependency |
| Repository provisioning  | Repositories | Supported    | Common       | the registry is deployed in-cluster and the ECR repository set becomes its repositories/namespaces (N to N)                                        |
| Scan-on-push findings    | Scanning     | Partial      | Most usage   | Harbor ships a built-in Trivy integration (scan-on-push)                                                                                           |

#### How it works

On AWS your build pushes container images to **Amazon ECR** and your workloads pull from it. When the target is your own **Kubernetes cluster**, the registry runs inside the cluster: an open-source registry you operate, with no cloud registry service behind it. Harbor is the recommended registry; Zot is a smaller alternative; Distribution provides basic image storage and delivery. At the build, Tensor9 provisions the registry, loads your images into it through the appliance, and rewrites every image reference to the in-cluster host; afterward your workloads pull directly from it.

The image itself never changes. ECR and the in-cluster registry both speak the **OCI Distribution v2** protocol, so your image manifest, its layer blobs, and their content digests are byte-identical; docker and containerd are untouched. The one thing rewritten at the build is the registry address: your ECR host becomes `registry.<ns>.svc`. You operate the registry and configure its policies.

This mapping provisions a target registry and updates image references. Docker and containerd use the target's registry protocol and credentials. It does not provide the AWS ECR management or authorization-token API. Applications that call ECR directly, including `GetAuthorizationToken`, need a separate integration.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTg0IiB2aWV3Qm94PSIwIDAgODM2IDE4NCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB5b3VyIGJ1aWxkIHB1c2hlcyBpbWFnZXMgdG8gQW1hem9uIEVDUiBhbmQgeW91ciB3b3JrbG9hZHMgcHVsbCBmcm9tIGl0LiBBZnRlcjogb24gdGhlIHRhcmdldCBjbG91ZCB0aGUgc2FtZSBkb2NrZXIgcHVzaCBhbmQgcHVsbCByZWFjaCBpbi1jbHVzdGVyIHJlZ2lzdHJ5LCBwcm92aXNpb25lZCBhdCB0aGUgYnVpbGQuIE9ubHkgdGhlIHJlZ2lzdHJ5IGFkZHJlc3MgaXMgcmV3cml0dGVuOyB0aGUgaW1hZ2UgaXMgdW5jaGFuZ2VkIGFuZCBUZW5zb3I5IGlzIG5vdCBpbiB0aGUgcHVsbCBwYXRoLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6IzMzNDE1NX08L3N0eWxlPgo8ZGVmcz48bWFya2VyIGlkPSJlY3Jody1pbmNsdXN0ZXIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzk0YTNiOCIvPjwvbWFya2VyPjwvZGVmcz4KPHJlY3QgeD0iMTYiIHk9IjQwIiB3aWR0aD0iMzU4IiBoZWlnaHQ9IjEyMCIgcng9IjE0IiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iMzAiIHk9IjYwIiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDojOTRhM2I4Ij5PTiBBV1MgVE9EQVk8L3RleHQ+CjxyZWN0IHg9IjMwIiB5PSI3OCIgd2lkdGg9IjExOCIgaGVpZ2h0PSI2MCIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9Ijg5IiB5PSIxMDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTJweCI+YnVpbGQgLyBwb2RzPC90ZXh0Pgo8dGV4dCB4PSI4OSIgeT0iMTIyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+ZG9ja2VyIHB1c2ggLyBwdWxsPC90ZXh0Pgo8bGluZSB4MT0iMTQ4IiB5MT0iMTA4IiB4Mj0iMjA2IiB5Mj0iMTA4IiBzdHJva2U9IiM5NGEzYjgiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNlY3Jody1pbmNsdXN0ZXIpIi8+CjxyZWN0IHg9IjIxMCIgeT0iNzgiIHdpZHRoPSIxNTAiIGhlaWdodD0iNjAiIHJ4PSIxMSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyODUiIHk9IjEwNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMnB4Ij5BbWF6b24gRUNSPC90ZXh0Pgo8dGV4dCB4PSIyODUiIHk9IjEyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPkFXUy1tYW5hZ2VkPC90ZXh0Pgo8dGV4dCB4PSI0MTgiIHk9IjMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXdlaWdodDo3MDAiPmNvbXBpbGVkIGF0IHRoZSBidWlsZDwvdGV4dD4KPHJlY3QgeD0iNDYyIiB5PSI0MCIgd2lkdGg9IjM2MiIgaGVpZ2h0PSIxMjAiIHJ4PSIxNCIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjQ3NiIgeT0iNjAiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiMwNDc4NTciPklOIEtVQkVSTkVURVMgQ0xVU1RFUjwvdGV4dD4KPHJlY3QgeD0iNDc2IiB5PSI3OCIgd2lkdGg9IjEwNCIgaGVpZ2h0PSI2MCIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjUyOCIgeT0iMTA0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEycHgiPmJ1aWxkIC8gcG9kczwvdGV4dD4KPHRleHQgeD0iNTI4IiB5PSIxMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2MDAgMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA1OTY2OSI+c2FtZSBjb21tYW5kczwvdGV4dD4KPGxpbmUgeDE9IjU4MCIgeTE9IjEwOCIgeDI9IjYxNiIgeTI9IjEwOCIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZWNyaHctaW5jbHVzdGVyKSIvPgo8cmVjdCB4PSI2MjAiIHk9Ijc0IiB3aWR0aD0iMTg4IiBoZWlnaHQ9IjY4IiByeD0iMTEiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjciLz4KPHRleHQgeD0iNzE0IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtc2l6ZToxMS41cHgiPmluLWNsdXN0ZXIgcmVnaXN0cnk8L3RleHQ+Cjx0ZXh0IHg9IjcxNCIgeT0iMTE1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzY0NzQ4YiI+cmVnaXN0cnkuJmx0O25zJmd0Oy5zdmM8L3RleHQ+Cjx0ZXh0IHg9IjcxNCIgeT0iMTMxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij55b3Ugb3BlcmF0ZSBpdCwgaW4tY2x1c3RlcjwvdGV4dD4KPHRleHQgeD0iNjQzIiB5PSIxNzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtd2VpZ2h0OjcwMCI+VGVuc29yOSBpcyBub3QgaW4gdGhlIHB1bGwgcGF0aDwvdGV4dD4KPC9zdmc+" alt="Before: on AWS your build pushes images to Amazon ECR and your workloads pull from it. After: on the target cloud the same docker push and pull reach in-cluster registry, provisioned at the build. Only the registry address is rewritten; the image is unchanged and Tensor9 is not in the pull path." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTg0IiB2aWV3Qm94PSIwIDAgODM2IDE4NCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB5b3VyIGJ1aWxkIHB1c2hlcyBpbWFnZXMgdG8gQW1hem9uIEVDUiBhbmQgeW91ciB3b3JrbG9hZHMgcHVsbCBmcm9tIGl0LiBBZnRlcjogb24gdGhlIHRhcmdldCBjbG91ZCB0aGUgc2FtZSBkb2NrZXIgcHVzaCBhbmQgcHVsbCByZWFjaCBpbi1jbHVzdGVyIHJlZ2lzdHJ5LCBwcm92aXNpb25lZCBhdCB0aGUgYnVpbGQuIE9ubHkgdGhlIHJlZ2lzdHJ5IGFkZHJlc3MgaXMgcmV3cml0dGVuOyB0aGUgaW1hZ2UgaXMgdW5jaGFuZ2VkIGFuZCBUZW5zb3I5IGlzIG5vdCBpbiB0aGUgcHVsbCBwYXRoLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6I2NiZDVlMX08L3N0eWxlPgo8ZGVmcz48bWFya2VyIGlkPSJlY3Jody1pbmNsdXN0ZXIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzk0YTNiOCIvPjwvbWFya2VyPjwvZGVmcz4KPHJlY3QgeD0iMTYiIHk9IjQwIiB3aWR0aD0iMzU4IiBoZWlnaHQ9IjEyMCIgcng9IjE0IiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iMzAiIHk9IjYwIiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDogIzk0YTNiOCI+T04gQVdTIFRPREFZPC90ZXh0Pgo8cmVjdCB4PSIzMCIgeT0iNzgiIHdpZHRoPSIxMTgiIGhlaWdodD0iNjAiIHJ4PSIxMSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI4OSIgeT0iMTA0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjEycHgiPmJ1aWxkIC8gcG9kczwvdGV4dD4KPHRleHQgeD0iODkiIHk9IjEyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPmRvY2tlciBwdXNoIC8gcHVsbDwvdGV4dD4KPGxpbmUgeDE9IjE0OCIgeTE9IjEwOCIgeDI9IjIwNiIgeTI9IjEwOCIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZWNyaHctaW5jbHVzdGVyKSIvPgo8cmVjdCB4PSIyMTAiIHk9Ijc4IiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjYwIiByeD0iMTEiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjg1IiB5PSIxMDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTJweCI+QW1hem9uIEVDUjwvdGV4dD4KPHRleHQgeD0iMjg1IiB5PSIxMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5BV1MtbWFuYWdlZDwvdGV4dD4KPHRleHQgeD0iNDE4IiB5PSIzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC13ZWlnaHQ6NzAwIj5jb21waWxlZCBhdCB0aGUgYnVpbGQ8L3RleHQ+CjxyZWN0IHg9IjQ2MiIgeT0iNDAiIHdpZHRoPSIzNjIiIGhlaWdodD0iMTIwIiByeD0iMTQiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSI0NzYiIHk9IjYwIiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDogIzkwZGVjOCI+SU4gS1VCRVJORVRFUyBDTFVTVEVSPC90ZXh0Pgo8cmVjdCB4PSI0NzYiIHk9Ijc4IiB3aWR0aD0iMTA0IiBoZWlnaHQ9IjYwIiByeD0iMTEiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNTI4IiB5PSIxMDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTJweCI+YnVpbGQgLyBwb2RzPC90ZXh0Pgo8dGV4dCB4PSI1MjgiIHk9IjEyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM2Ij5zYW1lIGNvbW1hbmRzPC90ZXh0Pgo8bGluZSB4MT0iNTgwIiB5MT0iMTA4IiB4Mj0iNjE2IiB5Mj0iMTA4IiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNlY3Jody1pbmNsdXN0ZXIpIi8+CjxyZWN0IHg9IjYyMCIgeT0iNzQiIHdpZHRoPSIxODgiIGhlaWdodD0iNjgiIHJ4PSIxMSIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNyIvPgo8dGV4dCB4PSI3MTQiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjExLjVweCI+aW4tY2x1c3RlciByZWdpc3RyeTwvdGV4dD4KPHRleHQgeD0iNzE0IiB5PSIxMTUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4Ij5yZWdpc3RyeS4mbHQ7bnMmZ3Q7LnN2YzwvdGV4dD4KPHRleHQgeD0iNzE0IiB5PSIxMzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzgiPnlvdSBvcGVyYXRlIGl0LCBpbi1jbHVzdGVyPC90ZXh0Pgo8dGV4dCB4PSI2NDMiIHk9IjE3NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC13ZWlnaHQ6NzAwIj5UZW5zb3I5IGlzIG5vdCBpbiB0aGUgcHVsbCBwYXRoPC90ZXh0Pgo8L3N2Zz4=" alt="Before: on AWS your build pushes images to Amazon ECR and your workloads pull from it. After: on the target cloud the same docker push and pull reach in-cluster registry, provisioned at the build. Only the registry address is rewritten; the image is unchanged and Tensor9 is not in the pull path." />
</div>

<p className="t9-caption">Your images are loaded into an in-cluster registry through the appliance at the build; afterward your workloads pull from it directly and the image is unchanged.</p>

#### Registry features and operation

The customer operates the registry and configures the features provided by the selected software. The registry is deployed empty : your images are loaded into it through the appliance's image delivery service before any workload pulls, and there is deliberately **no pull-through cache** back to ECR, which removes the outbound AWS dependency entirely.

**Harbor**, the recommended registry, ships built-in Trivy scan-on-push, robot accounts, per-repository retention, and immutable-tag rules, the closest match to ECR's registry-management features. **Zot** is lightweight and OCI-native, with vulnerability (CVE) search available through an optional extension. **Distribution** is the bare reference registry: it stores and serves images and offers blob garbage-collection, but no scanning or tag controls. Whichever you run, your ECR repositories map one-to-one to the registry's repositories, and a workload pulls with an injected `imagePullSecret`; Harbor's robot accounts provide the richer, scoped path.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjE2IiB2aWV3Qm94PSIwIDAgODM2IDIxNiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJJbi1jbHVzdGVyIHJlZ2lzdHJ5IG1vZGVsIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojMzM0MTU1fTwvc3R5bGU+Cjx0ZXh0IHg9IjIwIiB5PSIyNiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6IzA0Nzg1NyI+SW4tY2x1c3RlciByZWdpc3RyeSBtb2RlbDwvdGV4dD4KPHJlY3QgeD0iMjAiIHk9IjQ0IiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjY2IiByeD0iMTAiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iI2E3ZjNkMCIgc3Ryb2tlLXdpZHRoPSIxLjQiLz48dGV4dCB4PSIzNiIgeT0iNzEiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTJweCI+U2VsZi1tYW5hZ2VkPC90ZXh0Pjx0ZXh0IHg9IjM2IiB5PSI5MSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPnlvdSBvcGVyYXRlIHRoZSByZWdpc3RyeTwvdGV4dD48cmVjdCB4PSIyOTYiIHk9IjQ0IiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjY2IiByeD0iMTAiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iI2E3ZjNkMCIgc3Ryb2tlLXdpZHRoPSIxLjQiLz48dGV4dCB4PSIzMTIiIHk9IjcxIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjEycHgiPkRlcGxveWVkIGVtcHR5PC90ZXh0Pjx0ZXh0IHg9IjMxMiIgeT0iOTEiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5pbWFnZXMgbG9hZGVkIHZpYSB0aGUgYXBwbGlhbmNlPC90ZXh0PjxyZWN0IHg9IjU3MiIgeT0iNDQiIHdpZHRoPSIyNTYiIGhlaWdodD0iNjYiIHJ4PSIxMCIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjYTdmM2QwIiBzdHJva2Utd2lkdGg9IjEuNCIvPjx0ZXh0IHg9IjU4OCIgeT0iNzEiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTJweCI+SGFyYm9yIMK3IHJlY29tbWVuZGVkPC90ZXh0Pjx0ZXh0IHg9IjU4OCIgeT0iOTEiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5Ucml2eSBzY2FuIMK3IHJvYm90IGFjY291bnRzPC90ZXh0PjxyZWN0IHg9IjIwIiB5PSIxMjgiIHdpZHRoPSIyNTYiIGhlaWdodD0iNjYiIHJ4PSIxMCIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjYTdmM2QwIiBzdHJva2Utd2lkdGg9IjEuNCIvPjx0ZXh0IHg9IjM2IiB5PSIxNTUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTJweCI+Wm90PC90ZXh0Pjx0ZXh0IHg9IjM2IiB5PSIxNzUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5saWdodHdlaWdodCwgT0NJLW5hdGl2ZTwvdGV4dD48cmVjdCB4PSIyOTYiIHk9IjEyOCIgd2lkdGg9IjI1NiIgaGVpZ2h0PSI2NiIgcng9IjEwIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiNhN2YzZDAiIHN0cm9rZS13aWR0aD0iMS40Ii8+PHRleHQgeD0iMzEyIiB5PSIxNTUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTJweCI+RGlzdHJpYnV0aW9uPC90ZXh0Pjx0ZXh0IHg9IjMxMiIgeT0iMTc1IiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+YmFyZSByZWZlcmVuY2UsIGJsb2IgR0Mgb25seTwvdGV4dD48cmVjdCB4PSI1NzIiIHk9IjEyOCIgd2lkdGg9IjI1NiIgaGVpZ2h0PSI2NiIgcng9IjEwIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiNhN2YzZDAiIHN0cm9rZS13aWR0aD0iMS40Ii8+PHRleHQgeD0iNTg4IiB5PSIxNTUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTJweCI+UHVsbCBpZGVudGl0eTwvdGV4dD48dGV4dCB4PSI1ODgiIHk9IjE3NSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPmltYWdlUHVsbFNlY3JldCAvIHJvYm90IGFjY291bnRzPC90ZXh0Pgo8L3N2Zz4=" alt="In-cluster registry model" />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjE2IiB2aWV3Qm94PSIwIDAgODM2IDIxNiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJJbi1jbHVzdGVyIHJlZ2lzdHJ5IG1vZGVsIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojY2JkNWUxfTwvc3R5bGU+Cjx0ZXh0IHg9IjIwIiB5PSIyNiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6ICM5MGRlYzgiPkluLWNsdXN0ZXIgcmVnaXN0cnkgbW9kZWw8L3RleHQ+CjxyZWN0IHg9IjIwIiB5PSI0NCIgd2lkdGg9IjI1NiIgaGVpZ2h0PSI2NiIgcng9IjEwIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMzZDY2NTMiIHN0cm9rZS13aWR0aD0iMS40Ii8+PHRleHQgeD0iMzYiIHk9IjcxIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjEycHgiPlNlbGYtbWFuYWdlZDwvdGV4dD48dGV4dCB4PSIzNiIgeT0iOTEiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij55b3Ugb3BlcmF0ZSB0aGUgcmVnaXN0cnk8L3RleHQ+PHJlY3QgeD0iMjk2IiB5PSI0NCIgd2lkdGg9IjI1NiIgaGVpZ2h0PSI2NiIgcng9IjEwIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMzZDY2NTMiIHN0cm9rZS13aWR0aD0iMS40Ii8+PHRleHQgeD0iMzEyIiB5PSI3MSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtc2l6ZToxMnB4Ij5EZXBsb3llZCBlbXB0eTwvdGV4dD48dGV4dCB4PSIzMTIiIHk9IjkxIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+aW1hZ2VzIGxvYWRlZCB2aWEgdGhlIGFwcGxpYW5jZTwvdGV4dD48cmVjdCB4PSI1NzIiIHk9IjQ0IiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjY2IiByeD0iMTAiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzNkNjY1MyIgc3Ryb2tlLXdpZHRoPSIxLjQiLz48dGV4dCB4PSI1ODgiIHk9IjcxIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjEycHgiPkhhcmJvciDCtyByZWNvbW1lbmRlZDwvdGV4dD48dGV4dCB4PSI1ODgiIHk9IjkxIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+VHJpdnkgc2NhbiDCtyByb2JvdCBhY2NvdW50czwvdGV4dD48cmVjdCB4PSIyMCIgeT0iMTI4IiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjY2IiByeD0iMTAiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzNkNjY1MyIgc3Ryb2tlLXdpZHRoPSIxLjQiLz48dGV4dCB4PSIzNiIgeT0iMTU1IiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjEycHgiPlpvdDwvdGV4dD48dGV4dCB4PSIzNiIgeT0iMTc1IiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+bGlnaHR3ZWlnaHQsIE9DSS1uYXRpdmU8L3RleHQ+PHJlY3QgeD0iMjk2IiB5PSIxMjgiIHdpZHRoPSIyNTYiIGhlaWdodD0iNjYiIHJ4PSIxMCIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjM2Q2NjUzIiBzdHJva2Utd2lkdGg9IjEuNCIvPjx0ZXh0IHg9IjMxMiIgeT0iMTU1IiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjEycHgiPkRpc3RyaWJ1dGlvbjwvdGV4dD48dGV4dCB4PSIzMTIiIHk9IjE3NSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPmJhcmUgcmVmZXJlbmNlLCBibG9iIEdDIG9ubHk8L3RleHQ+PHJlY3QgeD0iNTcyIiB5PSIxMjgiIHdpZHRoPSIyNTYiIGhlaWdodD0iNjYiIHJ4PSIxMCIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjM2Q2NjUzIiBzdHJva2Utd2lkdGg9IjEuNCIvPjx0ZXh0IHg9IjU4OCIgeT0iMTU1IiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjEycHgiPlB1bGwgaWRlbnRpdHk8L3RleHQ+PHRleHQgeD0iNTg4IiB5PSIxNzUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5pbWFnZVB1bGxTZWNyZXQgLyByb2JvdCBhY2NvdW50czwvdGV4dD4KPC9zdmc+" alt="In-cluster registry model" />
</div>

<p className="t9-caption">Choose the registry features your application needs: Harbor, Zot, or Distribution.</p>

#### Limitations

△ Where ECR and an in-cluster registry stay different

* **The registry starts empty.** Your images are loaded through the appliance before any workload pulls; there is deliberately no pull-through cache back to ECR.
* **Scanning, immutability, and retention depend on which registry you run.** Harbor supports most ECR management features; Zot covers it partially; Distribution is a bare registry with none of it built in.
* **There is no managed cross-region replica.** An in-cluster registry serves the cluster it runs in; images are seeded through the appliance rather than replicated across regions.

#### Other considerations

Plan image delivery, credentials, and storage costs for the target registry.

* **Images are seeded through the appliance, then served locally:** the registry is deployed empty and your images are loaded through the appliance before any workload pulls, with no pull-through cache back to ECR, so the running cluster has no outbound AWS dependency.
* **You operate the registry:** there is no cloud control plane; Harbor, Zot, or Distribution is yours to run, and its availability, upgrades, and access model are your responsibility.
* **Back up the registry's persistent volume:** the registry's blobs live on a PersistentVolume in the cluster, so backup and retention of the image store are yours, not a managed registry's.
* **Budget for cluster compute and storage:** the registry consumes the cluster's own compute and storage rather than a managed per-tier or per-byte charge, and the feature depth (scanning, immutability, retention) follows which registry you chose.

[Service Catalog](/service-adapters/catalog).
