【问题标题】:Azure powershell role assisgment using cloudshell and devops pipline使用云 shell 和 devops 管道分配 Azure powershell 角色
【发布时间】:2020-09-07 05:19:55
【问题描述】:

我正在尝试删除特定对象 id 的分配。以下是我得到的错误。 我在 AD 中附加了我的服务主体访问级别。

当我尝试使用 devops 管道执行相同的命令时,我得到了不同的错误。

要删除访问权限,我的服务主体在 API 权限中需要什么权限 部分只读可以工作吗?以及为什么我遇到 could.execption 错误。任何建议。

【问题讨论】:

    标签: azure-active-directory azure-powershell azure-ad-graph-api paas


    【解决方案1】:

    Joy Wang 是正确的,但我想补充一点,如果不是绝对需要,您不应该将服务主体所有者授予整个订阅。这是一个安全考虑。 更好的方法是在订阅中创建一个自定义角色,仅具有您需要的权限。在这种情况下,让它在自定义角色中工作所需的一些权限是:

      "Microsoft.Management/managementGroups/read"
      "Microsoft.Authorization/roleAssignments/*"
      "Microsoft.Authorization/roleDefinitions/*"
    

    另外,我尝试在没有 directory.read.all 的情况下使用服务主体运行 get-azroleassignment,只要您具有订阅中分配的角色权限,它就可以工作。这让我相信 powershell get-add-remove-azroleassignment 根本不使用图形 api 权限。

    更新 正如joy所说,自定义角色可能没用,因为它在技术上可以赋予自己所有权,但是,这里证明您不需要服务主体的 api 图权限来执行此操作:

    更新2: 证明删除订阅规则,并且只有 api 权限不起作用,它只能为自己获取角色分配,(服务主体本身)没有别的。

    【讨论】:

    • 第一部分是正确的,实际上,添加所有者是针对您提到的操作。第二部分是错误的,当你使用Get/Remove-AzRoleAssignment和服务主体时,它必须需要AzureAD中的权限,API权限或目录角色都可以。
    • I tried to run get-azroleassignment without directory.read.all with a service principal, and it works as long as you have the role permissions assigned in the subscription. 我想你是用用户账户测试的,不是服务主体,普通会员用户已经有权限调用这个AAD Graph,如果你用服务主体测试,你会得到错误。
    • 顺便说一句,实际上这种情况下的自定义角色是没有意义的,因为如果您将具有Microsoft.Authorization/roleAssignments/*权限的自定义角色分配给用户,用户也可以分配其他角色,例如Owner自己。
    • 这是一个关于分配自己所有者的有效观点。但是关于您的其他评论,不,我没有使用用户帐户进行测试。它是一个服务主体。我有截图来证明这一点。它不需要api权限,更新了我的帖子。
    • 你的服务主体可能有目录角色,检查一下。
    【解决方案2】:

    我可以重现您的问题,命令Remove-AzRoleAssignment 将调用Azure AD Graph 来验证您传递的$objectid,因此您需要授予Azure AD Graph 的应用程序权限 Directory.Read.All不是 Microsoft Graph,不是委托权限)。

    添加权限后,有一些延迟(30m - 1h),然后测试命令,它可以工作。 (我在本地测试,在cloud shell中也一样)

    注意:除了 Azure AD 中的权限外,您的服务主体还需要具有订阅/特定资源范围内的权限,例如servcie 主体是订阅/特定资源范围(在您的情况下为存储帐户)的Access control (IAM) 中的Owner/User Access Admin 角色。如果服务主体没有角色,请按如下方式添加。


    在Azure Devops中,不需要用Connect-AzAccount登录(其实在cloud shell中,你也不需要登录,但是如果你想这样做也可以),它会自动登录与服务连接相关的服务主体(Task version >= 4.*)。

    因此,请确保您的服务主体的密码正确且连接已验证。要运行Remove-AzRoleAssignment,还要为与服务连接相关的应用注册添加上面的权限。

    然后测试它,它可以工作。

    【讨论】:

    • 嗨,乔伊,您是正确的,我的服务原则密钥未验证。验证后我可以分配角色,但仍然 Microsoft.Azure.cloud.execption 错误来自 devops 管道。现在在 devops 管道中我设置选项是继续,因此在角色分配后我的下一个 devOps 管道任务应该'停下来。
    • 如果api权限被授予,可能会有一些延迟。我相信它会起作用。
    • 喜乐还不是 cloud.authenication 错误,我已经就该问题提出了 MS 票。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-15
    • 2023-02-09
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    相关资源
    最近更新 更多