Compartilhar via

配置注册表支持Microsoft Entra身份验证范围

使用 Azure Container Registry (ACR) Microsoft Entra身份验证遵循两跃点过程。 首先,用户使用Microsoft Entra ID进行身份验证,以获取具有特定身份验证受众范围的身份验证令牌(例如,az login)。 接下来,用户使用该Microsoft Entra身份验证令牌(例如,az acr login)向注册表进行身份验证。 默认情况下,在注册表身份验证的第二步中,注册表接受 Microsoft Entra 的 ARM 范围身份验证(提供广泛的 Azure 资源管理器访问)和 ACR 范围身份验证(提供特定于注册表的访问)。 为了增强安全性,可以将注册表配置为仅接受 ACR 范围的Microsoft Entra身份验证。

注释

当注册表配置为仅接受 ACR 范围的Microsoft Entra身份验证时,某些Azure服务和集成可能不起作用。 在生产环境中强制实施此配置之前,在非生产环境中测试兼容性。

本文介绍如何使用 Azure CLI 或 Azure 门户为 ACR 范围的Microsoft Entra身份验证配置容器注册表。

先决条件

了解 ACR 的 Microsoft Entra 身份验证范围

本部分介绍双跃点身份验证流、身份验证范围之间的差异,以及注册表配置如何控制访问权限。

双跃点身份验证流

使用 ACR 进行身份验证涉及两个不同的步骤,这些步骤适用于Azure CLI用户、Azure服务和编程代码(SDK):

  1. 第一跳 - 使用 Microsoft Entra ID 进行身份验证:运行 az login 来认证 Microsoft Entra ID 并获取 Microsoft Entra 身份验证令牌。 此令牌包含一个访问群体范围,用于确定可以访问哪些Azure资源:

    • 默认情况下,az login 获取一个限制在 ARM 范围内的 Microsoft Entra 身份验证令牌(具有广泛的 Azure Resource Manager 访问权限)。
    • 通过使用 az login --scope https://containerregistry.chinacloudapi.cn/.default,可以获取作用域限定为 ACR 的 Microsoft Entra 身份验证令牌(限于特定注册表的访问)。
  2. 第二跳 - 使用 ACR 服务进行验证:运行命令 az acr login,使用第一跳中的 Microsoft Entra 身份验证令牌对 ACR 服务进行验证。 此时,注册表的配置根据Microsoft Entra身份验证令牌的范围确定是接受还是拒绝注册表身份验证尝试。

Microsoft Entra身份验证范围类型

ARM 作用域的 Microsoft Entra 身份验证

  • 提供对Azure Resource Manager(ARM)的广泛访问权限,该控制平面用于管理所有Azure资源。
  • 在没有其他参数的情况下运行 az login 时,此范围类型是默认值。
  • ARM 范围的 Microsoft Entra 身份验证令牌对容器注册表操作的权限过于宽松,因为它们授予的访问权限超出了进行注册表身份验证所需的范围。

适用于 ACR 的 Microsoft Entra 身份验证

  • 仅提供对注册表的窄访问,该访问仅限于ACR操作。
  • 要求在--scope https://containerregistry.chinacloudapi.cn/.default期间显式指定az login
  • 遵循最低特权原则,只授予容器注册表操作所需的权限。

注册表配置选项

注册表配置由 azureADAuthenticationAsArmPolicy 属性控制,确定在身份验证过程的第二跳 (az acr login) 中发生的情况:

  • 启用(默认值):注册表接受 ARM 范围和 ACR 范围的Microsoft Entra身份验证。
  • 禁用(建议):注册表仅接受 ACR 范围的Microsoft Entra身份验证并拒绝 ARM 范围的身份验证。

为什么 ACR 仅建议使用 ACR 范围的身份验证

将注册表配置为仅接受 ACR 范围的Microsoft Entra身份验证可提供以下几个好处:

  • 安全:将身份验证限制为范围较窄的Microsoft Entra身份验证令牌,从而减少攻击面。
  • 最小特权访问:确保用于容器注册表身份验证的 Microsoft Entra 身份验证令牌仅具有容器注册表操作所需的权限。
  • 合规性一致性:有助于满足要求最低权限访问模式的安全性和合规性要求。
  • 最佳实践:符合 Azure 安全最佳实践中标识和访问管理的要求。

为 ACR 作用域的 Microsoft Entra 身份验证配置注册表 - Azure CLI

可以配置您的注册设置,以控制在第二个身份验证跃点期间接受哪些 Microsoft Entra 身份验证范围。 该 azureADAuthenticationAsArmPolicy 属性控制此配置。

需要Azure CLI版本 2.40.0 或更高版本。 若要查看自己的版本,请运行 az --version

检查当前注册表配置

运行以下命令以查看注册表的当前配置:

az acr config authentication-as-arm show -r <registry>

状态值显示当前配置:

  • enabled(默认值):注册表接受 ARM 范围和 ACR 范围的Microsoft Entra身份验证。
  • disabled(建议):注册表仅接受 ACR 范围的 Microsoft Entra 身份验证。

更新注册表配置

若要将注册表配置为仅接受 ACR 范围的Microsoft Entra身份验证,请将状态设置为 disabled

az acr config authentication-as-arm update -r <registry> --status disabled

若要还原为接受 ARM 范围和 ACR 范围 Microsoft Entra 身份验证的默认配置:

az acr config authentication-as-arm update -r <registry> --status enabled

使用与 ACR 相关范围的 Microsoft Entra 身份验证进行身份验证

本部分介绍如何使用 ACR 范围内的 Microsoft Entra 身份验证来执行双跳身份验证流程。 此身份验证方法同时适用于这两种注册表配置,但当注册表配置为仅接受 ACR 范围的Microsoft Entra身份验证时,这是必需的。

第一步:获取 ACR 范围的 Microsoft Entra 身份验证令牌

若要获取 ACR 范围的Microsoft Entra身份验证令牌,请在运行 --scope 时指定 az login 参数:

az cloud set -n AzureChinaCloud
az login --scope https://containerregistry.chinacloudapi.cn/.default
# az cloud set -n AzureCloud   //means return to Public Azure.

此命令使用 Microsoft Entra ID 进行身份验证,并获取具有 ACR 特定范围的 Microsoft Entra 身份验证令牌。 身份验证令牌存储在本地缓存中。

注释

若要获取 Microsoft Entra 为 ACR 服务限定的身份验证令牌,您必须指定 https://containerregistry.chinacloudapi.cn/.default。 不能将 https://registryname.azurecr.cn/ 指定为范围,因为 Microsoft Entra ID 和 ACR 不支持特定于注册表的Microsoft Entra身份验证访问群体。

第二跃点:使用注册表进行身份验证

在第一跃点中获取 ACR 范围的Microsoft Entra身份验证令牌后,请使用注册表进行身份验证:

az acr login -n <registry>

在第二次跳跃期间,注册表会验证Microsoft Entra身份验证令牌。 如果将注册表配置为仅接受 ACR 范围的身份验证,它将拒绝 ARM 范围的令牌,并且仅接受您在第一跃点中获取的 ACR 范围 Microsoft Entra 身份验证令牌。

可以使用具有 ACR 作用域的 Microsoft Entra 身份验证令牌对您有权限访问的所有 ACR 注册表进行身份验证。

为 ACR 范围的 Microsoft Entra 身份验证配置注册表 - Azure 门户

可以使用Azure Policy将注册表配置为仅接受 ACR 范围的Microsoft Entra身份验证。 分配内置策略会自动在策略范围内为当前和将来的注册表配置注册表属性。 可以在资源组级别或订阅级别应用策略。

Azure Container Registry 提供了两项内置的策略定义,以便配置针对 ACR 范围的 Microsoft Entra 身份验证。

  • Container registries should have ARM audience token authentication disabled. - 此策略报告并阻止不符合资源,并且可以将不符合的注册表自动更新为建议的配置。
  • Configure container registries to disable ARM audience token authentication. - 此策略提供修正功能和更新不符合的注册表,以仅接受 ACR 范围的身份验证。

有关更多策略定义,请参阅 Azure Container Registry内置策略定义

分配内置策略定义

若要将注册表配置为仅接受 ACR 范围的Microsoft Entra身份验证,请使用Azure Policy:

  1. 登录到 Azure 门户

  2. 转到包含Azure Container Registry的资源组。

  3. 在服务菜单中的 “设置”下,选择“ 策略”。

  4. “策略”页上的“创作”下,选择“分配”,选择“分配策略”

  5. “分配策略 ”选项卡上,使用筛选器搜索和查找 范围策略定义分配名称

    “分配策略”选项卡的屏幕截图。

  6. 选择 “范围 ”以筛选并搜索 订阅资源组 ,然后选择 “选择”。

  7. 选择 “策略定义 ”以筛选和搜索配置 ACR 范围的身份验证的内置策略定义。

    内置策略定义的屏幕截图。

  8. 使用筛选器选择并确认“范围”、“策略定义”和“分配名称”。

  9. 将筛选器用于限制合规性状态,或用于搜索策略。

  10. 确认设置,并将“强制实施策略”设置为“启用”。 此设置可确保策略将作用域内的注册表配置为仅接受 ACR 范围的Microsoft Entra身份验证。

  11. 选择“查看 + 创建”

后续步骤