Azure 从 Azure Java SDK 检索 VirtualMachines 的 PublicIPAddress
Azure retrieving the PublicIPAddress of VirtualMachines from Azure Java SDK
由于 answer 找不到页面,我尝试使用以下代码检索 Public 个 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 身份验证,它 returns - 0
使用 https://management.azure.com/ API 的证书身份验证,returns - 身份验证失败:
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)
知道如何检索所有虚拟机的 Public 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 资源管理进行身份验证,文档 "Authenticating Azure Resource Management request"( https://msdn.microsoft.com/en-us/library/azure/dn790557.aspx) 说 "All of the tasks that you do on resources using the Azure Resource Manager must be authenticated with Azure Active Directory. "。
因此您需要使用您的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()
);
JavaServicePrincipal的完整认证代码,请参考https://github.com/Azure/azure-sdk-for-java/blob/master/azure-mgmt-samples/src/main/java/com/microsoft/azure/samples/authentication/ServicePrincipalExample.java。
为线程(Retrieve List of networks for a subscription in windows azure with azure java sdk) answer's url, it moves 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。
由于 answer 找不到页面,我尝试使用以下代码检索 Public 个 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 身份验证,它 returns - 0
使用 https://management.azure.com/ API 的证书身份验证,returns - 身份验证失败:
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)
知道如何检索所有虚拟机的 Public 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 资源管理进行身份验证,文档 "Authenticating Azure Resource Management request"( https://msdn.microsoft.com/en-us/library/azure/dn790557.aspx) 说 "All of the tasks that you do on resources using the Azure Resource Manager must be authenticated with Azure Active Directory. "。
因此您需要使用您的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()
);
JavaServicePrincipal的完整认证代码,请参考https://github.com/Azure/azure-sdk-for-java/blob/master/azure-mgmt-samples/src/main/java/com/microsoft/azure/samples/authentication/ServicePrincipalExample.java。
为线程(Retrieve List of networks for a subscription in windows azure with azure java sdk) answer's url, it moves 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。