部署可以在委派的订阅中修正的策略

Azure Lighthouse 使服务提供商能够在委托的订阅中创建和编辑策略定义。 若要部署使用修正任务的策略(即,具有 deployIfNotExists 或 modify 效果的策略),必须在客户租户中创建托管标识。 Azure Policy 可以使用此托管标识在策略中部署模板。

本文介绍将客户加入 Azure Lighthouse 时以及部署策略时启用此方案的步骤。

提示

虽然本文指的是服务提供商和客户, 但管理多个租户的企业 可以使用相同的流程。

创建一个可以在客户租户中将角色分配给托管标识的用户

当你将客户载入到 Azure Lighthouse 时,你可以定义授权,以授予对客户租户中委派资源的访问权限。 每个授权指定与管理租户中的 Microsoft Entra 用户、组或服务主体对应的 principalId,以及对应于所授予的 Azure 内置角色的 roleDefinitionId。

若要允许 principalId 将角色分配给客户租户中的托管标识,请将 其 roleDefinitionId 设置为 用户访问管理员。 虽然 Azure Lighthouse 通常不支持此角色,但可以在此特定场景中使用。 将此角色授予 principalId ,以便它可以将特定的内置角色分配给托管标识。 这些角色在 delegatedRoleDefinitionIds 属性中定义。 除了用户访问管理员或所有者之外,还可以包含任何 受支持的 Azure 内置角色 。

载入客户后,在此授权中创建的 principalId 可以将这些内置角色分配给客户租户中的托管标识。 它通常没有与用户访问管理员角色关联的任何其他权限。

注意

当前必须使用 API(而不是 Azure 门户)跨租户创建 角色分配 。

此示例显示了具有“用户访问管理员”角色的 principalId。 此用户可以将两个内置角色分配给客户租户中的托管标识:参与者和 Log Analytics 参与者。

{
    "principalId": "00000000-0000-0000-0000-000000000000",
    "principalIdDisplayName": "Policy Automation Account",
    "roleDefinitionId": "18d7d88d-d35e-4fb5-a5c3-7773c20a72d9",
    "delegatedRoleDefinitionIds": [
         "b24988ac-6180-42a0-ab88-20f7382dd24c",
         "92aaf0da-9dab-42b6-94a3-d43ce8d16293"
    ]
}

部署可修正的策略

创建具有所需权限的用户后,该用户就可以在委派的客户订阅中部署使用修正任务的策略。

例如,假设要在客户租户中的 Azure Key Vault 资源上启用诊断,如 此示例所示。 管理租户中具有适当权限(如前面所述)的用户部署 Azure 资源管理器模板 以启用此方案。

当前必须使用 API 创建策略分配,以便与委托订阅一起使用;无法使用 Azure 门户。 创建策略分配时,请将 apiVersion 设置为 2019-04-01-preview 或更高版本以包含 delegatedManagedIdentityResourceId 属性。 此属性允许你包含存在于客户租户中的托管标识(在你已加入到 Azure Lighthouse 的订阅或资源组中)。

以下示例显示具有 delegatedManagedIdentityResourceId 的角色分配。

"type": "Microsoft.Authorization/roleAssignments",
            "apiVersion": "2019-04-01-preview",
            "name": "[parameters('rbacGuid')]",
            "dependsOn": [
                "[variables('policyAssignment')]"
            ],
            "properties": {
                "roleDefinitionId": "[concat(subscription().id, '/providers/Microsoft.Authorization/roleDefinitions/', variables('rbacContributor'))]",
                "principalType": "ServicePrincipal",
                "delegatedManagedIdentityResourceId": "[concat(subscription().id, '/providers/Microsoft.Authorization/policyAssignments/', variables('policyAssignment'))]",
                "principalId": "[toLower(reference(concat('/providers/Microsoft.Authorization/policyAssignments/', variables('policyAssignment')), '2018-05-01', 'Full' ).identity.principalId)]"
            }

提示

这里有类似的示例,该示例演示如何部署策略,以便为委托的订阅添加或删除标记(使用 modify 效果)。

后续步骤