Azure 容器注册表(ACR)提供一组 内置角色,这些角色为 ACR 注册表提供基于 Microsoft Entra 的权限管理。 使用 Azure 基于角色的访问控制(RBAC),可以向用户、托管标识或服务主体分配内置角色,以授予该角色中定义的 Microsoft Entra 权限。 如果内置角色不满足要求,还可以定义和分配自定义 角色 ,其权限经过细粒度调整,以满足特定需求。
支持的角色分配标识类型
可以将 ACR 角色分配给以下标识类型,以向注册表授予权限:
- 单个用户标识
- Azure 资源的托管标识
- Azure DevOps - Azure Pipelines 标识
- Azure Kubernetes 服务 (AKS) 节点的 kubelet 标识 使 AKS 节点能够从 ACR 拉取映像。 ACR 支持 AKS 托管的 kubelet 标识和 AKS 预创建的 kubelet 标识 的角色分配,以便 AKS 节点从 ACR 拉取映像。
- Azure 容器应用 (ACA) 标识
- Azure 容器实例(ACI)身份识别
- Azure 机器学习 (AML) 工作区标识
- AML 附加的 Kubernetes 群集节点 kubelet 标识,允许 Kubernetes 群集的节点从 ACR 中拉取映像。
- AML 在线端点标识
- Azure 应用服务标识
- Azure Web 应用标识
- Azure Batch 标识
- Azure Functions 标识
- 服务主体
- AKS 群集服务主体 ,使 AKS 节点能够从 ACR 拉取映像。 ACR 还通过跨租户服务主体角色分配和身份验证支持跨租户 AKS 节点到 ACR 的身份验证。
- ACI 服务主体
- 使用服务主体在 Azure Stack Hub 上部署混合或本地 AKS 群集
请注意, ACR 连接的注册表(ACR 的本地注册表产品/服务与基于云的 ACR 不同)不支持 Azure 角色分配和基于 Entra 的权限管理。
进行角色分配以授予权限
请参阅 添加角色分配的步骤 以了解如何将角色分配给身份的信息。 可以使用以下方法分配角色:
- Azure 门户
- Azure CLI
- Azure PowerShell
若要执行角色分配,必须在注册表上具有 Owner
角色或 Role Based Access Control Administrator
角色。
将角色分配的范围限定为特定存储库
可以使用 Microsoft Entra 属性为基础的访问控制(ABAC)来管理基于 Microsoft Entra 的存储库权限。 此功能允许将角色分配的范围限定为注册表中的特定存储库。
有关 Microsoft Entra ABAC 存储库权限的概述,包括支持 Microsoft Entra ABAC 条件的 ACR 内置角色,请参阅 Microsoft Entra 存储库权限。 或者,可以查阅 Azure 容器注册表角色目录参考 ,获取支持 Microsoft Entra ABAC 条件的内置角色列表。
按场景推荐的内置角色
通过仅分配标识执行其预期功能所需的权限来应用最低特权原则。 这些常见场景各自具有推荐的内置角色。
注释
适用的内置角色和角色行为取决于注册表的“角色分配权限模式”。 这在 Azure 门户的“属性”边栏选项卡中可见:
- RBAC 注册表 + ABAC 存储库权限:支持使用可选Microsoft Entra ABAC 条件的标准 RBAC 角色分配,以将分配范围限定到特定存储库。
- RBAC 注册表权限:仅支持标准的 RBAC 配置,不包括 ABAC 条件。
有关 Microsoft Entra ABAC 和启用 ABAC 的角色的详细信息,请参阅基于 Microsoft Entra 的存储库权限。
场景:标识需要拉取映像并对开发人员、管道和容器业务流程协调程序(例如 Azure Kubernetes 服务节点 kubelet 标识、Azure 容器应用、Azure 容器实例、Azure 机器学习工作区)之类的供应链工件进行验证
- 角色:
Container Registry Repository Reader
- 用途:授予数据平面只读访问权限,以拉取映像和项目,以及查看标记、存储库、开放容器计划 (OCI) 引荐者和项目流式处理配置。 不包括任何控制平面权限或写入权限。 不授予存储库目录列表权限 ,以列出注册表中的任何存储库。
- ABAC 支持:此角色支持可选的Microsoft Entra ABAC 条件,以将角色分配范围限定到注册表中的特定存储库。
- 角色:
场景:CI/CD 生成管道和开发人员之类的标识需生成和推送映像以及管理映像标记
- 角色:
Container Registry Repository Writer
- 权限:授予数据平面访问权限,以推送、拉取和更新(但不能删除)映像和工件、读取/管理标记、读取/管理 OCI 引荐者,以及启用(但不能禁用)存储库和映像的工件流式处理。 不包括任何控制平面权限。 不授予存储库目录列表权限 ,以列出注册表中的任何存储库。
- ABAC 支持:此角色支持可选的Microsoft Entra ABAC 条件,以将角色分配范围限定到注册表中的特定存储库。
- 角色:
场景:需要删除映像、工件、标记和 OCI 引荐者的标识
- 角色:
Container Registry Repository Contributor
- 权限:授予以下权限:读取、写入、更新和删除映像和工件、读取/管理/删除标记、读取/管理/删除 OCI 引荐者,以及启用/禁用存储库和映像的工件流式处理。 不包括任何控制平面权限。 不授予存储库目录列表权限 ,以列出注册表中的任何存储库。
- ABAC 支持:此角色支持可选的Microsoft Entra ABAC 条件,以将角色分配范围限定到注册表中的特定存储库。
- 角色:
场景:需要列出注册表中所有存储库的标识
- 角色:
Container Registry Repository Catalog Lister
- 权限:授予数据平面访问权限以列出注册表中的所有存储库,包括通过
{loginServerURL}/acr/v1/_catalog
或{loginServerURL}/v2/_catalog
注册表 API 终结点。 不包括任何控制平面权限或推送/拉取映像的权限。 - ABAC 支持:此角色不支持 Microsoft Entra ABAC 条件。 因此,此角色分配将 授予列出注册表中的所有存储库的权限 。
- 角色:
场景:管道、标识和开发人员需要对映像进行签名
- 使用 OCI 引荐者(例如 Notary Project)对映像进行签名:
- 角色:
Container Registry Repository Writer
- 权限:授予数据平面访问权限,以便以附加到映像和项目的 OCI 引荐者形式推送签名。 不包括任何控制平面权限。
- ABAC 支持:此角色支持可选的Microsoft Entra ABAC 条件,以将角色分配范围限定到注册表中的特定存储库。
- 角色:
- 使用 Docker 内容信任 (DCT) 对映像进行签名:
- 不支持使用 DCT 为启用 ABAC 的注册表进行映像签名。
- 使用 OCI 引荐者(例如 Notary Project)对映像进行签名:
场景:管道、标识和开发人员需要创建、更新或删除 ACR 注册表
- 角色:
Container Registry Contributor and Data Access Configuration Administrator
- 权限:
- 授予控制平面访问权限来创建、配置、管理和删除注册表,其中包括:
- 配置注册表 SKU
- 身份验证访问设置(管理员用户登录凭据、匿名拉取、非 Microsoft Entra 令牌的存储库权限以及 Microsoft Entra 身份验证作为 ARM 令牌受众)
- 高可用性功能(异地复制、 可用性区域和区域冗余),
- 本地功能(连接的注册表),
- 注册表终结点 (专用数据终结点)
- 网络访问(专用链接和专用终结点设置、 公用网络访问、 受信任的服务绕过、 网络防火墙规则和 虚拟网络(VNET)服务终结点)
- 注册表策略(保留策略、 注册表范围的隔离启用、 软删除启用和数据 外泄导出策略)
- 诊断和监视设置(诊断设置、日志、指标、用于注册表和异地复制的 Webhook 以及事件网格)
- 管理注册表的系统分配的托管标识
- 注意:此角色授予删除注册表本身的权限。
- 注意:此角色不包括数据平面操作(例如镜像推送/拉取)、角色分配功能,或 ACR 任务。
- 注意:若要管理注册表的用户分配的托管标识,被分配者还必须具有“
Managed Identity Operator
”角色。
- 授予控制平面访问权限来创建、配置、管理和删除注册表,其中包括:
- ABAC 支持:此角色不支持Microsoft Entra ABAC 条件,因为角色的范围限定为注册表级别,授予管理整个注册表的控制平面设置和配置的权限。
- 角色:
场景:管道、基础结构工程师或控制平面可观测性/监视工具需要列出注册表并查看注册表配置,但不需要访问注册表映像
- 角色:
Container Registry Configuration Reader and Data Access Configuration Reader
- 权限:与“
Container Registry Contributor and Data Access Configuration Administrator
”角色对应的只读权限。 授予控制平面对查看和列出注册表的访问权限,并检查注册表配置,但不对其进行修改。 不包括数据平面操作(例如图像上传/下载)或角色分配功能。 - ABAC 支持:此角色不支持Microsoft Entra ABAC 条件,因为该角色的范围限定为注册表级别,授予读取控制平面设置和整个注册表配置的权限。
- 角色:
场景:漏洞扫描程序和工具需要审核注册表和注册表配置以及访问注册表映像以扫描其中是否存在漏洞
- 角色:
Container Registry Repository Reader
、Container Registry Repository Catalog Lister
和Container Registry Configuration Reader and Data Access Configuration Reader
- 权限:授予控制平面权限以查看和列出 ACR 注册表,以及检查注册表配置以确保检查和合规性。 此外,还授予拉取图像、项目和查看标记的权限,以扫描和分析图像是否存在漏洞。
- ABAC 支持:ACR 建议漏洞扫描程序和监视器对注册表中的所有存储库具有完全数据平面访问权限。 因此,应在没有Microsoft Entra ABAC 条件的情况下分配这些角色,以授予角色权限,而无需将其范围限定为特定存储库。
- 角色:
场景:管道和标识需要编排 ACR 任务
- 角色:
Container Registry Tasks Contributor
- 权限:管理 ACR 任务,包括任务定义和任务运行、任务代理池、快速
az acr build
生成和快速运行az acr run
以及任务日志。 不包括数据平面权限或更广泛的注册表配置 - 注意:若要完全管理 任务标识,被分配者必须具有
Managed Identity Operator
该角色。 - ABAC 支持:此角色不支持Microsoft Entra ABAC 条件,因为该角色的范围限定为注册表级别,从而授予管理注册表中的所有 ACR 任务的权限。
- 角色:
场景:管道和开发人员之类的标识需要使用
az acr import
导入映像- 角色:
Container Registry Data Importer and Data Reader
- 权限:授予控制平面访问权限,以便使用
az acr import
触发图像导入,并授予数据平面访问权限以验证导入成功(拉取导入的图像和工件、查看存储库内容、列出 OCI 引用,以及检查导入的标记)。 不允许推送或修改注册表中的任何内容。 - ABAC 支持:此角色不支持Microsoft Entra ABAC 条件,因为该角色的范围限定为注册表级别,从而授予将映像导入注册表中的任何存储库的权限。 它还授予读取注册表中所有存储库中的映像的权限。
- 角色:
场景:管道和开发人员之类的标识需要管理 ACR 传输管道,以便跨网络、租户或气隙边界使用中间存储帐户在注册表之间传输工件
- 角色:
Container Registry Transfer Pipeline Contributor
- 权限:授予控制平面访问权限,以使用中间存储帐户管理 ACR 导入/导出传输管道和管道运行。 不包括数据平面权限、更广泛的注册表访问权限或管理其他 Azure 资源类型(例如存储帐户或密钥保管库)的权限。
- ABAC 支持:此角色不支持Microsoft Entra ABAC 条件,因为该角色的范围限定为注册表级别,并授予管理注册表中的所有 ACR 传输管道的权限。
- 角色:
场景:管理隔离的映像
- 角色:
AcrQuarantineReader
和AcrQuarantineWriter
- 权限:管理注册表中的隔离映像,包括列出和拉取隔离映像以供进一步检查,以及修改映像的隔离状态。 隔离的映像是推送的映像,在取消隔离之前无法拉取或使用。
- ABAC 支持:此角色不支持 Microsoft Entra ABAC 条件,因为该角色的范围仅限于注册表级别,授予管理注册表中所有隔离映像的权限。
- 角色:
场景:开发人员或流程需要配置注册表的在 ACR 任务上运行的自动清除
- 角色:
Container Registry Tasks Contributor
- 权限:授予控制平面权限,以管理在 ACR 任务上运行的自动清除。
- ABAC 支持:此角色不支持Microsoft Entra ABAC 条件,因为该角色的范围限定为注册表级别,从而授予管理注册表中的所有 ACR 任务的权限。
- 角色:
场景:Visual Studio Code Docker 扩展用户
- 角色:
Container Registry Repository Writer
、Container Registry Tasks Contributor
和Container Registry Contributor and Data Access Configuration Administrator
- 权限:授予浏览注册表、拉取和推送映像以及使用
az acr build
生成映像的功能,支持 Visual Studio Code 中的常见开发人员工作流。 - ABAC 支持:ACR 建议 Visual Studio Code 用户对注册表中的所有存储库具有完全数据平面访问权限。 因此,应在没有Microsoft Entra ABAC 条件的情况下分配这些角色,以授予角色权限,而无需将其范围限定为特定存储库。
- 角色:
后续步骤
- 若要使用可选的Microsoft Entra ABAC 条件执行角色分配,以将角色分配限定为特定存储库,请参阅 Microsoft基于 Entra 的存储库权限。
- 有关每个 ACR 内置角色(包括每个角色授予的权限)的详细参考,请参阅 Azure 容器注册表角色目录参考。
- 有关创建自定义角色以满足特定需求和要求的详细信息,请参阅 Azure 容器注册表自定义角色。