使用 Azure Policy 分配托管标识(预览版)

Overview

Azure Policy可帮助实施组织标准并大规模评估合规性。通过合规性仪表板,Azure policy提供了一个聚合视图,可帮助管理员评估环境的总体状态。 你可以下钻到按资源和按策略的粒度级别。 它还通过对现有资源的批量修正以及对新资源的自动修正,帮助资源符合规范。 Azure Policy 的常见用例包括实施治理来满足以下方面的要求:

  • 资源一致性
  • 法规符合性
  • 安全性
  • 成本
  • 管理

Azure 环境中已经提供了这些常见用例的策略定义来帮助你入门。

Azure 监控代理要求在受监视的 Azure 虚拟机 (VM) 上具有托管标识。 本文档介绍了 Microsoft 提供的内置 Azure Policy 的行为,该策略有助于确保将这些场景所需的托管标识大规模分配给 VM。

虽然可以使用系统分配的托管标识,但在大规模使用(例如在订阅中的所有 VM 上)时,会在 Microsoft Entra ID 中导致大量标识的创建和删除。 若要避免此标识变动,请使用用户分配的托管标识。 可以创建一次它们,并在多个 VM 之间共享。

策略定义和详细信息

执行时,策略将执行以下操作:

  1. 在订阅中创建新的内置用户分配托管标识(如果不存在)。 每个 Azure 区域的标识符是基于策略范围内的虚拟机创建的。
  2. 锁定用户分配的托管标识以防止意外删除。
  3. 根据策略范围内的 VM,将内置用户分配的托管标识从订阅和区域分配给虚拟机。

注意

如果虚拟机已经分配了一个用户分配的托管标识,则策略会跳过为该 VM 分配内置标识。 此行为可确保策略分配不会中断依赖于 Azure 实例元数据服务 (IMDS) 上的令牌终结点默认行为的应用程序。

有两种使用该策略的方案:

  • 让策略创建和使用内置用户分配的托管标识。
  • 自带用户分配的托管标识。

策略采用以下输入参数:

  • 自带 UAMI? - 如果不存在用户分配的托管标识,该策略是否应创建新的托管标识?
    • 如果设置为 true,则必须指定:
      • 托管标识的名称。
      • 包含托管标识的资源组。
    • 如果设置为 false,则无需再输入任何输入。
      • 该策略在名为built-in-identity的资源组中创建了一个名为built-in-identity-rg的必需用户分配的托管标识。
  • 限制-自带-UAMI-到-订阅? - 当 Bring-Your-Own-UAMI 参数设置为 true 时,策略是否应使用集中式用户分配的托管标识或使用每个订阅的标识?
    • 如果设置为 true,则无需再输入任何输入。
      • 该策略为每个订阅使用用户分配的托管标识。
    • 如果设置为 false,则策略使用一个集中式的用户分配托管标识,该标识应用于策略分配涵盖的所有订阅。 必须指定以下内容:
      • 用户分配的托管标识资源 ID

使用该策略

创建策略分配项

可以将策略定义分配给Azure中的不同范围 - 管理组、订阅或特定资源组。 由于必须持续强制实施策略,因此分配操作使用与策略分配对象关联的托管标识。 策略分配对象支持系统分配的托管标识和用户分配的托管标识。 例如,可以创建名为 PolicyAssignmentMI 的用户分配托管标识。 内置策略在具有策略分配范围内资源的每个订阅和每个区域中创建用户分配的托管标识。 由策略创建的用户分配的托管标识具有以下资源 ID 格式:

/subscriptions/your-subscription-id/resourceGroups/built-in-identity-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/built-in-identity-{location}

例如:

/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/built-in-identity-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/built-in-identity-ChinaNorth

所需的授权

若要使 PolicyAssignmentMI 托管标识能够在指定范围内分配内置策略,它需要以下权限,这些权限以 Azure RBAC(Azure 基于角色的访问控制)角色分配的形式表示:

主要 角色/操作 Scope 目的
PolicyAssignmentMI 托管的标识操作员 /subscription/subscription-id/resourceGroups/built-in-identity

自带用户分配的管理标识
需要为虚拟机分配内置标识。
PolicyAssignmentMI 贡献者 /subscription/subscription-id> 创建用于容纳订阅中内置托管标识的资源组是必需的。
PolicyAssignmentMI 托管标识参与者 /subscription/subscription-id/resourceGroups/内建身份验证 新建用户分配的托管标识时是必需的。
PolicyAssignmentMI 用户访问管理员 /subscription/subscription-id/resourceGroups/built-in-identity

自带用户分配的管理标识
若要对由该策略创建的用户分配的托管标识设置锁定,则这是必需的。

由于策略分配对象必须提前拥有此权限,因此 PolicyAssignmentMI 不能是此方案的系统分配托管标识。 执行策略分配任务的用户必须先针对 PolicyAssignmentMI 进行预授权,按上表所示进行角色分配。

所需的最低特权角色位于 Contributor 订阅范围内。

已知问题

如果有另一个部署要更改分配给 VM 的标识,那么随之可能产生的争用条件可能会导致意外结果。

在特定的竞争条件下,当两个或多个并行部署更新同一台虚拟机,并且更改虚拟机的标识配置时,可能无法将所有预期的标识分配给虚拟机。

例如,本文档中的策略可能会更新 VM 的托管标识,而另一个进程同时更改托管标识部分。 在这种情况下,无法保证 VM 会被正确分配所有预期的身份标识。

后续步骤