You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过ARM模板或Graph API配置读取Entra ID诊断设置权限

多租户应用自动分配Entra ID诊断设置权限方案

我们有一款部署在客户环境的多租户应用,需通过Microsoft Graph和Azure PowerShell采集数据,目前尝试读取Entra ID诊断设置的代码如下:

$accessToken = (Get-AzAccessToken -ResourceUrl "https://management.azure.com").Token
$apiEndpoint = "https://management.azure.com/providers/microsoft.aadiam/diagnosticSettings?api-version=2017-04-01-preview"

$headers = @{
    "Authorization" = "Bearer $accessToken"
    "Content-Type" = "application/json"
}

$response = Invoke-RestMethod -Uri $apiEndpoint -Headers $headers -Method Get

运行时遇到权限错误:

"message": "The client 'blabla' with object id 'blabla' does not have authorization to perform action 'microsoft.aadiam/diagnosticSettings/write' over scope '/providers/microsoft.aadiam/diagnosticSettings/testDiagSetting' or the scope is invalid. If access was recently granted, please refresh your credentials."

手动执行以下命令可解决问题,但希望避免管理员手动操作,以下是两种自动实现方案:


一、通过ARM模板自动分配权限

可以直接在部署应用的ARM模板中添加角色分配资源,实现自动化权限配置。

ARM模板示例

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "servicePrincipalObjectId": {
            "type": "string",
            "metadata": {
                "description": "多租户应用服务主体的ObjectId"
            }
        },
        "aadIamScope": {
            "type": "string",
            "defaultValue": "/providers/Microsoft.aadiam",
            "metadata": {
                "description": "Entra ID诊断设置的资源范围"
            }
        }
    },
    "variables": {
        // Contributor角色的固定ID,若需更精细权限可替换为自定义角色ID
        "contributorRoleId": "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
    },
    "resources": [
        {
            "type": "Microsoft.Authorization/roleAssignments",
            "apiVersion": "2022-04-01",
            "name": "[guid(parameters('servicePrincipalObjectId'), parameters('aadIamScope'), variables('contributorRoleId'))]",
            "properties": {
                "roleDefinitionId": "[variables('contributorRoleId')]",
                "principalId": "[parameters('servicePrincipalObjectId')]",
                "scope": "[parameters('aadIamScope')]",
                "principalType": "ServicePrincipal"
            }
        }
    ]
}

注意事项

  1. 部署模板的用户需具备所有者或用户访问管理员权限,才能创建角色分配。
  2. 若无需完整Contributor权限,建议创建自定义角色,仅包含microsoft.aadiam/diagnosticSettings/*权限,降低权限过大的安全风险。
  3. 多租户场景下,需确保部署上下文指向客户的目标租户。

二、通过Microsoft Graph API实现权限分配

可借助Microsoft Graph的Azure RBAC管理端点自动创建角色分配,同时可通过管理员同意流程让客户授权应用完成操作。

1. 配置应用权限

在应用注册中添加RoleAssignment.ReadWrite.Directory应用权限(需客户管理员同意),或使用委托权限(需管理员交互授权)。

2. 调用Graph API创建角色分配

获取有效访问令牌后,发送POST请求创建角色分配:

POST https://graph.microsoft.com/v1.0/roleManagement/azure/roleAssignments
Content-Type: application/json

{
    "principalId": "e348be5c-fc9b-4852-8e04-540093bd461b",
    "roleDefinitionId": "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c",
    "directoryScopeId": "/providers/Microsoft.aadiam"
}

注意事项

  1. 管理员同意流程可通过构造授权URL引导客户完成,无需手动执行命令。
  2. 同样推荐使用自定义角色缩小权限范围,遵循最小权限原则。

内容的提问来源于stack exchange,提问作者83jahs8

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 07:44:54