【问题标题】:Uploading file to Azure BLOB using IoT Hub - Permissions使用 IoT 中心将文件上传到 Azure BLOB - 权限
【发布时间】:2017-08-16 08:17:37
【问题描述】:

我正在使用 Azure IoT 中心将文件从 Raspberry Pi 上传到 Azure Blob 存储,并使用 this microsoft tutorial 作为我的 C# 代码的基础,它运行良好。

查看方法UploadToBlobAsync()的Microsoft文档,“如果blob已经存在,它将被覆盖。”

我想知道是否有任何方法可以将设备的权限限制为在 Azure 门户中或通过 PowerShell 仅创建。我担心的是,如果有人访问设备的存储并获取设备 ID 和密钥,他们将有办法删除或覆盖该设备先前在存储容器中上传的文件。

作为一种解决方法,我可以让服务器端进程在收到文件后拾取文件并将它们移动到其他地方,但如果设备 ID/密钥被限制为仅创建那么我就不需要这个开销了。

【问题讨论】:

    标签: azure azure-iot-hub


    【解决方案1】:

    UploadToBlobAsync 方法(程序集 Microsoft.Azure.Devices.Client.UWP)是用于将 Blob 上传到 Azure 存储容器的 REST API 序列调用的包装器。 处理以下序列:

    1. 对 Azure IoT 中心的 REST API 调用以获取上传 blob 的参考,请参见以下屏幕 sn-p:

    如上图所示,已经为这个操作生成了sasToken,用于读/写。

    1. 一旦设备收到上述响应,就可以调用 REST API PUT blob。 这是我的建议。设备可以调用 REST API 获取 blob 的元数据,见如下画面 sn-p:

    根据上述结果,可以跳过此序列,也可以继续使用 REST API PUT 实际上传 Blob。

    1. 这是序列的最后一步(非常重要)。设备需要向 Azure IoT 中心发送通知,其中包含上传序列的状态。以下屏幕 sn-p 显示了此 REST API 调用:

    好吧,如您所见,上面的步骤 #2 可以决定跳过或覆盖上传 blob 过程。

    【讨论】:

    • 感谢 UploadToBlobAsync() 方法的详细分解。如果我理解正确,客户端会调用 Azure 以获取共享访问令牌,然后使用该令牌上传文件。在这种情况下,为了防止 BLOB 被覆盖,如果 BLOB 已经存在于存储中,我需要一种方法来防止步骤 1 发出令牌。对吗?
    • Step1 是向 Azure IoT 中心发出的设备请求,用于启动 AMQP 状态机以上传进程通知。每个设备最多可以同时拥有 10 个状态机。上传过程(状态机)的完成是由Step3或到期TTL时间(48小时)。换句话说,必须调用步骤 1 和步骤 3。步骤 2 是可选的,在此步骤中设备可以检查文件是否已存在。根据 step2 的结果,可以在 step 3 中为通知后端逻辑发送通知状态。
    • 这里的问题是我不担心我自己的应用程序会覆盖 BLOB 容器中的文件,但如果其他人从我设备上的存储中获取设备 ID 和密钥,他们会这样做。因此,任何解决方案都需要在 Azure 门户中配置,而不是在应用程序代码中。
    • 这是一个安全问题。您的设备应包含用于解密设备密钥的 TPM(可信平台模块),这是设备端(面向设备的端点)的保护。另一方面(面向服务的端点)更复杂,基本上谁可以访问 Azure IoT 中心就可以完成这一切。无论如何,如果您的设备是通过 MQTT 协议连接的,我建议您使用设备孪生功能创建带有通知的私人上传过程。它很简单,由事件驱动,并且可以实时动态完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 2018-08-06
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多