Azure 容器注册表角色和权限

Azure 容器注册表服务支持一组内置 Azure 角色,这些角色提供访问 Azure 容器注册表所需的不同级别的权限。 使用 Azure 基于角色的访问控制 (RBAC) 来为需要与注册表交互(如拉取或推送容器映像)的用户、服务主体或其他标识分配特定的权限。 还可以定义自定义角色,向其授予对注册表的精细访问权限,以便执行各种操作。

角色/权限 访问资源管理器 创建/删除注册表 推送映像 拉取映像 删除映像数据 更改策略 对映像签名
“所有者” X X X X X X
参与者 X X X X X X
读者 X X
AcrPush X X
AcrPull X
AcrDelete X
AcrImageSigner X

分配角色

请参阅添加角色分配的步骤,以了解将角色分配添加到现有用户、组、服务主体或托管标识的概要步骤。 可以使用 Azure 门户、Azure CLI、Azure PowerShell 或其他 Azure 工具。

创建服务主体时,还需要配置其对 Azure 资源(例如容器注册表)的访问和权限。 有关使用 Azure CLI 的示例脚本,请参阅使用服务主体的 Azure 容器注册表身份验证

区分用户和服务

应用权限时,最佳做法是为需要完成某个任务的用户或服务提供一组最受限的权限。 以下权限集代表一组可供用户和无外设服务使用的功能。

CI/CD 解决方案

通过 CI/CD 解决方案自动执行 docker build 命令时,需要 docker push 功能。 对于这些无外设服务方案,建议分配 AcrPush 角色。 该角色不同于权限范围更大的“参与者”角色,可以防止帐户执行其他注册表操作或访问 Azure 资源管理器。

容器主机节点

同样,运行容器的节点需要 AcrPull 角色,但不应该需要“读者”功能。

Visual Studio Code Docker 扩展

对于 Visual Studio Code Docker 扩展这样的工具,需要其他资源提供程序访问权限才能列出可用的 Azure 容器注册表。 在这种情况下,请为用户提供对“读者”或“参与者”角色的访问权限。 这些角色允许 docker pulldocker pushaz acr listaz acr build 等功能。

访问资源管理器

Azure 资源管理器访问权限是 Azure 门户和使用 Azure CLI 进行注册表管理所需的。 例如,若要通过 az acr list 命令获取一系列注册表,需要此权限集。

创建和删除注册表

创建和删除 Azure 容器注册表的功能。

推送映像

通过 docker push 将映像推送到注册表的功能,或者将其他受支持的项目(例如 Helm 图表)推送到注册表的功能。 要求使用授权的标识通过注册表进行身份验证

拉取映像

通过 docker pull 从注册表拉取非隔离映像的功能,或者从注册表拉取其他受支持的项目(例如 Helm 图表)的功能。 要求使用授权的标识通过注册表进行身份验证

删除映像数据

能够从注册表中删除容器映像或者删除其他受支持的项目,例如 Helm 图表。

更改策略

在注册表上配置策略的功能。 策略包括映像清除、启用隔离和映像签名。

对映像签名

对映像签名的功能,通常分配给某个自动化过程,该过程会使用服务主体。 此权限通常与推送映像功能配合使用,以便将受信任的映像推送到注册表。 有关详细信息,请参阅 Azure 容器注册表中的内容信任

自定义角色

与其他 Azure 资源一样,可以创建具有对 Azure 容器注册表的精细访问权限的自定义角色。 然后,将自定义角色分配给需要与注册表进行交互的用户、服务主体或其他标识。

若要确定将哪些权限应用于自定义角色,请参阅 Microsoft.ContainerRegistry 操作列表,查看内置 ACR 角色允许的操作,或运行以下命令:

az provider operation show --namespace Microsoft.ContainerRegistry

若要定义自定义角色,请参阅创建自定义角色的步骤

注意

Azure 容器注册表支持在自定义角色中使用通配符操作(例如 Microsoft.ContainerRegistry/*/readMicrosoft.ContainerRegistry/registries/*/write),从而授予对所有匹配操作的访问权限。 在无 ARM 专用链接的租户中,在自定义角色中单独指定所有必需的注册表操作。