2017-11-08 9 views
0

Azure IoT HubでデバイスIDの一括アップロードを行う場合は、https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-bulk-identity-mgmtに従います。ここで与えられたすべてのコードはC#で書かれているので、私はそれをJAVAに相当するものに変換しています。 インポート装置の例を使用Azure IoTハブデバイスIDをバルクで作成中にエラーが発生しました。

- 私は機能下記BLOBからファイルをインポートするjson-

{"id":"d3d78b0d-6c8c-4ef5-a321-91fbb6a4b7d1","importMode":"create","status":"enabled","authentication":{"symmetricKey":{"primaryKey":"f8/UZcYbhPxnNdbSl2J+0Q==","secondaryKey":"lbq4Y4Z8qWmfUxAQjRsDjw=="}}} 
{"id":"70bbe407-8d65-4f57-936f-ef402aa66d07","importMode":"create","status":"enabled","authentication":{"symmetricKey":{"primaryKey":"9e7fDNIFbMu/NmOfxo/vGg==","secondaryKey":"nwFiKR4HV9KYHzkeyu8nLA=="}}} 

を以下取得していたバルクデバイスプロビジョニングは、上記のコードで

CompletableFuture<JobProperties> importJob = registryManager 
    .importDevicesAsync(inURI, outURI); 

called-であり、そのためには、SASコードのURIを提供する必要があります。コンテナのSAS URIを入手してください同等のコードが

以下です3210
static String GetContainerSasUri(CloudBlobContainer container) { 
    SharedAccessBlobPolicy sasConstraints = new SharedAccessBlobPolicy(); 
    sasConstraints.setSharedAccessExpiryTime(new Date(new Date().getTime() + TimeUnit.DAYS.toMillis(1))); 
    sasConstraints.setPermissions(EnumSet.of(SharedAccessBlobPermissions.READ, SharedAccessBlobPermissions.WRITE, 
      SharedAccessBlobPermissions.LIST, SharedAccessBlobPermissions.DELETE)); 

    BlobContainerPermissions permissions = new BlobContainerPermissions(); 
    permissions.setPublicAccess(BlobContainerPublicAccessType.CONTAINER); 
    permissions.getSharedAccessPolicies().put("testpolicy", sasConstraints); 
    try { 
     container.uploadPermissions(permissions); 
    } catch (StorageException e1) { 
     e1.printStackTrace(); 
    } 
    String sasContainerToken = null; 
    try { 
     sasContainerToken = container.generateSharedAccessSignature(sasConstraints, "testpolicy"); 
    } catch (InvalidKeyException e) { 
     e.printStackTrace(); 
    } catch (StorageException e) { 
     e.printStackTrace(); 
    } 
    System.out.println("URI " + container.getUri() +"?"+ sasContainerToken); 
    return container.getUri() + "?" + sasContainerToken; 
} 

ここで問題が発生しています。出力コンテナのために私は取得しています、次のエラー -

java.util.concurrent.ExecutionException: com.microsoft.azure.sdk.iot.service.exceptions.IotHubBadFormatException: Bad message format! ErrorCode:BlobContainerValidationError;Unauthorized to write to output blob container. Tracking ID:2dcb2efbf1e14e33ba60dc8415dc03c3-G:4-TimeStamp:11/08/2017 16:16:10 

私は悪いメッセージフォーマットエラーを取得していますなぜ知っている私を助けてください? SASキーの生成コードに問題がありますか、BLOBコンテナに書き込み権限がありませんか?

答えて

0

サービスレベルまたはアカウントレベルのSASを使用していますか?スローされたエラーは、サービスが承認されていないか、または指定されたBLOBコンテナに書き込む権限を委任されていることを示します。アカウントレベルのSASの設定方法とBLOBコンテナの読み込み、書き込み、削除の操作を委任する方法については、こちらのリソースをご覧ください。 https://docs.microsoft.com/en-us/rest/api/storageservices/Delegating-Access-with-a-Shared-Access-Signature?redirectedfrom=MSDN「スナップされたコンテンツ」:2015-04-05バージョンで導入されたアカウントレベルのSAS。アカウントSASは、1つまたは複数のストレージサービスのリソースへのアクセスを委任します。サービスSAS経由で利用可能な操作はすべて、アカウントSAS経由でも利用できます。さらに、アカウントSASでは、サービスプロパティの取得/設定やサービス統計の取得など、特定のサービスに適用される操作へのアクセスを委任できます。また、サービスSASで許可されていないBLOBコンテナ、テーブル、キュー、およびファイル共有の読み取り、書き込み、および削除操作へのアクセスを委任することもできます。アカウントSASの詳細については、アカウントSASの構築を参照してください。 "

関連する問題