【问题标题】:Assigning Microsoft Graph permissions to Azure Managed Service Identity将 Microsoft Graph 权限分配给 Azure 托管服务标识
【发布时间】:2019-03-04 14:16:54
【问题描述】:

我正在尝试为我的 Azure 逻辑应用程序的 Azure 托管服务标识分配权限,但遇到了错误。

我使用的是 2.0.1.16 版本的 AzureAD powershell 模块。

我所做的如下:

  1. 创建逻辑应用
  2. 在该逻辑应用的工作流设置中生成 Azure 托管服务标识。
  3. 执行下面的 PowerShell 为 group.readwrite.all 角色分配托管服务标识。

它首先抛出一个拒绝访问错误,随后的尝试将抛出一个“InvalidRequest”错误。我是全局管理员,对资源组具有完全访问权限(它是一个基本的开发租户,我拥有完全权限)

我已经在不同的租户上尝试过。有没有人能让这个工作?

    PS C:\Users\markp> $msi = Get-AzureADServicePrincipal | ?{$_.DisplayName -ieq "test"}
PS C:\Users\markp> $mai
PS C:\Users\markp> $msi

ObjectId                             AppId                                DisplayName
--------                             -----                                -----------
8d87a1f9-fab0-45a9-a6f3-1e93b2d99b52 032c3c1c-2530-4eae-b390-153e3b0eb3c6 TEST


PS C:\Users\markp> $graph = Get-AzureADServicePrincipal -Filter "AppId eq '00000003-0000-0000-c000-000000000000'"
PS C:\Users\markp> $graph

ObjectId                             AppId                                DisplayName
--------                             -----                                -----------
5a634981-6bbe-4c81-9aef-185a71df56f7 00000003-0000-0000-c000-000000000000 Microsoft Graph


PS C:\Users\markp> $role = $graph.AppRoles | ?{$_.Value -imatch "group.read.all" }
PS C:\Users\markp> $role


AllowedMemberTypes : {Application}
Description        : Allows the app to read group properties and memberships, and read the calendar and conversations f
                     or all groups, without a signed-in user.
DisplayName        : Read all groups
Id                 : 5b567255-7703-4780-807c-7be8301ae99b
IsEnabled          : True
Value              : Group.Read.All



PS C:\Users\markp> New-AzureADServiceAppRoleAssignment -ObjectId $msi.ObjectId -PrincipalId $msi.ObjectId -Id $role.Id -ResourceId $graph.ObjectId
New-AzureADServiceAppRoleAssignment : Error occurred while executing NewServicePrincipalAppRoleAssignment
Code: Authorization_RequestDenied
Message: Insufficient privileges to complete the operation.
HttpStatusCode: Forbidden
HttpStatusDescription: Forbidden
HttpResponseStatus: Completed
At line:1 char:1
+ New-AzureADServiceAppRoleAssignment -ObjectId $msi.ObjectId -Principa ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [New-AzureADServiceAppRoleAssignment], ApiException
    + FullyQualifiedErrorId : Microsoft.Open.AzureAD16.Client.ApiException,Microsoft.Open.AzureAD16.PowerShell.NewServ
   icePrincipalAppRoleAssignment

PS C:\Users\markp> New-AzureADServiceAppRoleAssignment -ObjectId $msi.ObjectId -PrincipalId $msi.ObjectId -Id $role.Id -ResourceId $graph.ObjectId
New-AzureADServiceAppRoleAssignment : Error occurred while executing NewServicePrincipalAppRoleAssignment
Code: Request_BadRequest
Message: One or more properties are invalid.
RequestId: 57ef7908-dd8b-4a21-b48e-f2692d324264
DateTimeStamp: Fri, 28 Sep 2018 14:36:55 GMT
HttpStatusCode: BadRequest
HttpStatusDescription: Bad Request
HttpResponseStatus: Completed
At line:1 char:1
+ New-AzureADServiceAppRoleAssignment -ObjectId $msi.ObjectId -Principa ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [New-AzureADServiceAppRoleAssignment], ApiException
    + FullyQualifiedErrorId : Microsoft.Open.AzureAD16.Client.ApiException,Microsoft.Open.AzureAD16.PowerShell.NewServ
   icePrincipalAppRoleAssignment

【问题讨论】:

    标签: azure azure-active-directory azure-logic-apps


    【解决方案1】:

    初始设置

    我在试用订阅中设置了一个名为“test”的新逻辑应用,就像您在上面解释的那样,并通过工作流设置为其启用了 MSI。然后我使用了与上面完全相同的 PowerShell 命令。

    解释正在发生的两件最重要的事情

    1. 第一次运行 - 即使您收到代码错误:Authorization_RequestDenied,添加新角色分配的操作实际上已经完成了它的工作。添加了新的权限。 (我将在下面的部分中提供一些证据)

    2. 第一次运行后的后续运行 - 您收到代码错误:Request_BadRequest,因为您尝试添加的权限/角色分配已在第一次运行中添加。

    证据

    1. PowerShell 脚本完全来自您的帖子。

    2. 这些查询仅适用于 Azure AD Graph Explorer(而不是新的 Microsoft Graph Explorer)。此外,查询区分大小写,因此即使是很小的差异也会产生影响。

      您基本上可以在第一次运行 PowerShell 脚本之前和之后查看服务主体的角色分配,以查看实际添加了所需的权限(我创建了一个新的逻辑应用程序,其中没有任何内容,只启用了 MSI测试这部分)

    Azure AD 图形查询:

    Azure AD Graph Query: https://graph.windows.net/{tenant Id}/servicePrincipals/{MSI Service Principal ID}/appRoleAssignments
        
    {MSI Service Principal ID} is 8d87a1f9-fab0-45a9-a6f3-1e93b2d99b52 in your case.
    

    在使用上述查询首次运行 New-AzureADServiceAppRoleAssignment 之前为 MSI 服务主体分配角色。

    使用上述查询首次运行 New-AzureADServiceAppRoleAssignment 后 MSI 服务主体的角色分配。

    另一个相关但略有不同的 SO 帖子

    This SO post 提到了与您使用的几乎相同的 PowerShell 脚本。有趣的是,对于许多人来说,脚本看起来也没有错误。 但请注意用户 Olandese 的最后一条评论

    【讨论】:

    • 谢谢罗希特!我使用 PowerShell 检索角色分配,结果它是空的,所以我没有费心进一步检查。让我尝试使用 Graph Explorer 来验证它!我会在今天晚些时候再讨论这个问题。
    • 是的。如果您查看 Enterprise App 的权限(它显示一个特殊的未找到页面),它在 PowerShell 甚至通过 Portal 中对我来说也是空的。我想这一切都是因为在托管服务标识的情况下,一些特殊的逻辑被应用于掩码信息。
    • 啊酷。 “正在进行中”我会说??。我会完成逻辑应用,看看会发生什么。
    【解决方案2】:

    目前行为尚未改变。

    • 第一次伪造身份验证错误
    • 第二次错误请求

    不过,您现在还可以在执行 Powershell 命令后,通过 MS Graph 的新 beta 端点确认正在应用的更改。

    导航到https://developer.microsoft.com/en-us/graph/graph-explorer 并与您的用户进行身份验证(应在左侧边栏中注明)

    然后您可以通过以下方式查询应用的角色: https://graph.microsoft.com/beta/servicePrincipals/{msi.ObjId}/appRoleAssignedTo

    【讨论】:

      猜你喜欢
      • 2021-06-14
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 2018-09-05
      • 1970-01-01
      • 2020-01-01
      • 2020-11-18
      • 2019-09-19
      相关资源
      最近更新 更多