部署可以在委派的订阅中修正的策略
服务提供商可以通过 Azure Lighthouse 在委托订阅中创建和编辑策略定义。 若要部署使用修正任务的策略(即,具有 deployIfNotExists 或 modify 效果的策略),必须在客户租户中创建托管标识。 此托管标识可供 Azure Policy 用来在策略中部署模板。 本文介绍了在载入 Azure Lighthouse 的客户时以及部署策略本身时,启用此方案所需要的步骤。
提示
尽管本主题中只是提到了服务提供商和客户,但管理多个租户的企业也可以使用相同的过程。
创建一个可以在客户租户中将角色分配给托管标识的用户
当你将客户载入到 Azure Lighthouse 时,你可以定义授权,以授予对客户租户中委派资源的访问权限。 每个授权都将指定一个 principalId(对应于管理租户中的 Microsoft Entra 用户、组或服务主体)和 roleDefinitionId(对应于将被授予的 Azure 内置角色)。
若要允许 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 效果)。
后续步骤
- 了解 Azure Policy。
- 了解 Azure 资源的托管标识。