2017-08-16 67 views
1

我使用Azure IoT集線器將文件從Raspberry Pi上傳到Azure Blob存儲,使用this microsoft tutorial作爲我的C#代碼的基礎,並且工作正常。使用IoT Hub將文件上傳到Azure BLOB - 權限

查看有關方法的Microsoft文檔UploadToBlobAsync()「如果blob已經存在,它將被覆蓋。」

我想知道是否有任何方法來限制設備的權限,以在Azure門戶或通過PowerShell創建。我擔心的是,如果有人訪問設備的存儲並獲取設備ID和密鑰,他們將有辦法刪除或覆蓋此設備先前在存儲容器中上傳的文件。

作爲一個解決方案我可能有一個服務器端進程接收文件,一旦他們已收到並將他們移動到其他地方,但如果設備ID /鍵被限制爲只創建那麼我wouldn'噸需要這個開銷。

回答

0

方法UploadToBlobAsync(程序集Microsoft.Azure.Devices.Client.UWP)是將blob上傳到Azure存儲容器的REST API序列調用的包裝。 以下序列進行處理:

  1. REST API調用天青的IoT集線器以獲得參考上傳團塊,請參閱下列屏幕片段:

ReferenceUploadFile

正如你可以看到在上面的圖片中,對於該操作的sasToken已經被生成用於讀取/寫入。

  1. 設備收到上述響應後,可以調用REST API PUT blob。 這是我的建議。該裝置可以調用REST API獲取斑點的元數據,請參見以下屏幕片段:

UploadFile-GET

基於上述結果,該序列可以是跳過或繼續使用該實際上傳團塊REST API PUT。

  1. 這是序列的最後一步(非常重要)。設備需要以上傳順序的狀態向Azure IoT Hub發送通知。下面的屏幕片段顯示了這個REST API調用:

NotifyUploadFile

那麼,你可以看到上面的步驟#2可以決定對跳躍或覆蓋上傳斑點處理。

+0

感謝UploadToBlobAsync()方法的詳細分解。如果我理解正確,客戶端會向Azure撥打一個共享訪問令牌,然後用它來上傳文件。既然如此,爲了防止BLOB被覆蓋,我需要一種方法來防止步驟1發出一個令牌,如果BLOB已經存在於存儲器中的話。正確? – Pete

+0

Step1是向Azure IoT Hub發送啓動AMQP狀態機以上傳進程通知的設備請求。每個設備可以同時擁有最多10個狀態機。上傳過程(狀態機)的完成是通過步驟3或到期TTL時間(48小時)完成的。換句話說,必須調用步驟1和步驟3。步驟2是可選的,在此步驟中設備可以檢查文件是否已經存在。基於步驟2的結果,可以在步驟3中發送通知狀態以用於通知後端邏輯。 –

+0

這裏的問題是,我並不關心我自己的應用程序是否覆蓋BLOB容器中的文件,但其他人如果從我的設備上的存儲設備中獲取設備ID和密鑰,則會這樣做。因此,任何解決方案都需要在Azure門戶中配置,而不是在應用程序代碼中配置。 – Pete