For the complete documentation index, see llms.txt.

Built-in roles and capabilities reference

A resource documenting the capabilities and permissions of Chainguard's built-in IAM roles.
  15 min read

Chainguard provides customers with a set of built-in roles as part of its Identity and Access Management (IAM) system. These roles have different permissions and capabilities that allow them to serve specialized purposes, from general administrative access to access for specific resources like registries, APK packages, and programming language libraries.

This reference provides an overview of all Chainguard IAM capabilities and shows which built-in roles include each capability. Each capability represents a specific permission or action that can be performed within the Chainguard platform.

For more information on roles and role-bindings within Chainguard’s IAM model, please refer to our Overview of roles and role-bindings.

Built-in roles summary

This guide outlines the built-in Chainguard IAM roles available to most customer organizations. You can find more info about specific roles in your organization with the following chainctl command:

chainctl iam roles list

Every role grants actions on at least one Chainguard resource. Most actions are create, list, update, or delete, and a few resources use others, such as get, accept, or call. For example, the owner role can create, delete, list, and update custom roles within Chainguard, while the viewer role can only list them.

This guide outlines the following built-in roles provided by Chainguard:

  • Administrative Roles:
    • owner: Full administrative access with all capabilities
    • editor: viewer access plus creating, updating, and deleting container repositories, editing Custom Assembly overlays, drafting library build requests, and managing event subscriptions
    • viewer: Read-only access across all resources, can pull images, can run Guardener sessions, and can call tools on Chainguard MCP servers
    • limited_owner: Owner of a Starter organization, with viewer access plus pull tokens, library access, adding catalog images and Helm charts to the organization, invites limited to the organization’s email domain, removing members, billing, and turning on Chainguard Checks and Chainguard Workspaces
    • console_viewer: Read-only access across all resources and cannot pull images or APK packages, run Guardener sessions, call tools on Chainguard MCP servers, or view legal terms
  • Registry and Container Roles:
    • registry.pull: Container image access
    • registry.pull_token_creator: Chainguard registry token management with additional repository capabilities
    • registry.push: registry.pull access plus pushing images, and creating, updating, and deleting repositories and tags
    • registry.editor: registry.pull access plus creating, updating, and deleting repositories, and editing Custom Assembly overlays
    • apk.pull: Access to the organization’s APK packages, including the private APK repository
    • apk.push: apk.pull access plus uploading and deleting APK packages
  • Library Roles:
    • libraries.java.pull: Java library access
    • libraries.java.pull_token_creator: Java token management
    • libraries.java.push: libraries.java.pull access plus Java library uploads
    • libraries.python.pull: Python library access
    • libraries.python.pull_token_creator: Python library token management
    • libraries.python.push: libraries.python.pull access plus Python library uploads
    • libraries.javascript.pull: JavaScript library access
    • libraries.javascript.pull_token_creator: JavaScript library token management
    • libraries.javascript.push: libraries.javascript.pull access plus JavaScript library uploads
  • Guardener Roles:
    • guardener.user: Minimum role for running Guardener sessions, including Guardener conversion, terms lookup, and registry pull access
    • guardener.admin: Extends guardener.user with permission to accept the legal terms required before Guardener sessions can start
  • Checks and Workspaces Roles:
    • sandbox.user: Start, view, and cancel Chainguard Checks runs, and open Chainguard Workspaces sessions
    • sandbox.identity.user: Use shared identities in Chainguard Workspaces sessions
  • MCP Roles:
    • mcp.tool_user: Call tools on Chainguard MCP servers
  • Actions Roles:
    • actions.viewer: View the Chainguard Actions catalog

The administrative roles are useful for user profiles that require broad, but clearly defined capabilities. The registry, container, and library roles have limited permissions, allowing them to manage only one specific Chainguard resource. These specialized, resource-specific roles grant minimal required access.

For example, the apk.pull role grants list access for APK packages and groups, and get access to APK package content. This means identities with this role can pull the organization’s APK packages and retrieve information about the organization, but won’t have general access to the organization’s Chainguard registry resources.

Chainguard role capabilities

The following table maps Chainguard capabilities to the built-in roles that hold them. Each row covers one resource, such as repo or identity. The first column lists the full name of every capability on that resource, and the last column lists the actions each built-in role holds on it.

A capability’s name is its resource and its action, joined by a dot. For example, registry.entitlements.images.add is the add action on the registry.entitlements.images resource. Use these full names when you create a custom role that grants only the capabilities a task needs, as in Create a role for managing image entitlements.

CapabilitiesPurposeRoles with access to this resource
account_associations.create
account_associations.delete
account_associations.list
account_associations.update
Link cloud provider accounts to organization
  • owner (create, delete, list, update)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
actions.listView the Chainguard Actions catalog
  • owner (list)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
  • actions.viewer (list)
advisories.listView security advisories for the packages in Chainguard images
  • owner (list)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
apk.create
apk.delete
apk.list
Manage APK packages in the registry
  • owner (create, delete, list)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
  • registry.pull_token_creator (list)
  • apk.pull (list)
  • apk.push (create, delete, list)
  • sandbox.user (list)
apk.blobs.getDownload APK package binary content
  • owner (get)
  • editor (get)
  • viewer (get)
  • limited_owner (get)
  • registry.pull_token_creator (get)
  • apk.pull (get)
  • apk.push (get)
auth_policies.list
auth_policies.update
View and change the organization’s authentication policy, which sets how long a sign-in to the organization lasts
  • owner (list, update)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
billing.manageManage the organization’s billing and payment method
  • owner (manage)
  • limited_owner (manage)
build_report.listAccess detailed build and scan reports for images and packages
  • owner (list)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
entitlements.getView the organization’s plan and its product limits
  • owner (get)
  • editor (get)
  • viewer (get)
  • limited_owner (get)
  • console_viewer (get)
group_invites.create
group_invites.delete
group_invites.list
Send and manage invitations to join Chainguard organization
  • owner (create, delete, list)
  • editor (list)
  • viewer (list)
  • limited_owner (create, delete, list)
  • console_viewer (list)
groups.create
groups.delete
groups.list
groups.rename
groups.update
Manage organization and hierarchical structures
  • owner (create, delete, list, rename, update)
  • editor (list)
  • viewer (list)
  • limited_owner (list, rename)
  • console_viewer (list)
  • registry.pull (list)
  • registry.pull_token_creator (list)
  • registry.push (create, list)
  • registry.editor (list)
  • apk.pull (list)
  • apk.push (list)
  • libraries.java.pull_token_creator (list)
  • libraries.python.pull_token_creator (list)
  • libraries.javascript.pull_token_creator (list)
  • guardener.user (list)
  • guardener.admin (list)
  • sandbox.user (list)
guardener.actions.migrateHave Guardener migrate a repository’s GitHub Actions to Chainguard Actions by opening a pull request
  • owner (migrate)
  • editor (migrate)
  • viewer (migrate)
  • limited_owner (migrate)
  • guardener.user (migrate)
  • guardener.admin (migrate)
guardener.association.list
guardener.association.manage
View and manage the GitHub organizations connected through the Chainguard App
  • owner (list, manage)
  • editor (list)
  • viewer (list)
  • limited_owner (list, manage)
  • guardener.user (list)
  • guardener.admin (list, manage)
guardener.dfc.convertConvert Dockerfiles to use Chainguard images with Guardener
  • owner (convert)
  • editor (convert)
  • viewer (convert)
  • limited_owner (convert)
  • guardener.user (convert)
  • guardener.admin (convert)
guardener.entitlement.listView the organization’s Guardener settings, such as which repositories Guardener can access
  • owner (list)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
guardener.images.migrateRequest and view container image migrations for a repository
  • owner (migrate)
  • editor (migrate)
  • viewer (migrate)
  • limited_owner (migrate)
  • guardener.user (migrate)
  • guardener.admin (migrate)
guardener.scan.get
guardener.scan.list
View the dependency scans Guardener runs on connected repositories
  • owner (get, list)
  • editor (get, list)
  • viewer (get, list)
  • limited_owner (get, list)
  • console_viewer (get, list)
  • guardener.user (get, list)
  • guardener.admin (get, list)
identity.create
identity.delete
identity.list
identity.update
Create and manage user identities, service accounts, and pull tokens
  • owner (create, delete, list, update)
  • editor (list)
  • viewer (list)
  • limited_owner (create, list)
  • console_viewer (list)
  • registry.pull_token_creator (create)
  • libraries.java.pull_token_creator (create)
  • libraries.python.pull_token_creator (create)
  • libraries.javascript.pull_token_creator (create)
identity_providers.create
identity_providers.delete
identity_providers.list
identity_providers.update
Configure custom identity providers (OIDC, SAML) for authentication
  • owner (create, delete, list, update)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
identity_providers.scim.manageTurn on SCIM provisioning for a custom identity provider and manage its tokens
  • owner (manage)
identity_providers.scim.users.listView the users a custom identity provider provisioned through SCIM
  • owner (list)
libraries.artifacts.listView Chainguard Library artifact metadata and information
  • owner (list)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
libraries.aws_marketplace.subscriptions.create
libraries.aws_marketplace.subscriptions.list
libraries.aws_marketplace.subscriptions.update
Manage Chainguard Libraries subscriptions bought through AWS Marketplace
  • owner (create, list, update)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
libraries.cache.invalidate
libraries.cache.list
View and clear the organization’s Chainguard Libraries resolution cache
  • owner (invalidate, list)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
libraries.entitlements.create
libraries.entitlements.delete
libraries.entitlements.list
Manage access permissions for Chainguard Libraries
  • owner (create, delete, list)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
  • libraries.java.pull (list)
  • libraries.java.pull_token_creator (list)
  • libraries.java.push (list)
  • libraries.python.pull (list)
  • libraries.python.pull_token_creator (list)
  • libraries.python.push (list)
  • libraries.javascript.pull (list)
  • libraries.javascript.pull_token_creator (list)
  • libraries.javascript.push (list)
libraries.java.create
libraries.java.list
Access Chainguard Libraries for Java
  • owner (create, list)
  • limited_owner (list)
  • libraries.java.pull (list)
  • libraries.java.pull_token_creator (list)
  • libraries.java.push (create, list)
libraries.javascript.create
libraries.javascript.list
Access Chainguard Libraries for JavaScript
  • owner (create, list)
  • limited_owner (list)
  • libraries.javascript.pull (list)
  • libraries.javascript.pull_token_creator (list)
  • libraries.javascript.push (create, list)
libraries.policy.create
libraries.policy.delete
libraries.policy.list
libraries.policy.update
Create and manage the cooldown and malware policies applied to upstream library pulls
  • owner (create, delete, list, update)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
libraries.policy.binding.create
libraries.policy.binding.delete
libraries.policy.binding.list
libraries.policy.binding.update
Apply Chainguard Libraries policies to the organization
  • owner (create, delete, list, update)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
libraries.policy.block_event.listView the library pulls a policy blocked
  • owner (list)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
libraries.python.create
libraries.python.list
Access Chainguard Libraries for Python
  • owner (create, list)
  • limited_owner (list)
  • libraries.python.pull (list)
  • libraries.python.pull_token_creator (list)
  • libraries.python.push (create, list)
libraries.request_groups.create
libraries.request_groups.delete
libraries.request_groups.list
libraries.request_groups.submit
libraries.request_groups.update
Request library versions for Chainguard to build, and track those requests
  • owner (create, delete, list, submit, update)
  • editor (create, delete, list, update)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
libraries.request_groups.items.updateEdit the individual libraries in a draft build request
  • owner (update)
  • editor (update)
libraries.storage_usage.getView how much storage the organization’s uploaded libraries use in each ecosystem
  • owner (get)
manifest.create
manifest.delete
manifest.list
manifest.update
Access and manage container image manifests
  • owner (create, delete, list, update)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
  • registry.pull (list)
  • registry.pull_token_creator (list)
  • registry.push (create, delete, list, update)
  • registry.editor (list)
  • guardener.user (list)
  • guardener.admin (list)
manifest.metadata.listView container image manifest metadata and attestations
  • owner (list)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
  • registry.pull (list)
  • registry.pull_token_creator (list)
  • registry.push (list)
  • registry.editor (list)
  • guardener.user (list)
  • guardener.admin (list)
mcp.tool.callCall tools on Chainguard MCP servers
  • owner (call)
  • editor (call)
  • viewer (call)
  • limited_owner (call)
  • mcp.tool_user (call)
packages.entitlements.listView which tier of Chainguard OS Packages the organization is entitled to, base or FIPS
  • owner (list)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
policies.binding.create
policies.binding.delete
policies.binding.list
policies.binding.update
Turn image pull policies on for the organization
  • owner (create, delete, list, update)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
policies.decision.listView the allow and block decisions image pull policies made
  • owner (list)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
policies.override.create
policies.override.delete
policies.override.list
Exempt a specific image from policy enforcement
  • owner (create, delete, list)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
policies.policy.create
policies.policy.delete
policies.policy.list
policies.policy.update
View and manage image pull policies, such as blocking end-of-life images
  • owner (create, delete, list, update)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
record_signatures.listView cryptographic signature verification records
  • owner (list)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
  • registry.pull (list)
  • registry.pull_token_creator (list)
  • registry.push (list)
  • registry.editor (list)
  • guardener.user (list)
  • guardener.admin (list)
referrers.listView the signatures, attestations, and other artifacts attached to an image
  • owner (list)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
  • registry.pull (list)
  • registry.pull_token_creator (list)
  • registry.push (list)
  • registry.editor (list)
  • guardener.user (list)
  • guardener.admin (list)
registry.charts.addAdd a catalog Helm chart and the images it needs to the organization
  • owner (add)
  • limited_owner (add)
registry.deployments.listView the Helm charts associated with a container repository
  • owner (list)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
registry.entitlements.listView registry access entitlements and permissions
  • owner (list)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
registry.entitlements.images.add
registry.entitlements.images.remove
registry.entitlements.images.swap
Add, remove, and swap the images in the organization’s registry entitlement
  • owner (add, remove, swap)
  • limited_owner (add)
registry.overlays.edit
registry.overlays.list
View and edit Custom Assembly overlays
  • owner (edit, list)
  • editor (edit, list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
  • registry.editor (edit, list)
registry.settings.listView the organization’s registry settings, such as whether unique tags and the End-of-Life Grace Period are on by default
  • owner (list)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
repo.check_policies
repo.create
repo.delete
repo.list
repo.update
Create and manage container repositories (including Custom Assembly resources)
  • owner (check_policies, create, delete, list, update)
  • editor (create, delete, list, update)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
  • registry.pull (list)
  • registry.pull_token_creator (list)
  • registry.push (create, delete, list, update)
  • registry.editor (create, delete, list, update)
  • guardener.user (list)
  • guardener.admin (list)
repo.blobs.getDownload container image binary content
  • owner (get)
  • editor (get)
  • viewer (get)
  • limited_owner (get)
  • registry.pull (get)
  • registry.pull_token_creator (get)
  • registry.push (get)
  • registry.editor (get)
  • guardener.user (get)
  • guardener.admin (get)
role_bindings.create
role_bindings.delete
role_bindings.list
role_bindings.update
Assign roles to identities (users and service accounts)
  • owner (create, delete, list, update)
  • editor (list)
  • viewer (list)
  • limited_owner (create, delete, list)
  • console_viewer (list)
  • registry.pull_token_creator (create)
  • libraries.java.pull_token_creator (create)
  • libraries.python.pull_token_creator (create)
  • libraries.javascript.pull_token_creator (create)
roles.create
roles.delete
roles.list
roles.update
Create, modify, and manage custom Chainguard IAM roles
  • owner (create, delete, list, update)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
  • registry.pull_token_creator (list)
  • libraries.java.pull_token_creator (list)
  • libraries.python.pull_token_creator (list)
  • libraries.javascript.pull_token_creator (list)
sandbox.identity.admin
sandbox.identity.create
sandbox.identity.use
Create the Chainguard identity a Workspaces session acts through, and define and use shared session identities
  • owner (admin, create, use)
  • sandbox.user (create)
  • sandbox.identity.user (use)
sandbox.run.cancel
sandbox.run.create
sandbox.run.list
Start, view, and cancel Chainguard Checks runs
  • owner (cancel, create, list)
  • limited_owner (cancel, create, list)
  • sandbox.user (cancel, create, list)
sandbox.session.create
sandbox.session.list
Open Chainguard Workspaces sessions, and list every user’s sessions in the organization
  • owner (create, list)
  • limited_owner (create)
  • sandbox.user (create)
sboms.listAccess Software Bill of Materials for packages and images
  • owner (list)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
  • registry.pull (list)
  • registry.pull_token_creator (list)
  • registry.push (list)
  • registry.editor (list)
  • guardener.user (list)
  • guardener.admin (list)
skills.list
skills.publish
View the Chainguard Agent Skills catalog and publish skills
  • owner (list, publish)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
skills.entitlements.create
skills.entitlements.delete
skills.entitlements.list
Manage which Chainguard Agent Skills the organization can access
  • owner (create, delete, list)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
skills.harden.cancel
skills.harden.read
skills.harden.write
Submit, track, and cancel skill hardening jobs
  • owner (cancel, read, write)
subscriptions.create
subscriptions.delete
subscriptions.list
subscriptions.update
Manage CloudEvent subscriptions for notifications and automation
  • owner (create, delete, list, update)
  • editor (create, delete, list, update)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
tag.create
tag.delete
tag.list
tag.update
Manage Chainguard container image tags
  • owner (create, delete, list, update)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
  • registry.pull (list)
  • registry.pull_token_creator (list)
  • registry.push (create, delete, list, update)
  • registry.editor (list)
  • guardener.user (list)
  • guardener.admin (list)
telemetry.containers.listView the container images that connected repositories use, as Guardener observes them
  • owner (list)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
  • guardener.user (list)
  • guardener.admin (list)
terms.accept
terms.list
View and accept the legal terms a Chainguard product requires before you can use it
  • owner (accept, list)
  • editor (list)
  • viewer (list)
  • limited_owner (accept, list)
  • guardener.user (list)
  • guardener.admin (accept, list)
version.listView version information across all resources and assets
  • owner (list)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
vuln.createCreate vulnerability reports and assessments
  • owner (create)
vuln_report.create
vuln_report.list
Manage detailed vulnerability assessments for specific resources
  • owner (create, list)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
vuln_reports.listView high-level vulnerability report summaries
  • owner (list)
  • editor (list)
  • viewer (list)
  • limited_owner (list)
  • console_viewer (list)
  • registry.pull (list)
  • registry.pull_token_creator (list)
  • registry.push (list)
  • registry.editor (list)
  • guardener.user (list)
  • guardener.admin (list)

Role capabilities comparison

The following table compares the general abilities of the built-in roles described in the previous summary:

RolePull ImagesList Tags/ReposView SBOMs/DiffsCreate IAM ResourcesCreate Pull TokensLibraries Access
owner✅✅✅✅✅✅
editor✅✅✅✕✕✕
viewer✅✅✅✕✕✕
limited_owner✅✅✅✅✅✅
console_viewer✕✅✅✕✕✕
registry.pull✅✅✅✕✕✕
registry.pull_token_creator✅✅✅✅✅✕
registry.push✅✅✅✕✕✕
registry.editor✅✅✅✕✕✕
apk.pull✕✕✕✕✕✕
apk.push✕✕✕✕✕✕
libraries.java.pull✕✕✕✕✕✅
libraries.java.pull_token_creator✕✕✕✅✅✅
libraries.java.push✕✕✕✕✕✅
libraries.python.pull✕✕✕✕✕✅
libraries.python.pull_token_creator✕✕✕✅✅✅
libraries.python.push✕✕✕✕✕✅
libraries.javascript.pull✕✕✕✕✕✅
libraries.javascript.pull_token_creator✕✕✕✅✅✅
libraries.javascript.push✕✕✕✕✕✅
guardener.user✅✅✅✕✕✕
guardener.admin✅✅✅✕✕✕
sandbox.user✕✕✕✕✕✕
sandbox.identity.user✕✕✕✕✕✕
mcp.tool_user✕✕✕✕✕✕
actions.viewer✕✕✕✕✕✕

Notes

  • Pull Images/List Tags/Repos/View SBOMs: These capabilities refer to container registry operations relating to the manifest, repo, tag, and sboms resources
  • APK Pull: The apk.pull role is specialized for APK package management, not container operations
  • Console Viewer: Has the same broad list access as viewer, but can’t pull blobs (apk.blobs, repo.blobs), view legal terms (terms), run Guardener conversions or migrations (guardener.dfc, guardener.actions, guardener.images), call tools on Chainguard MCP servers (mcp.tool), or list the GitHub organizations connected through the Chainguard App (guardener.association). This makes it a safe role for inviting team members who need Console visibility without the ability to pull images or APKs.

Pull token creator roles

The following roles are used for managing pull tokens for certain resources:

  • registry.pull_token_creator
  • libraries.java.pull_token_creator
  • libraries.python.pull_token_creator
  • libraries.javascript.pull_token_creator

For example, the libraries.*.pull_token_creator roles are focused on their respective library ecosystems and don’t have container registry access.

These roles are able to create pull tokens because of the identity.create capability. However, none of these roles have the identity.list capability, meaning that they aren’t able to view the pull tokens they’ve created.

The reason for this is that Chainguard doesn’t distinguish pull token identities from other assumable identities at the IAM level. If these roles also had the identity.list capability, they would be able to view all the identities in that scope. By not including identity.list among their capabilities, the pull token creator roles have a more limited scope, as intended.

Create a role for managing image entitlements

An organization’s registry entitlement lists the Chainguard Containers it can use. Of the built-in roles, only owner can add, remove, and swap the images in it, and limited_owner can add them. To let someone manage the entitlement without the rest of the owner role, create a custom role with only the capabilities the task needs.

Which capabilities you need depends on your organization’s plan:

  • Per-image plans: The entitlement holds each image individually, and the registry.entitlements.images capabilities control which images it holds.
  • Catalog Pricing: The entitlement already covers every image in your catalog, so you don’t change it. Adding an image to your organization creates a repository instead, which needs the repo capabilities described in Self-serve catalog experience.

On a per-image plan, the following command creates a role that can manage the entitlement with the chainctl images entitlements commands. Replace $ORGANIZATION with the name of your organization. Creating a custom role requires the owner role:

chainctl iam roles create entitlement-manager \
  --parent=$ORGANIZATION \
  --capabilities=groups.list,registry.entitlements.list,registry.entitlements.images.add,registry.entitlements.images.remove,registry.entitlements.images.swap

The role includes these capabilities:

  • groups.list: Lets the commands find your organization when you pass --parent.
  • registry.entitlements.list: Lets chainctl images entitlements list show the entitlement and the images it holds.
  • registry.entitlements.images.add, registry.entitlements.images.remove, and registry.entitlements.images.swap: Let add-image, remove-image, and swap-image change the images. Each image that remove-image or swap-image takes out counts against your organization’s 30-day swap quota.

To let the role add images but not remove or swap them, leave out registry.entitlements.images.remove and registry.entitlements.images.swap.

To give the role to a user, create a role-binding, as described in Managing role-bindings.

Learn more

Last updated: 2026-11-12 13:41