Azure active directory 使用cloudshell和devops pipline的Azure powershell角色协助

Azure active directory 使用cloudshell和devops pipline的Azure powershell角色协助,azure-active-directory,azure-powershell,azure-ad-graph-api,paas,Azure Active Directory,Azure Powershell,Azure Ad Graph Api,Paas,我正在尝试删除特定对象id的分配。下面是我得到的错误。 我正在AD中附加我的服务主体访问级别 当我试图使用devops pipline执行相同的命令时,我得到了不同的错误 要删除访问权限,我的服务prinicpal在API权限中需要什么权限 只有阅读才能工作?还有为什么我会犯错误。任何建议 我可以重现您的问题,命令Remove azroleasignment将调用验证您传递的$objectid,因此您需要为应用程序授予目录.Read.AllAzure AD Graph(非Microsoft

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

当我试图使用devops pipline执行相同的命令时,我得到了不同的错误

要删除访问权限,我的服务prinicpal在API权限中需要什么权限 只有阅读才能工作?还有为什么我会犯错误。任何建议


我可以重现您的问题,命令
Remove azroleasignment
将调用验证您传递的
$objectid
,因此您需要为应用程序授予
目录.Read.All
Azure AD Graph(非Microsoft Graph,非委托权限)

添加权限后,会有一些延迟(30m-1h),然后测试命令,它会工作。(I在本地测试,在cloud shell中相同)

注意:除了Azure AD中的权限外,您的服务主体还需要拥有订阅/特定资源范围中的权限,例如,服务主体是订阅/特定资源范围的
访问控制(IAM)
中的
所有者/用户访问管理员
角色(在您的情况下,是存储帐户)。如果服务主体不具有该角色,请按以下方式添加它


在Azure Devops中,您不需要使用
连接AzaAccount
登录(实际上在cloud shell中,您也不需要登录,但如果您想这样做,也可以),它将使用与服务连接相关的服务主体自动登录(
任务版本>=4.

因此,请确保您的服务主体的机密正确,并且连接已验证。若要运行
Remove Azroleasignment
,请同时添加与服务连接相关的应用程序注册权限

然后测试它,它工作


我可以重现您的问题,命令
Remove azroleasignment
将调用验证您传递的
$objectid
,因此您需要为应用程序授予
目录.Read.All
Azure AD Graph(非Microsoft Graph,非委托权限)

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

注意:除了Azure AD中的权限外,您的服务主体还需要拥有订阅/特定资源范围中的权限,例如,服务主体是订阅/特定资源范围的
访问控制(IAM)
中的
所有者/用户访问管理员
角色(在您的情况下,是存储帐户)。如果服务主体不具有该角色,请按以下方式添加它


在Azure Devops中,您不需要使用
连接AzaAccount
登录(实际上在cloud shell中,您也不需要登录,但如果您想这样做,也可以),它将使用与服务连接相关的服务主体自动登录(
任务版本>=4.

因此,请确保您的服务主体的机密正确,并且连接已验证。若要运行
Remove Azroleasignment
,请同时添加与服务连接相关的应用程序注册权限

然后测试它,它工作


Joy Wang是正确的,但我想补充一点,如果不是绝对需要的话,您不应该为整个订阅提供服务主体所有者。这是出于安全考虑。 更好的方法是在订阅中仅使用所需的权限创建自定义角色。在这种情况下,使其在自定义角色中工作所需的某些权限包括:

  "Microsoft.Management/managementGroups/read"
  "Microsoft.Authorization/roleAssignments/*"
  "Microsoft.Authorization/roleDefinitions/*"
此外,我还尝试使用服务主体运行get-azroleassignment而不使用directory.read.all,只要您拥有在订阅中分配的角色权限,它就可以工作。这让我相信powershell get-add-remove-azroleassignment根本不使用graph api权限

更新 正如joy所说,定制角色可能毫无用处,因为它可以在技术上赋予自己所有权,但是,这里有证据表明,您不需要api图权限,服务主体就可以这样做:

更新2: 证明删除订阅规则,仅拥有api权限不起作用,它只能为自己(服务主体本身)获得角色分配,而不能获得其他任何东西。
Joy Wang是正确的,但我想补充一点,如果不是绝对需要的话,您不应该为整个订阅提供服务主体所有者。这是出于安全考虑。 更好的方法是在订阅中仅使用所需的权限创建自定义角色。在这种情况下,使其在自定义角色中工作所需的某些权限包括:

  "Microsoft.Management/managementGroups/read"
  "Microsoft.Authorization/roleAssignments/*"
  "Microsoft.Authorization/roleDefinitions/*"
此外,我还尝试使用服务主体运行get-azroleassignment而不使用directory.read.all,只要您拥有在订阅中分配的角色权限,它就可以工作。这让我相信powershell get-add-remove-azroleassignment根本不使用graph api权限

更新 正如joy所说,定制角色可能毫无用处,因为它可以在技术上赋予自己所有权,但是,这里有证据表明,您不需要api图权限,服务主体就可以这样做:

更新2: 证明删除订阅规则,仅拥有api权限不起作用,它只能为自己(服务主体本身)获得角色分配,而不能获得其他任何东西。

第一部分是正确的,实际上,添加所有者是为了您提到的操作。第二部分是错误的,当您使用
Get/Rem时