无法从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角色有两种方法。
- 使用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
来创建它。
- 在Azure新门户上显示应用程序时,通过
All settings -> RESOURCE MANAGEMENT -> Users
添加角色和用户,请参阅下面的图片。
选择角色Reader
:
通过搜索名称添加用户:
将读者角色分配给aad应用程序后,您可以根据需要列出图像发布者。