图的 MSI 权限 API

MSI Permissions for Graph API

我的问题是,我们是否有任何记录的方法来向 Graph API 授予管理服务身份权限,就像我们在门户中使用 Azure 应用程序注册一样?我无法在 Azure 门户或文档中找到任何 Powershell 选项或管理 MSI 服务主体权限的能力。我在 MSDN 论坛上发现了一个类似的问题,但想确保没有任何人知道的任何进一步的更新或解决方法?

MSDN 论坛 Post:https://social.msdn.microsoft.com/Forums/azure/en-US/dae34534-f193-4444-b52e-ba9cfa4a1fda/does-azure-msi-support-accessing-graph-api?forum=WindowsAzureAD

免责声明 - 我不太熟悉 MSI,但由于它们被建模为服务主体,因此 应该 有效。我也无法验证这些步骤。

这些步骤需要您使用 Azure AD PowerShell (v2) to assign application permissions to your MSI (to access Microsoft Graph), and that you are an administrator or app admin in your tenant. For Microsoft Graph, the documented permissions can be found here。相同的说明也可用于 Azure AD 保护的其他资源。我假设您已经安装了 PowerShell 模块。

  1. Connect-AzureAD 将 PS 连接到 Azure Ad。输入您的管理员凭据。
  2. $graph = Get-AzureADServicePrincipal -Filter "AppId eq '00000003-0000-0000-c000-000000000000'" 查找表示 Microsoft Graph 的服务主体并将其分配给变量。 Microsoft Graph 的服务主体当前是在首次访问时及时创建的,因此它有可能不存在。它可以通过调用 New-AzureADServicePrincipal -AppId "00000003-0000-0000-c000-000000000000".
  3. 创建
  4. $graph.AppRoles - 这将向您显示 Microsoft Graph 公开的所有可用应用程序权限,您可以从中进行选择。例如,如果您的 MSI 需要读取组信息,请从列表中找到 "Group.Read.All" 权限,并记下其权限 ID(它是一个 GUID)。例如,这是 AppRoles 列表中的一条记录: AllowedMemberTypes : {Application} Description : Allows the app to read events of all calendars without a signed-in user. DisplayName : Read calendars in all mailboxes Id : 798ee544-9d2d-430c-a058-570e29e34338 IsEnabled : True Value : Calendars.Read
  5. 找到您的 MSI 的 objectId(假设您不知道,但您确实知道它 clientId/appId): $msi = Get-AzureADServicePrincipal -Filter "AppId eq '{Your_MSI_appId}'"
  6. 对于您的 MSI 需要的每个权限,运行 以下 PS cmdlet 将权限分配给您的 MSI: New-AzureADServiceAppRoleAssignment -Id {permissionId} -PrincipalId $msi.ObjectId -ResourceId $graph.ObjectId

应该就可以了。您现在应该能够为您的 MSI 获取访问令牌以调用 Microsoft Graph,并且该访问令牌应包含与您在上面分配的权限 (id) 相匹配的 roles 声明。然后,您可以使用该访问令牌调用 Microsoft Graph。这类似于 https://docs.microsoft.com/en-us/azure/active-directory/msi-overview 中的步骤 6 和 7。

希望这对您有所帮助,

RequestDenied 消息是预期的。对此进行了更改,现在已阻止更新系统 MSI SP。