我的问题是,我们是否有任何记录在案的方法来授予 Graph API 的管理服务标识权限,就像我们在门户中使用 Azure 应用程序注册一样?我在 Azure 门户或文档中找不到任何 Powershell 选项或管理 MSI 服务主体权限的能力。我在 MSDN 论坛上发现了一个类似的问题,但想确保没有任何人知道的任何进一步的更新或解决方法?
问问题
3391 次
2 回答
14
免责声明 - 我对 MSI 并不太熟悉,但由于它们被建模为服务主体,因此应该可以。我也无法验证这些步骤。
这些步骤要求您使用Azure AD PowerShell (v2)将应用程序权限分配给您的 MSI(以访问 Microsoft Graph),并且您是租户中的管理员或应用程序管理员。对于 Microsoft Graph,可在此处找到记录的权限。相同的指令也可用于受 Azure AD 保护的其他资源。我假设您已经安装了 PowerShell 模块。
Connect-AzureAD
将 PS 连接到 Azure 广告。输入您的管理员凭据。$graph = Get-AzureADServicePrincipal -Filter "AppId eq '00000003-0000-0000-c000-000000000000'"
查找代表 Microsoft Graph 的服务主体并将其分配给一个变量。Microsoft Graph 的服务主体当前是在首次访问时及时创建的,因此它可能不存在。它可以通过调用来创建New-AzureADServicePrincipal -AppId "00000003-0000-0000-c000-000000000000"
。$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
- 找到您的 MSI 的 objectId(假设您不知道它,但您知道它的 clientId/appId):
$msi = Get-AzureADServicePrincipal -Filter "AppId eq '{Your_MSI_appId}'"
- 对于您的 MSI 需要的每个权限,运行以下 PS cmdlet 以将权限分配给您的 MSI:
New-AzureADServiceAppRoleAssignment -Id {permissionId} -PrincipalId $msi.ObjectId -ResourceId $graph.ObjectId
那应该这样做。您现在应该能够为您的 MSI 获取访问令牌以调用 Microsoft Graph,并且访问令牌应该包含roles
与您在上面分配的权限 (id) 匹配的声明。然后,您可以使用该访问令牌调用 Microsoft Graph。这类似于https://docs.microsoft.com/en-us/azure/active-directory/msi-overview中的步骤 6 和 7 。
希望这可以帮助,
于 2017-12-28T20:45:53.460 回答
0
RequestDenied 消息是预期的。对此进行了更改,即现在阻止更新系统 MSI SP。
于 2019-01-28T19:30:06.573 回答