你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在 IoT 中心配置文件上传使已连接设备能够将文件上传到 Azure 存储帐户。 本文介绍如何使用 Azure 门户、Azure CLI 和 Azure PowerShell 在 IoT 中心配置文件上传。
若要使用 IoT 中心的文件上传功能,必须先将 Azure 存储帐户和 Blob 容器与 IoT 中心关联。 IoT 中心会自动生成对此 Blob 容器具有写入权限的 SAS URI,以供设备上传文件时使用。 除了存储帐户和 blob 容器之外,还可以设置 SAS URI 的生存时间以及 IoT 中心对 Azure 存储使用的身份验证类型。 还可以配置可由 IoT 中心传送给后端服务的可选文件上传通知的设置。
Prerequisites
在 Azure 门户中配置 IoT 中心
在 Azure 门户中,导航到 IoT 中心,并选择“文件上传”以显示文件上传属性。 然后,在“存储容器设置”下,选择“Azure 存储容器”。
在当前订阅中选择 Azure 存储帐户和 Blob 容器,以便与 IoT 中心关联。 如有必要,可以在“存储帐户”窗格上创建 Azure 存储帐户,并在“容器”窗格上创建 blob 容器。
选择 Azure 存储帐户和 blob 容器后,配置其余文件上传属性。
接收已上传文件的通知:通过切换来启用或禁用文件上传通知。
SAS TTL:此设置是 IoT 中心返回给设备的 SAS URI 生存时间。 默认设置为一小时,但可以使用滑块自定义为其他值。
文件通知设置默认 TTL:文件上传通知到期前的生存时间。 默认设置为一天,但可以使用滑块自定义为其他值。
文件通知最大传送数:IoT 中心将尝试传送文件上传通知的次数。 默认设置为 10,但可以使用滑块自定义为其他值。
“身份验证类型”:默认情况下,Azure IoT 中心使用基于密钥的身份验证来与 Azure 存储进行连接和授权。 还可以配置用户分配的或系统分配的托管标识,以对 Azure IoT 中心 向 Azure 存储进行身份验证。 托管标识在 Microsoft Entra ID 中以安全方式为 Azure 服务提供了一个自动托管标识。 若要了解如何配置托管标识,请参阅 IoT 中心对托管标识的支持。 在 Azure 存储帐户和 IoT 中心配置一个或多个托管标识后,可以选择一个托管标识,使用“系统分配”或“用户分配”的按钮向 Azure 存储进行身份验证。
注意
身份验证类型设置配置 IoT 中心如何向 Azure 存储帐户进行身份验证。 设备始终使用从 IoT 中心获取的 SAS URI 向 Azure 存储进行身份验证。
选择“保存”以保存设置。 请务必检查确认是否成功完成。 某些选择(如“身份验证类型”)仅在保存设置后进行验证。
Prerequisites
有效的 Azure 帐户。 如果没有帐户,只需花费几分钟就能创建一个免费帐户。
Azure 订阅中的 IoT 中心。 如果还没有中心,则可以按照创建 IoT 中心中的步骤进行操作。
包含 Blob 容器的 Azure 存储帐户。 如果没有 Azure 存储帐户,可以使用 Azure CLI 创建一个。 有关详细信息,请参阅创建存储帐户。
在 Azure Cloud Shell 中使用 Bash 环境。 有关详细信息,请参阅 Azure Cloud Shell 入门。
如需在本地运行 CLI 参考命令,请安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI。
如果使用的是本地安装,请使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅 使用 Azure CLI 向 Azure 进行身份验证。
出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展的详细信息,请参阅 使用和管理 Azure CLI 中的扩展。
运行az version命令,以查看已安装的版本和依赖库。 若要升级到最新版本,请运行az upgrade。
登录并设置 Azure 帐户
登录到 Azure 帐户,并选择订阅。 如果使用的是 Azure Cloud Shell,则应已登录;但是,如果有多个订阅,则仍可能需要选择 Azure 订阅。
在命令提示符处,运行 登录命令:
az login按照说明使用代码进行身份验证,并通过 Web 浏览器登录 Azure 帐户。
如果有多个 Azure 订阅,登录 Azure 可获得与凭据关联的所有 Azure 帐户的访问权限。 使用以下命令列出可供使用的 Azure 帐户:
az account list使用以下命令,选择想要用于运行命令以创建 IoT 中心的订阅。 可使用上一命令输出中的订阅名称或 ID:
az account set --subscription {your subscription name or id}
配置存储帐户访问权限
以下步骤假定你使用 Resource Manager 部署模型而不是 经典 部署模型创建了存储帐户。
若要从设备配置文件上传,需要向 IoT 中心授予对 Azure 存储帐户的访问权限。 存储帐户必须与您的 IoT 中心位于同一订阅中。 还需要存储帐户中 Blob 容器的名称。
可以使用基于密钥的身份验证或基于标识的身份验证来提供访问权限。 Microsoft建议使用基于标识的身份验证作为更安全的选项。
基于密钥的身份验证
对于基于密钥的身份验证,请提供存储帐户的连接字符串。 使用 az storage account show-connection-string 命令检索存储帐户密钥。
记下 connectionString 值。 连接字符串类似于以下输出:
{
"connectionString": "DefaultEndpointsProtocol=https;EndpointSuffix=core.windows.net;AccountName={your_storage_account_name};AccountKey={your_storage_account_key}"
}
基于标识的身份验证
可以使用系统分配的托管标识或用户分配的托管标识进行基于标识的身份验证。 有关详细信息,请参阅 IoT 中心对托管标识的支持。
使用 az role assignment create 命令将角色分配给托管身份。 有关详细信息,请参阅分配用于访问 Blob 数据的 Azure 角色。
配置 IoT 中心
现在可以配置 IoT 中心,以便能够使用存储帐户详细信息将 文件上传到 IoT 中心 。
配置需要以下值:
存储容器:当前 Azure 订阅中 Azure 存储帐户中的 Blob 容器,用于与 IoT 中心关联。 在上一部分中检索了必要的存储帐户信息。 IoT 中心会自动生成对此 Blob 容器具有写入权限的 SAS URI,以供设备上传文件时使用。
接收上传文件的通知:启用或禁用文件上传通知。
SAS TTL:此设置是 IoT 中心返回给设备的 SAS URI 生存时间。 默认情况下设置为 1 小时。
文件通知设置的默认生存时间 (TTL):文件上传通知在过期前的有效存续时间。 默认情况下设置为一天。
文件通知最大传送数:IoT 中心将尝试传送文件上传通知的次数。 默认情况下设置为 10。
文件通知锁定持续时间:文件通知队列的锁定持续时间。 默认情况下设置为 60 秒。
身份验证类型:要用于 Azure 存储的 IoT 中心的身份验证类型。 此设置确定 IoT 中心如何使用 Azure 存储进行身份验证和授权。 默认值为基于密钥的身份验证;但是,建议使用系统分配的或用户分配的托管标识身份验证选项。 托管标识在 Microsoft Entra ID 中以安全方式为 Azure 服务提供了一个自动托管标识。
注意
身份验证类型设置配置 IoT 中心如何向 Azure 存储帐户进行身份验证。 设备始终使用从 IoT 中心获取的 SAS URI 向 Azure 存储进行身份验证。
以下命令演示如何在 IoT 中心配置文件上传设置。 为了清楚起见,这些命令单独显示,但通常,你将发出一个命令,其中包含方案的所有必需参数。 包含命令行中的引号。 不要包含大括号。 有关每个参数的更多详细信息,请参阅 az iot hub update 命令的 Azure CLI 文档。
以下命令配置存储帐户和 Blob 容器。
az iot hub update --name {your iot hub name} \
--fileupload-storage-connectionstring "{your storage account connection string}" \
--fileupload-storage-container-name "{your container name}"
以下命令将 SAS URI 的生存时间设置为默认值(一小时)。
az iot hub update --name {your iot hub name} \
--fileupload-sas-ttl 1
以下命令启用文件通知并将文件通知属性设置为其默认值。 (文件上传通知的生存时间设为一小时,锁定持续时间设为 60 秒。)
az iot hub update --name {your iot hub name} \
--fileupload-notifications true \
--fileupload-notification-max-delivery-count 10 \
--fileupload-notification-ttl 1 \
--fileupload-notification-lock-duration 60
以下命令配置基于密钥的身份验证:
az iot hub update --name {your iot hub name} \
--fileupload-storage-auth-type keyBased
以下命令使用 IoT 中心的系统分配的托管标识配置身份验证。 在运行此命令之前,需要为 IoT 中心启用系统分配的托管标识,并在 Azure 存储帐户上向其授予正确的基于角色的访问控制角色。 若要了解如何作,请参阅 IoT 中心对托管标识的支持。
az iot hub update --name {your iot hub name} \
--fileupload-storage-auth-type identityBased \
--fileupload-storage-identity [system]
以下命令检索 IoT 中心上配置的用户分配的托管标识,并使用其中一个标识配置身份验证。 必须先在 IoT 中心配置用户分配的托管标识,并在 Azure 存储帐户上授予适当的基于角色的访问控制角色,然后才能使用用户分配的托管标识进行身份验证。 有关更多详细信息和步骤,请参阅 IoT 中心对托管标识的支持。
若要在 IoT 中心查询用户分配的托管标识,请使用 az iot hub identity show 命令。
az iot hub identity show --name {your iot hub name} --query userAssignedIdentities
该命令返回 IoT 中心上配置的用户分配托管标识的集合。 以下输出显示了一个集合,其中包含单个用户分配的托管标识。
{
"/subscriptions/{your subscription ID}/resourcegroups/{your resource group}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{your user-assigned managed identity name}":
{
"clientId": "<client ID GUID>",
"principalId": "<principal ID GUID>"
}
}
以下命令将身份验证配置为使用上述用户分配的标识。
az iot hub update --name {your iot hub name} \
--fileupload-storage-auth-type identityBased \
--fileupload-storage-identity "/subscriptions/{your subscription ID}/resourcegroups/{your resource group}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{your user-assigned managed identity name}"
可以使用以下命令查看 IoT 中心上的设置:
az iot hub show --name {your iot hub name}
若要仅查看文件上传设置,请使用以下命令:
az iot hub show --name {your iot hub name}
--query '[properties.storageEndpoints, properties.enableFileUploadNotifications, properties.messagingEndpoints.fileNotifications]'
在大多数情况下,在 Azure CLI 命令中使用命名参数是最容易的;但是,还可以使用 --set 参数配置文件上传设置。 以下命令可以帮助你了解如何操作。
az iot hub update --name {your iot hub name} \
--set properties.storageEndpoints.'$default'.connectionString="{your storage account connection string}"
az iot hub update --name {your iot hub name} \
--set properties.storageEndpoints.'$default'.containerName="{your storage container name}"
az iot hub update --name {your iot hub name} \
--set properties.storageEndpoints.'$default'.sasTtlAsIso8601=PT1H0M0S
az iot hub update --name {your iot hub name} \
--set properties.enableFileUploadNotifications=true
az iot hub update --name {your iot hub name} \
--set properties.messagingEndpoints.fileNotifications.maxDeliveryCount=10
az iot hub update --name {your iot hub name} \
--set properties.messagingEndpoints.fileNotifications.ttlAsIso8601=PT1H0M0S
Prerequisites
有效的 Azure 帐户。 如果没有帐户,只需花费几分钟就能创建一个免费帐户。
Azure IoT 中心。 如果没有 IoT 中心,可以使用 New-AzIoTHub cmdlet 创建一个或按照 “创建 IoT 中心”中的步骤作。
一个 Azure 存储帐户。 如果没有 Azure 存储帐户,可以使用 Azure 存储 PowerShell cmdlet 创建一个,或使用门户 创建存储帐户。
在 Azure Cloud Shell 中使用 PowerShell 环境。
如果需要,请在本地 安装 PowerShell。
- 安装 Azure Az PowerShell 模块。 (模块默认安装在 Azure Cloud Shell PowerShell 环境中。
- 使用 Connect-AzAccount 命令登录到 PowerShell。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅 使用 Azure PowerShell 登录。
登录并设置 Azure 帐户
登录到 Azure 帐户,并选择订阅。 如果使用的是 Azure Cloud Shell,则应已登录;但是,如果有多个订阅,则仍可能需要选择 Azure 订阅。
在 PowerShell 提示符下,运行 Connect-AzAccount cmdlet:
Connect-AzAccount如果有多个 Azure 订阅,则登录到 Azure 会授予你对与凭据关联的所有 Azure 订阅的访问权限。 使用 Get-AzSubscription 命令列出可供使用的 Azure 订阅:
Get-AzSubscription使用以下命令选择您要用于运行管理您的 IoT 中心命令的订阅。 可使用上一命令输出中的订阅名称或 ID:
Select-AzSubscription ` -Name "{your subscription name}"注意
Select-AzSubscription 命令是 Select-AzContext 的别名,可用于使用 Get-AzSubscription 命令返回的订阅名称(名称)或订阅 ID(ID),而不是 Select-AzContext 命令所需的更复杂的上下文名称。
检索存储帐户详细信息
以下步骤假定你使用 Resource Manager 部署模型而不是 经典 部署模型创建了存储帐户。
要配置从设备上传文件,您需要获取 Azure 存储帐户的连接字符串。 存储帐户必须与您的 IoT 中心位于同一订阅中。 还需要存储帐户中 Blob 容器的名称。 使用 Get-AzStorageAccountKey 命令检索存储帐户密钥:
Get-AzStorageAccountKey `
-Name {your storage account name} `
-ResourceGroupName {your storage account resource group}
记下 key1 存储帐户密钥值。 在以下步骤中需要用到它。
可以将现有 Blob 容器用于文件上传,也可以创建新的 Blob 容器:
若要列出存储帐户中的现有 Blob 容器,请使用 New-AzStorageContext 和 Get-AzStorageContainer 命令:
$ctx = New-AzStorageContext ` -StorageAccountName {your storage account name} ` -StorageAccountKey {your storage account key} Get-AzStorageContainer -Context $ctx若要在存储帐户中创建 Blob 容器,请使用 New-AzStorageContext 和 New-AzStorageContainer 命令:
$ctx = New-AzStorageContext ` -StorageAccountName {your storage account name} ` -StorageAccountKey {your storage account key} New-AzStorageContainer ` -Name {your new container name} ` -Permission Off ` -Context $ctx
配置 IoT 中心
现在可以将 IoT 中心配置为使用存储帐户详细信息将 文件上传到 IoT 中心 。
配置需要以下值:
存储容器:当前 Azure 订阅中 Azure 存储帐户中的 Blob 容器,用于与 IoT 中心关联。 在上一部分中检索了必要的存储帐户信息。 IoT 中心会自动生成对此 Blob 容器具有写入权限的 SAS URI,以供设备上传文件时使用。
接收上传文件的通知:启用或禁用文件上传通知。
SAS TTL:此设置是 IoT 中心返回给设备的 SAS URI 生存时间。 默认情况下设置为 1 小时。
文件通知设置默认 TTL:文件上传通知到期前的生存时间。 默认情况下设置为一天。
文件通知最大传送数:IoT 中心将尝试传送文件上传通知的次数。 默认情况下设置为 10。
使用 Set-AzIotHub 命令在 IoT 中心配置文件上传设置:
Set-AzIotHub `
-ResourceGroupName "{your iot hub resource group}" `
-Name "{your iot hub name}" `
-FileUploadNotificationTtl "01:00:00" `
-FileUploadSasUriTtl "01:00:00" `
-EnableFileUploadNotifications $true `
-FileUploadStorageConnectionString "DefaultEndpointsProtocol=https;AccountName={your storage account name};AccountKey={your storage account key};EndpointSuffix=core.windows.net" `
-FileUploadContainerName "{your blob container name}" `
-FileUploadNotificationMaxDeliveryCount 10
注意
默认情况下,IoT 中心使用连接字符串中的帐户密钥通过 Azure 存储进行身份验证。 也可以使用系统分配的托管标识或用户分配的托管标识进行身份验证。 托管标识在 Microsoft Entra ID 中以安全方式为 Azure 服务提供了一个自动托管标识。 若要了解详细信息,请参阅 IoT 中心对托管标识的支持。 目前 ,Set-AzIotHub 命令上没有用于设置身份验证类型的参数。