Compartilhar via

使用 Azure Container Registry 进行身份验证

可以通过多种方式使用Azure容器注册表进行身份验证。 查看这些选项,以确定最适合你的容器注册表使用场景的选择。

对于大多数方案,请使用以下基于Microsoft Entra ID的方法之一进行身份验证:

  • 单个登录 - 直接向注册表进行身份验证
  • 服务主体 - 使用 Microsoft Entra 服务主体为应用程序和容器编排器进行无人值守或“无外设”身份验证

身份验证选项

下表列出了可用的身份验证方法和典型方案,并提供了更多详细信息的链接。

提示

有关从 Azure Kubernetes Service (AKS) 或其他 Kubernetes 群集进行身份验证的方案,请参阅 通过 Kubernetes 从 Azure 容器注册表进行身份验证的方案

方法 如何进行身份验证 场景 Microsoft Entra基于角色的访问控制 (RBAC) 限制
个体 Microsoft Entra 标识  Azure CLI中的 az acr login

Azure PowerShell 中的 Connect-AzContainerRegistry
开发人员、测试人员的交互式推送/拉取 Microsoft Entra令牌必须每隔 3 小时续订一次
Microsoft Entra服务主体  docker login

Azure CLI中的 az acr login

Azure PowerShell 中的 Connect-AzContainerRegistry

API 或工具中的注册表登录设置
从 CI/CD 管道进行的无人参与推送

无人参与拉取到Azure或外部服务
服务提供商密码默认有效期为 1 年
Microsoft Entra 为 Azure 资源提供的托管标识  docker login

 Azure CLI中的 az acr login

Azure PowerShell 中的 Connect-AzContainerRegistry
Azure CI/CD 管道中的无干预推送

自动推送到 Azure 服务

有关托管标识角色分配方案的列表,请参阅 ACR Entra 权限和角色分配
仅限支持托管标识的特定Azure服务使用Azure资源
管理员用户  docker login  各个开发人员或测试人员的交互式推送/拉取

通过门户将映像从注册表部署到Azure App Service或Azure容器实例
否,始终仅限拉取和推送访问 高级权限访问。 每个注册表的单个帐户;不建议为多个用户使用
非 Microsoft Entra 基于令牌的存储库权限  docker login

Azure CLI中的 az acr login

Azure PowerShell 中的 Connect-AzContainerRegistry
开发人员或测试人员对存储库的交互式操作(推送/拉取)

各个系统或外部设备从存储库进行无人参与拉取
基于令牌的存储库权限不支持Microsoft Entra RBAC 角色分配。

有关基于 Microsoft Entra 的存储库权限的信息,请参阅 Azure 容器注册表中的 Azure 基于属性的访问控制(ABAC)存储库权限
当前未与Microsoft Entra ID集成

使用 Microsoft Entra ID 进行身份验证

在直接使用注册表时,例如,将映像从开发工作站拉取到你创建的注册表,或将映像从注册表推送至开发工作站,请使用你的Azure身份进行身份验证。

使用 `az login` 登录到 `Azure CLI`,然后运行 `az acr login` 命令:

注意

在世纪互联运营的Microsoft Azure中使用Azure CLI之前,请先运行 az cloud set -n AzureChinaCloud 以更改云环境。 如果要切换回Azure公有云,请再次运行 az cloud set -n AzureCloud

az cloud set -n AzureChinaCloud
az login
# az cloud set -n AzureCloud   //means return to Public Azure.
az acr login --name <acrName>

当您使用 az acr login 登录时,CLI 将利用您在执行 az login 时创建的令牌,实现与注册表会话的无缝身份验证。 若要完成身份验证流,你的环境中必须已安装且正在运行 Docker CLI 和 Docker 守护程序。 az acr login使用 Docker 客户端在 docker.config 文件中设置Microsoft Entra令牌。 以这种方式登录后,将缓存凭据,会话中的后续 docker 命令不需要用户名或密码。

提示

当希望将 Docker 映像以外的项目(例如 az acr login)推送或拉取到注册表时,还可以使用 来对单个标识进行身份验证。

对于注册表访问,使用的令牌 az acr login 有效期为 3 小时,因此请在运行 docker 命令之前始终登录到注册表。 如果令牌过期,请使用命令再次刷新它 az acr login 以重新进行身份验证。

az acr login 与Azure标识配合使用可以启用 Azure 基于角色的访问控制 (RBAC)。 对于某些方案,你可能希望在Microsoft Entra ID中使用自己的个人标识登录到注册表,或者配置具有 特定角色的其他Azure用户。 对于跨服务场景,或对于不想管理个人访问权限的工作组或开发工作流,您还可以通过使用 Azure 资源的托管身份来登录。

在没有 Docker 守护程序的情况下使用 az acr login

在某些情况下,当 Docker 守护程序未在您的环境中运行时,需要使用 az acr login 进行身份验证。 例如,您可能需要在 Azure 本地 Shell 的脚本中运行 az acr login,该 Shell 提供 Docker CLI,但不运行 Docker 守护程序。

对于此方案,请使用az acr login参数运行--expose-token。 此选项返回访问令牌,而不是通过 Docker CLI 登录。

az acr login --name <acrName> --expose-token

输出显示访问令牌,缩写如下:

{
  "accessToken": "<Your_Access_Toke_Placeholder>",
  "loginServer": "myregistry.azurecr.cn"
}

对于注册表身份验证,请将令牌凭据存储在安全位置,并遵循建议的做法来管理 docker 登录 凭据。 例如,将令牌值存储在环境变量中:

TOKEN=$(az acr login --name <acrName> --expose-token --output tsv --query accessToken)

然后,运行 docker login,作为用户名传递 00000000-0000-0000-0000-000000000000 ,并使用访问令牌作为密码:

docker login myregistry.azurecr.cn --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN

同样,可以将 az acr login 返回的令牌与 helm registry login 命令配合使用,以使用注册表进行身份验证:

echo $TOKEN | helm registry login myregistry.azurecr.cn \
            --username 00000000-0000-0000-0000-000000000000 \
            --password-stdin

服务主体

如果为注册表分配了服务主体,则应用程序或服务可以将其用于无外设身份验证。 服务主体在注册表中启用 Azure 基于角色的访问控制 (RBAC)。 可以将多个服务主体分配给注册表,以便对特定应用程序使用不同的 支持角色

有关详细信息,请参阅使用服务主体进行 Azure 容器注册表的身份验证

管理员帐户

每个容器注册表包含一个管理员用户帐户,此帐户默认禁用。 可以在Azure门户中启用管理员用户并管理其凭据,也可以使用Azure CLI、Azure PowerShell或其他Azure工具。 管理员帐户对注册表具有完全权限,因此应仅在必要时启用它。

某些方案当前需要管理员帐户才能将映像从容器注册表部署到某些Azure服务。 例如,使用 Azure 门户将容器映像直接从注册表部署到 Azure Container Instances 或Azure Container Apps时,需要管理员帐户。

重要

管理员帐户专门用于单个用户访问注册表,主要用于测试目的。 不要在多个用户之间共享管理员帐户凭据。 所有使用管理员账户进行身份验证的用户都会显示为一个拥有对注册表推送和拉取权限的用户。 更改或禁用此帐户会禁用使用凭据的所有用户的注册表访问权限。 对于用户和服务主体可以在无外设方案中使用单个标识

管理员帐户有两个密码,两个密码都可以重新生成。 为管理员帐户重新生成密码大约需要 60 秒才能复制并变为可用。 由于帐户有两个密码,因此可以在重新生成另一个密码时使用一个密码来维护与注册表的连接。 如果启用管理员帐户,则当系统提示向注册表进行基本身份验证时,可以将用户名和密码传递给 docker login 命令。 有关管理身份验证凭据的建议做法,请参阅 docker 登录 命令参考。

若要为现有注册表启用管理员用户,请使用 Azure CLI 中的 --admin-enabled 命令的 参数:

az acr update -n <acrName> --admin-enabled true

还可以在 Azure 门户中为注册表启用管理员用户。 在服务菜单中的 “设置”下,选择 “访问密钥”。 然后选中 “管理员用户 ”框以启用帐户。 将显示管理员用户名以及两个密码,你可以根据需要显示或重新生成密码。

使用替代容器工具而不是 Docker 登录

在某些情况下,您需要使用诸如 podman 之类的替代容器工具,而不是 Docker。

docker 命令的默认容器工具设置为 az acr login。 如果未设置默认容器工具,并且 docker 环境中缺少该命令,则会看到错误。 若要更改命令使用的默认容器工具 az acr login ,请设置环境变量 DOCKER_COMMAND。 例如:

DOCKER_COMMAND=podman \
az acr login --name <acrName>

后续步骤