Azure Java SDK:ServiceException:ForbiddenError:

时间:2015-10-12 13:24:06

标签: java azure keystore azure-java-sdk

尝试了基本位置检索器代码(如下所示)

downloadUrl

并且工作正常。但是当我尝试创建ComputeManagementClient并尝试重新启动VM

String uri = "https://management.core.windows.net/";
        String subscriptionId = "XXXXXXXX-5fad-XXXXXX-9dfa-XXXXXX";
         String keyStoreLocation = "D:\\test.jks";
         String keyStorePassword = "123456";

        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
                ); 


        ManagementClient client = ManagementService.create(config);
        // get the list of regions
        LocationsListResponse response = client.getLocationsOperations().list();
        ArrayList<Location> locations = response.getLocations();
        // write them out
        for( int i=0; i<locations.size(); i++){
          System.out.println(locations.get(i).getDisplayName());

    }

我收到证书错误。

ComputeManagementClient computeManagementClient = ComputeManagementService.create(config);
        VirtualMachineOperations virtualMachinesOperations= computeManagementClient.getVirtualMachinesOperations();
virtualMachinesOperations.restart("SQLVM", "sqlvm.cloudapp.net");

PS:我从Java Keystore创建了一个.cer并上传到Azure中,没有任何问题。

有什么线索发生了什么?

1 个答案:

答案 0 :(得分:1)

问题是由使用不正确的Azure Java SDK库引起的。 当我在下面的文件pom.xml中使用maven依赖项时,我重现了同样的异常。

<dependency>
   <groupId>com.microsoft.azure</groupId>
   <artifactId>azure-mgmt-compute</artifactId>
   <version>0.8.3</version>
</dependency>

库提供VM重启功能需要两个参数:resource group namevm name。但是库azure-mgmt-compute的API用于Azure资源管理。

要重新启动VM,如果使用了JKS证书,则需要使用库azure-svc-mgmt-compute的API进行Azure服务管理。类VirtualMachineOperations提供相同名称函数restart需要三个参数:service namedeployment namevm name。您可以从Azure门户上的Cloud Service仪表板中找到这些名称。在您的问题代码中,vm name应为&#34; sqlvm&#34;。

依赖关系的正确maven pom.xml如下:

<dependency>
   <groupId>com.microsoft.azure</groupId>
   <artifactId>azure-svc-mgmt</artifactId>
   <version>0.8.3</version>
</dependency>
<dependency>
   <groupId>com.microsoft.azure</groupId>
   <artifactId>azure-svc-mgmt-compute</artifactId>
   <version>0.8.3</version>
</dependency>

以下代码

virtualMachinesOperations.restart("<service name: sqlvm>", "<deployment name: sqlvm>", "<vm name: sqlvm>");

通过在路径JAVA_HOME / bin中使用Java Keytool来获取genkeypair的以下步骤:

keytool -genkeypair -alias keyfile -keyalg RSA -keystore <KeyStore.jks> 
-keysize 2048 -storepass "<password>"

keytool -v -export -file <KeyStore.cer> -keystore KeyStore.jks -alias keyfile

我的代码:

String uri = "https://management.core.windows.net/";
String subscriptionId = "<subscription_id>";
String keyStoreLocation = "KeyStore.jks";
String keyStorePassword = "<password>";

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
    ); 
ComputeManagementClient computeManagementClient = ComputeManagementService.create(config);
VirtualMachineOperations virtualMachinesOperations = computeManagementClient.getVirtualMachinesOperations();
virtualMachinesOperations.restart("petercore", "petercore", "petercore");