当前位置: 首页 > 面试题库 >

Azure从Azure Java SDK检索VirtualMachines的PublicIPAddress

刘英彦
2023-03-14
问题内容

我尝试使用以下代码来检索公共IP的大小

Configuration config = ManagementConfiguration.configure(
          new URI(uri), 
          subscriptionId,
          keyStoreLocation, // the file path to the JKS
          keyStorePassword, // the password for the JKS
          KeyStoreType.jks // flags that I'm using a JKS keystore
        );

NetworkResourceProviderClient  networkResourceProviderClient = NetworkResourceProviderService.create(config);
           PublicIpAddressListResponse PublicIpAddressListResponse =networkResourceProviderClient.getPublicIpAddressesOperations().listAll();
           ArrayList<PublicIpAddress> PublicIpAddressList =PublicIpAddressListResponse.getPublicIpAddresses();
           System.out.println(PublicIpAddressList.size());

使用Azure AD ServicePrincipal身份验证,它返回-0

使用带有 “ https://management.azure.com/ ”
API的证书身份验证,它将返回-AuthenticationFailed:

Exception in thread "main" com.microsoft.windowsazure.exception.ServiceException: AuthenticationFailed: Authentication failed. The 'Authorization' header is not present or provided in an invalid format.
    at com.microsoft.windowsazure.exception.ServiceException.createFromJson(ServiceException.java:290)
    at com.microsoft.azure.management.network.PublicIpAddressOperationsImpl.listAll(PublicIpAddressOperationsImpl.java:1443)
    at com.microsoft.azure.auth.Program.main(Program.java:50)

任何想法如何检索所有虚拟机的公共IP地址?或如何进行身份验证以获得IP值?


问题答案:

该问题是由使用不正确的身份验证引起的。

下面的身份验证代码仅适用于Azure服务管理。

Configuration config = ManagementConfiguration.configure(
          new URI("https://management.core.windows.net), 
          subscriptionId,
          keyStoreLocation, // the file path to the JKS
          keyStorePassword, // the password for the JKS
          KeyStoreType.jks // flags that I'm using a JKS keystore
        );

为验证Azure资源管理,文档“验证Azure资源管理请求”(https://msdn.microsoft.com/en-
us/library/azure/dn790557.aspx
)表示“您使用以下命令对资源执行的所有任务必须使用Azure Active
Directory对Azure资源管理器进行身份验证。

因此,您需要使用您的subscription-id,tenant-id,client-id和client-secret修改身份验证配置代码,如下所示:

private static AuthenticationResult getAccessTokenFromServicePrincipalCredentials() throws
            ServiceUnavailableException, MalformedURLException, ExecutionException, InterruptedException {
        AuthenticationContext context;
        AuthenticationResult result = null;
        ExecutorService service = null;
        try {
            service = Executors.newFixedThreadPool(1);
            // TODO: add your tenant id
            context = new AuthenticationContext("https://login.windows.net/" + "<your tenant id>",
                    false, service);
            // TODO: add your client id and client secret
            ClientCredential cred = new ClientCredential("<your client id>",
                    "<your client secret>");
            Future<AuthenticationResult> future = context.acquireToken(
                    "https://management.azure.com/", cred, null);
            result = future.get();
        } finally {
            service.shutdown();
        }

        if (result == null) {
            throw new ServiceUnavailableException(
                    "authentication result was null");
        }
        return result;
    }


Configuration config = ManagementConfiguration.configure(
          null,
          new URI("https://management.core.windows.net), 
          "<your-subscription-id>",
          getAccessTokenFromServicePrincipalCredentials()
.getAccessToken()
        );

有关适用于Java的ServicePrincipal的完整身份验证代码,请参阅https://github.com/Azure/azure-sdk-
for-java/blob/master/azure-mgmt-samples/src/main/java/com/microsoft/ azure /
samples / authentication /
ServicePrincipalExample.java。

对于线程(使用azure java sdk在Windows
azure中检索订阅的网络列表)的URL,它会移动https://github.com/Azure/azure-sdk-for-java/blob/master/service-
management/ azure-svc-mgmt-network / src / main / java / com / microsoft /
windowsazure / management / network /
NetworkOperations.java。



 类似资料:
  • 我无法从azure key vault检索到运行在azure windows VM中的.NET控制台应用程序的秘密。下面是我使用过的代码,我已经给了服务主体在密钥库中的所有权限。

  • 我们正在将数据从物联网设备发送到Azure物联网中心,并尝试将特定类型的消息传递给Azure功能。 目前,我们通过创建Azure Service Busendpoint并在IoTHub中创建消息路由实现了这一点。它按预期工作,Azure函数正确接收消息。 现在,我们想在Azure功能中从IoT Hub获取DeviceId,以及在Device Twin中定义的标签,我完全不知道如何做到这一点。 如果

  • 使用AzureJavaSDK列出资源组中存在的Azure数据库for PostgreSQL服务器的最佳和正确方法是什么?目前,我们有使用ARM模板进行的部署,一旦部署了资源,我们希望能够从Azure本身获取有关这些资源的信息。我尝试过以下方法: 但是返回的列表大小是。 但是,对于虚拟机,我可以通过以下方式获取信息: 那么,使用AzureJavaSDK获取有关的信息的正确方法是什么? P. S.一旦

  • 我试图通过查询/tokenendpoint从另一个应用程序中检索spring boot应用程序中的azure JWT访问令牌,但我收到的令牌似乎不正确。 该项目有一个spring boot后端和一个Eclipse rcp前端。我正在尝试从eclipse前端检索访问令牌。对此,我有下面的控制器: 返回具有以下格式的令牌: 使用具有以下相关依赖关系的spring boot构建: v2.2.4 V2.2

  • 我试图从Azure密钥库中检索一个秘密(不使用凭据,如本教程:示例): 但是当我调用时,我得到一个 我的密钥库url的格式类似于“https://my-keyvault.vault.azure.net”。