无法从Azure java SDK列出图像发布者

我正在使用Azure ARM API,并且我尝试通过Azure Java SDK按位置列出所有发布者,方法是执行以下代码:

import com.microsoft.azure.management.compute.ComputeManagementClient; import com.microsoft.azure.management.compute.ComputeManagementService; import com.microsoft.azure.management.compute.models.VirtualMachineImageListPublishersParameters; import com.microsoft.azure.management.compute.models.VirtualMachineImageResourceList; @Test public void testListPublishers() { ComputeManagementClient client = ComputeManagementService.create(createConfiguration()); VirtualMachineImageListPublishersParameters params = new VirtualMachineImageListPublishersParameters(); params.setLocation("westus"); VirtualMachineImageResourceList response = client.getVirtualMachineImagesOperations().listPublishers(params); ArrayList resources = response.getResources(); System.out.println("Found publishers: " + resources.size()); } 

这导致以下请求:

 GET /subscriptions/{some-subscription}/providers/Microsoft.Compute/locations/westus/publishers?api-version=2015-06-15 

但是,无论我放在发布商参数中的位置,我总是得到并清空列表。 我能够使用相同的客户端列出其他资源,因此在创建客户端时不会出现问题。

你对我可能做错了什么有什么建议吗? 也许有一个我没有的许可?

谢谢!

根据我的经验,该问题是由Azure AD上注册的应用程序没有读者角色引起的。 我重现了这个问题,并通过为AzureAD应用程序分配一个Reader角色来解决它。

分配Reader角色有两种方法。

  1. 使用Azure-CLI和arm模式,并命令azure ad role assignment create --objectId -o Reader -c /subscriptions//

如果您不知道AzureAD应用程序的objectId,则可以命令azure ad sp show --search 进行查看。 如果Azure AD没有Service Principal (SP) ,则可以命令azure ad sp create 来创建它。

  1. 在Azure新门户上显示应用程序时,通过All settings -> RESOURCE MANAGEMENT -> Users添加角色和用户,请参阅下面的图片。

选择角色Reader在此处输入图像描述

通过搜索名称添加用户: 在此处输入图像描述

将读者角色分配给aad应用程序后,您可以根据需要列出图像发布者。