【问题标题】:What are the required permissions for Get-AzureADServicePrincipal?Get-AzureADServicePrincipal 需要哪些权限?
【发布时间】:2023-04-06 16:27:01
【问题描述】:

我正在尝试运行 PowerShell 脚本以从 DevOps 服务主体分配 appRoles。

DevOps 服务主体已分配以下权限并获得管理员许可:

  • Application.Read.All
  • AppRoleAssignment.ReadWrite.All
  • User.Read

它在获取服务主体的步骤中失败,该服务主体是要分配的角色的所有者:

$sp = Get-AzureADServicePrincipal -filter "displayName eq '$AppName'"

带有错误信息:

Error occurred while executing GetServicePrincipals 
Code: Authorization_RequestDenied
Message: Insufficient privileges to complete the operation.
RequestId: a8fadf67-94d6-40ec-ad88-6562cf9f6d80
DateTimeStamp: Tue, 23 Jun 2020 16:51:36 GMT
HttpStatusCode: Forbidden
HttpStatusDescription: Forbidden
HttpResponseStatus: Completed

我希望 Application.Read.All 授予此权限,因为我正在搜索的资源是一个应用程序。

我需要什么权限才能运行这行脚本,这在哪里记录?我正在应用最小特权原则,不想让 Devops sp 担任管理角色。我只想申请完成这项工作所需的特定权限。

【问题讨论】:

    标签: azure-active-directory


    【解决方案1】:

    我注意到您分配了一个权限User.Read,该权限仅存在于委派权限中。所以我猜你配置的另外两个权限Application.Read.AllAppRoleAssignment.ReadWrite.All也是Delegated权限。

    但是现在您从服务主体运行 Get-AzureADServicePrincipal,这意味着它需要应用程序权限(此处没有用户)。

    当我通过 Fiddler4 跟踪这个 cmd 时,后端请求是 GET https://graph.windows.net/exxxxx4e-bd27-40d5-8459-23xxxxa757fb/servicePrincipals?api-version=1.6&%24filter=displayName%20eq%20%27xxxx%27

    graph.windows.net 用于 Azure AD Graph,graph.microsoft.com 用于 Microsoft Graph。

    所以它调用 Azure AD Graph 而不是 Microsoft Graph。您需要的是 Azure AD Graph 的应用程序权限。

    根据我的测试,Application.ReadWrite.AllDirectory.Read.All 可以满足您的需求。如果不希望服务主体有写权限,可以选择Directory.Read.All

    【讨论】:

    • 谢谢。这让我意识到 AzureAD 模块根本不适合我们的需求,因为 Azure AD Graph 权限太宽泛了。如果我们重写脚本来调用 MS Graph API,我们可以使用 Microsoft Graph 权限,我已经证明这在今天有效。我理解的差距是 AD Graph 和 MS Graph 之间的区别。
    猜你喜欢
    • 2014-08-28
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 2016-07-15
    • 2012-03-11
    • 2019-08-23
    相关资源
    最近更新 更多