图谱API的MSI权限

flo*_*oyd 4 azure-active-directory microsoft-graph azure-managed-identity

我的问题是,我们是否有任何记录方法向Graph API授予管理服务标识权限,就像在门户网站中使用Azure App注册一样?我无法在Azure门户或文档中找到任何Powershell选项或管理MSI服务主体权限的能力.我在MSDN论坛上发现了一个类似的问题,但是想确保没有任何人知道的更新或变通方法?

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

Dan*_*SFT 11

免责声明 - 我对MSI并不过分熟悉,但由于它们被建模为服务主体,因此应该可行.此外,我无法验证这些步骤.

这些步骤要求您使用Azure AD PowerShell(v2)为MSI分配应用程序权限(以访问Microsoft Graph),并且您是租户中的管理员或应用程序管理员.对于Microsoft Graph,可以在此处找到记录的权限.同样的说明也可用于Azure AD保护的其他资源.我假设您已经安装了PowerShell模块.

  1. Connect-AzureAD将PS连接到Azure广告.输入您的管理员信用.
  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. $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
  4. 找到你的MSI的objectId(假设你不知道它,但你确实知道它的clientId/appId): $msi = Get-AzureADServicePrincipal -Filter "AppId eq '{Your_MSI_appId}'"
  5. 对于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 .

希望这可以帮助,

  • 我按照上述步骤操作,我可以确认这是有效的。加上 Powershell 要求提供 -ObjectId 参数,它与主体 Id 相同。New-AzureADServiceAppRoleAssignment -Id {permissionId} -PrincipalId $msi.ObjectId -ObjectId $msi.ObjectId -ResourceId $graph.ObjectId。您可以通过转到 Azure Active Directory - 企业应用程序 - 所有应用程序来获取托管服务标识的 AppId。确保将所有过滤器设置为“任何”/“所有应用程序” (2认同)