azure 具有对象ID的客户端无权在作用域上执行操作“Microsoft.Web/serverfarms/read”

vxbzzdmp  于 2023-05-18  发布在  其他
关注(0)|答案(4)|浏览(133)

我正在使用Azure应用服务API来查看服务器的详细信息,如工作进程和区域等。为了管理目的。从AuthenticationContext.AcquireTokenAsync方法生成令牌后,我请求以下URL获取服务器详细信息**https://management.azure.com/subscriptions/<sub ID>/resourceGroups//providers/Microsoft.Web/serverfarms/?2018-02-01**
在响应中,我得到AuthorizationFailed错误代码,详细信息如下:
客户端无权在作用域“/subscributions/xxxxxxxx-xxxxxxx-xxxx/resourceGroups/xxxxxxxxxxx/providers/Microsoft.Web/serverfarm/xxxx”上执行操作“Microsoft.Web/serverfarm/read”,或者作用域无效。如果最近授予了访问权限,请刷新您的凭据。
但是当我使用**https://learn.microsoft.com/en-us/rest/api/appservice/appserviceenvironments/get**门户尝试相同的验证时,请求返回了预期的结果。
那么,是否有其他方式进行身份验证,或者我应该定义一些权限来实现该功能?

q0qdq0h2

q0qdq0h21#

您正在使用的服务主体在该租户中没有权限。
租户拥有订阅,服务主体属于租户。Azure资源管理器还为给定主体公开基于角色的授权,这将赋予其对Azure资源的权限。服务主体似乎没有读取该订阅的权限。
转到门户网站并找到您的subscription,单击Access Control (IAM),然后单击Add role assignmentcorrespond service principal,您使用该correspond service principal获取令牌。
成功授予权限后,刷新并重试。

rta7y2nd

rta7y2nd2#

我在跑步时也遇到了同样的错误,

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster

我在az login之后不久就这样做了。问题是我没有正确设置我的订阅,所以我必须做的是运行。

az account set --subscription your-subscription-id

az aks get-credentials正常工作之后,错误消失了,您将得到如下输出:

  • Merged "myAKSCluster" as current context in C:\Users\UserName\.kube\config*
cu6pst1q

cu6pst1q3#

我也有同样的问题。最初,我继续向我的用户添加了“Web计划贡献者”角色,因为它应该处理这些事情。没有任何变化-我仍然有这个错误。
实际问题是错误的资源组…原来我复制了一些旧脚本,其中WebAppPlans在单独的RG中,我在那里搜索应用程序计划。完全误导错误。我猜它会带来相同的错误消息,即使应用程序计划根本不存在。

y0u0uwnf

y0u0uwnf4#

**由于Azure可能非常复杂,我将尝试将其分解,以便任何人都能理解。

  • 欢迎大家修改这篇文章更好,因为我可能也不是100%清楚。
    账户目录

当你创建一个Azure帐户时,它会创建一个directory(默认目录),一个目录叫做Tenant,你可以有多个这样的directories,我想你甚至可以有单独的登录凭据为每个,它就像一个完全独立的组织,每个directory都有它的subscriptionsresource groupsresources/apps等。


Azure Active Directory
每个目录都有自己的Azure Active Directory,列出了所有UsersGroupsApplications,这些都是clients/objects将访问Directory(租户)中的Resources或对其执行操作的Resources
在这种情况下,您的编程app将在您的Azure resources上执行任务,为了做到这一点,client(您的应用程序)需要有适当的permission来执行特定的action(无论您想做什么操作),直接允许在特定的resource上执行它。

首先,您需要创建一个client-这是注册app的过程,在Azure Active Directory> App Registrations单击New Registration,在这里您将您的程序app注册为client/object,您希望使用它来访问Azure resources,并给予其命名为MyApp,单击Register,你会得到一个Application (client) ID,你将在你的代码中使用它作为client ID,这个app现在是User/Service Principal,它现在仍然是给予它权限,你想在resource上执行的操作。
转到Resource/Resource groupApp Service/Database/VM)或Subscription(这将给予它访问整个subscription中的所有resources),单击Access control (IAM)> Add> Add role assignment

  • 在“添加角色分配”屏幕中,选择角色操作,在您的示例中为Reader
  • 转到Members选项卡,在这里我们将选择Service principal(您刚刚注册的应用程序)。
  • 点击“选择成员”,你会看到AD用户,但默认情况下,你不会看到你注册的AD apps,你需要搜索他们的名字,输入你刚刚给我的名字。
  • 从下面的列表中选择它,然后单击底部的Select
  • 完成任务…

按照下图中的数字点击。

现在,您应该通过重新执行授权client的代码来刷新您的应用中的凭据,确保您使用了在Azure中注册的app的正确client-ID,对于某些权限,可能需要几分钟才能更新权限,一旦更新,您就可以开始了。
如果您再次看到AuthorizationFailed,请检查它是否仍然是同一个action的失败,因为可能需要为principal分配另一个action才能实现输出。
我希望这能帮到某人...祝你好运!

可能有帮助的链接:

相关问题