Documentation

Policy settings

OCI enforces allow_resources, block_resources, protected_resources, and max_artifact_size_bytes. Hosted pushes also enforce max_accounted_bytes, max_resources, quota_audit, and the OCI-specific max_tags_per_repository. Configuration accepts max_resource_size_bytes, but OCI does not enforce that limit.

Policy resource values match the lowercase repository path as written. Allow and block lists match exact paths; protected resources may end in * to match a prefix. Access globs use * for any run of characters, including /.

KeyMeaning
allow_resourcesPermit serving or mirroring only for listed repositories
block_resourcesDeny listed repositories
protected_resourcesPrevent exact or prefix-matched repositories from falling back
max_artifact_size_bytesCap one blob or manifest
max_accounted_bytesDeduplicated bytes charged to one repository
max_resourcesDistinct repository identities
max_tags_per_repositoryTags retained for one repository
quota_auditRecord a would-reject quota decision and admit the push

A blob upload, cross-repository mount, or manifest push reserves capacity before it becomes discoverable. Enforcement returns 403 DENIED when a reservation would cross a limit. Each repository accounts for a digest once. Leaving every quota unset disables quota accounting.

See repository quotas for reservation and transaction semantics.

Push quotas

Blob uploads and cross-repository mounts reserve layer bytes. Manifest publication reserves the manifest document and, for a tagged push, one version. Accounting counts each digest once per repository, so a repeated push, a mount of a present blob, and concurrent uploads of one digest do not duplicate accounted bytes.

A denial returns distribution-spec code DENIED with 403 Forbidden and publishes no repository membership, manifest, or tag. Digest mismatch and storage failures release their reservation. Decisions increment the quota_admitted and quota_rejected metric families without repository or project labels.

On this page