Important
此頁面包含使用 Kubernetes 部署資訊清單來管理 Azure IoT 操作元件的指示,其處於預覽狀態。 此功能以數項限制提供,不應用於生產工作負載。
請參閱 Microsoft Azure 預覽版增補使用條款,以了解適用於 Azure 功能 (搶鮮版 (Beta)、預覽版,或尚未正式發行的版本) 的法律條款。
MQTT 資料流程端點會用於 MQTT 來源和目的地。 您可以設定端點設定、傳輸層安全性 (TLS)、驗證和其他設定。
Prerequisites
Azure IoT 操作的本機 MQTT 代理程式
Azure IoT 操作會提供可與資料流程搭配使用的內建本機 MQTT 代理程式 (部分機器翻譯)。 您可以使用 MQTT 代理程式作為來源以接收來自其他系統的訊息,或作為目的地以將訊息傳送至其他系統。
預設端點
當您部署 Azure IoT 操作時,系統會使用預設設定來建立名為「default」的 MQTT 代理程式資料流程端點。 您可以使用此端點作為資料流程的來源或目的地。
預設端點會使用下列設定:
Caution
請勿刪除預設端點。 如果您刪除預設端點,則必須使用相同的設定重新建立此端點。
若要檢視或編輯預設的 MQTT 代理程式端點設定:
在操作體驗中,選取 [資料流程端點]。
選取 [預設] 端點以檢視或編輯設定。
使用 az iot ops dataflow endpoint apply 命令來建立或變更預設 MQTT 訊息代理程式數據流端點。
az iot ops dataflow endpoint apply --resource-group <ResourceGroupName> --instance <AioInstanceName> --name default --config-file <ConfigFilePathAndName>
參數 --config-file 是 JSON 組態檔的路徑和檔名,其中包含資源屬性。
在此範例中,假設名為 default-mqtt-endpoint.json 的組態檔,其中包含儲存在使用者主目錄中的下列內容:
{
"endpointType": "Mqtt",
"mqttSettings": {
"host": "aio-broker:18883",
"authentication": {
"method": "ServiceAccountToken",
"serviceAccountTokenSettings": {
"audience": "aio-internal"
}
},
"tls": {
"mode": "Enabled",
"trustedCaCertificateConfigMapRef": "azure-iot-operations-aio-ca-trust-bundle"
}
}
}
以下是建立或更新預設 MQTT 訊息代理程式資料流端點的範例命令:
az iot ops dataflow endpoint apply --resource-group myResourceGroup --instance myAioInstance --name default --config-file ~/default-mqtt-endpoint.json
若要編輯預設端點,請使用下列內容建立 Bicep .bicep 檔案。 視需要更新設定,並將 <AIO_INSTANCE_NAME> 等預留位置值取代為您自己的值。
param aioInstanceName string = '<AIO_INSTANCE_NAME>'
param customLocationName string = '<CUSTOM_LOCATION_NAME>'
resource aioInstance 'Microsoft.IoTOperations/instances@2024-11-01' existing = {
name: aioInstanceName
}
resource customLocation 'Microsoft.ExtendedLocation/customLocations@2021-08-31-preview' existing = {
name: customLocationName
}
resource defaultMqttBrokerDataflowEndpoint 'Microsoft.IoTOperations/instances/dataflowEndpoints@2024-11-01' = {
parent: aioInstance
name: 'default'
extendedLocation: {
name: customLocation.id
type: 'CustomLocation'
}
properties: {
endpointType: 'Mqtt'
mqttSettings: {
host: 'aio-broker:18883'
authentication: {
method: 'ServiceAccountToken'
serviceAccountTokenSettings: {
audience: 'aio-internal'
}
}
tls: {
mode: 'Enabled'
trustedCaCertificateConfigMapRef: 'azure-iot-operations-aio-ca-trust-bundle'
}
}
}
}
然後,透過 Azure CLI 進行部署。
az deployment group create --resource-group <RESOURCE_GROUP> --template-file <FILE>.bicep
您可以在 Kubernetes 叢集中檢視預設的 MQTT 代理程式端點設定。 若要檢視設定,請使用下列命令:
kubectl get dataflowendpoint default -n azure-iot-operations -o yaml
建立新的端點
您也可以使用自訂設定來建立新的本機 MQTT 代理程式端點。 例如,您可以使用不同的連接埠、驗證或授權設定來建立新的 MQTT 代理程式端點。 不過,即使您建立新的端點,仍必須一律使用預設端點作為每個資料流程中的來源或目的地。
在操作體驗中,選取 [資料流程端點]。
在 [建立新的資料流程端點] 下,選取 [Azure IoT 操作本機 MQTT]>[新增]。
輸入端點的下列設定:
| Setting |
Description |
| Name |
資料流程端點的名稱。 |
| Host |
MQTT 代理程式的主機名稱和連接埠。 使用此格式:<hostname>:<port> |
| 驗證方法 |
用於驗證的方法。 選擇 [服務帳戶權杖] 或 [X509 憑證] |
| 服務對象 |
服務帳戶權杖的對象。 如果使用 [服務帳戶權杖],則為必要設定。 |
| X509 用戶端憑證 |
用於驗證的 X.509 用戶端憑證。 如果使用 [X509 憑證],則為必要設定。 您可以上傳業界標準的多行 X509 憑證,以改善裝置驗證管理、安全性和彈性。 |
| X509 用戶端金鑰 |
對應至 X.509 用戶端憑證的私密金鑰。 如果使用 [X509 憑證],則為必要設定。 |
| X509 中繼憑證 |
X.509 用戶端憑證鏈結的中繼憑證。 如果使用 [X509 憑證],則為必要設定。 |
建立或取代
使用 az iot ops dataflow endpoint create fabric-onelake 命令來建立或取代本機 MQTT 訊息代理程式數據流端點。
az iot ops dataflow endpoint create local-mqtt --resource-group <ResourceGroupName> --instance <AioInstanceName> --name <EndpointName> --port <Port> --host <Host>
此命令會建立具有預設設定的本機 MQTT 訊息代理程式端點。 您可以視需要指定其他選項。
以下是建立或取代名為 local-mqtt-endpoint的本機 MQTT 訊息代理程式資料流端點的範例命令:
az iot ops dataflow endpoint create local-mqtt --resource-group myResourceGroup --instance myAioInstance --name local-mqtt-endpoint --port 1883 --host aio-broker --auth-type ServiceAccountToken --audience aio-internal
建立或變更
使用 az iot ops dataflow endpoint apply 命令來建立或變更本機 MQTT 訊息代理程式數據流端點。
az iot ops dataflow endpoint apply --resource-group <ResourceGroupName> --instance <AioInstanceName> --name <EndpointName> --config-file <ConfigFilePathAndName>
參數 --config-file 是 JSON 組態檔的路徑和檔名,其中包含資源屬性。
在此範例中,假設名為 local-mqtt-endpoint.json 的組態檔,其中包含儲存在使用者主目錄中的下列內容:
{
"endpointType": "Mqtt",
"mqttSettings": {
"host": "aio-broker:1883",
"authentication": {
"method": "ServiceAccountToken",
"serviceAccountTokenSettings": {
"audience": "aio-internal"
}
},
"tls": {
"mode": "Enabled",
"trustedCaCertificateConfigMapRef": "azure-iot-operations-aio-ca-trust-bundle"
}
}
}
以下是建立或更新名為 之 local-mqtt-endpoint本機 MQTT 訊息代理程式數據流端點的範例命令:
az iot ops dataflow endpoint apply --resource-group myResourceGroup --instance myAioInstance --name local-mqtt-endpoint --config-file ~/local-mqtt-endpoint.json
param aioInstanceName string = '<AIO_INSTANCE_NAME>'
param customLocationName string = '<CUSTOM_LOCATION_NAME>'
param endpointName string = '<ENDPOINT_NAME>'
param mqttBrokerHostname string = '<HOSTNAME>:<PORT>'
param trustedCA string = '<TRUST_BUNDLE>'
param serviceAccountAudience string = '<SA_AUDIENCE>'
resource aioInstance 'Microsoft.IoTOperations/instances@2024-11-01' existing = {
name: aioInstanceName
}
resource customLocation 'Microsoft.ExtendedLocation/customLocations@2021-08-31-preview' existing = {
name: customLocationName
}
resource MqttBrokerDataflowEndpoint 'Microsoft.IoTOperations/instances/dataflowEndpoints@2024-11-01' = {
parent: aioInstance
name: endpointName
extendedLocation: {
name: customLocation.id
type: 'CustomLocation'
}
properties: {
endpointType: 'Mqtt'
mqttSettings: {
host: mqttBrokerHostname
authentication: {
method: 'ServiceAccountToken'
serviceAccountTokenSettings: {
audience: serviceAccountAudience
}
}
tls: {
mode: 'Enabled'
trustedCaCertificateConfigMapRef: trustedCA
}
}
}
}
apiVersion: connectivity.iotoperations.azure.com/v1
kind: DataflowEndpoint
metadata:
name: <ENDPOINT_NAME>
namespace: azure-iot-operations
spec:
endpointType: Mqtt
mqttSettings:
host: "<HOSTNAME>:<PORT>"
tls:
mode: Enabled
trustedCaCertificateConfigMapRef: <TRUST_BUNDLE>
authentication:
method: ServiceAccountToken
serviceAccountTokenSettings:
audience: <SA_AUDIENCE>
Azure 事件方格
Azure 事件方格會提供完全受控的 MQTT 代理程式 (部分機器翻譯),此代理程式可與 Azure IoT 操作資料流程搭配運作。 若要設定 Azure 事件方格的 MQTT 代理程式端點,建議您使用受控識別進行驗證。
如果您尚未建立 Azure 事件方格命名空間 (部分機器翻譯),請先進行此作業。
啟用 MQTT
擁有 Azure 事件方格命名空間後,請移至 [設定] 並檢查:
-
啟用 MQTT:選取此核取方塊。
-
每個驗證名稱的用戶端工作階段數量上限:設定為 [3] 或更大的數字。
用戶端工作階段數量上限選項很重要,其可讓資料流程擴大 (部分機器翻譯),並保持連線能力。 若要深入了解,請參閱 Azure 事件方格 MQTT 多工作階段支援 (部分機器翻譯)。
建立主題空間
為了讓資料流程針對 Azure 事件方格的 MQTT 代理程式傳送或接收訊息,您必須在 Azure 事件方格的命名空間中建立至少一個主題空間。 您可以藉由選取 [主題空間]>[新增主題空間],在 Azure 事件方格的命名空間中建立主題空間。
若要快速開始使用以及為了進行測試,您可以使用萬用字元主題 # 作為主題範本來建立主題空間。
將權限指派給受控識別
若要設定 Azure 事件方格 MQTT 代理程式的資料流程端點,建議您使用使用者指派或系統指派的受控識別。 這種方法是安全的,而且不需要手動管理認證。
主題空間建立好之後,您必須指派角色給 Azure IoT 操作受控識別,以授與針對 Azure 事件方格 MQTT 代理程式傳送或接收訊息的權限。
如果使用系統指派的受控識別,請在 Azure 入口網站中移至您的 Azure IoT 操作執行個體,然後選取 [概觀]。 複製 Azure IoT 操作Arc 延伸模組之後所列的延伸模組名稱。 例如,azure-iot-operations-xxxx7。 使用 Azure IoT 操作 Arc 延伸模組的相同名稱,即可找到系統指派的受控識別。
然後,移至 Azure 事件方格命名空間 >[存取控制 (IAM)]>[新增角色指派]。
- 在 [角色] 索引標籤上,選取適當的角色,例如
EventGrid TopicSpaces Publisher 或 EventGrid TopicSpaces Subscriber。 這會為受控識別提供傳送或接收命名空間中所有主題空間訊息所需的權限。 若要深入了解,請參閱用來發佈或訂閱 MQTT 訊息的 Microsoft Entra JWT 驗證和 Azure RBAC 授權 (部分機器翻譯)。
- 在 [成員] 索引標籤上:
- 如果使用系統指派的受控識別,對於 [存取權指派對象為],請選取 [使用者、群組或服務主體] 選項,然後選取 [+ 選取成員] 並搜尋 Azure IoT 操作 Arc 延伸模組的名稱。
- 如果使用使用者指派的受控識別,對於 [存取權指派對象為],請選取 [受控識別] 選項,然後選取 [+ 選取成員] 並搜尋針對雲端連線設定的使用者指派的受控識別 (部分機器翻譯)。
或者,您也可以在主題空間層級指派角色。 移至主題空間 >[存取控制 (IAM)]>[新增角色指派]。 指派具有 EventGrid TopicSpaces Publisher 或 EventGrid TopicSpaces Subscriber 等適當角色的受控識別。 這會為受控識別提供傳送或接收特定主題空間訊息所需的權限。
Note
具有相同資料流程設定的第二個部署將無法連線,而且會導致授權錯誤。 若要解決此問題,請變更第二個設定中的資料流程名稱。 只有在第二個部署與第一個部署同時發生或在第一個部署之後不久發生時,才會發生此問題,並且這個問題會持續到 MQTT 工作階段到期為止。
建立 Azure 事件方格 MQTT 代理程式的資料流程端點
Azure 事件方格的命名空間設定好之後,就可以為 Azure 事件方格的 MQTT 代理程式建立資料流程端點。
在 [操作體驗] 中,選取 [資料流程端點] 索引標籤。
在 [建立新的資料流程端點] 下,選取 [Azure 事件方格 MQTT]>[新增]。
輸入端點的下列設定:
| Setting |
Description |
| Name |
資料流程端點的名稱。 |
| Host |
Azure 事件方格 MQTT 代理程式的主機名稱和連接埠。 使用此格式:<NAMESPACE>.<REGION>-1.ts.eventgrid.azure.net:8883 |
| 驗證方法 |
用於驗證的方法。 建議您選擇 [系統指派的受控識別] 或 [使用者指派的受控識別]。 |
選取 [套用] 以佈建端點。
建立或取代
使用 az iot ops dataflow endpoint create eventgrid 命令來建立或取代 Azure 事件方格 MQTT 數據流端點。
az iot ops dataflow endpoint create eventgrid --resource-group <ResourceGroupName> --instance <AioInstanceName> --name <EndpointName> --host <Namespace>.<Region>-1.ts.eventgrid.azure.net --port 9092
此命令會建立具有預設設定和系統指派受控識別驗證的事件方格 MQTT 訊息代理程式端點。 您可以視需要指定其他選項。
以下是建立或取代名為 event-grid-endpoint的事件方格 MQTT 訊息代理程式資料流端點的範例命令:
az iot ops dataflow endpoint create eventgrid --resource-group myResourceGroup --instance myAioInstance --name event-grid-endpoint --host mynamespace.eastus-1.ts.eventgrid.azure.net --port 9092
建立或變更
使用 az iot ops dataflow endpoint apply 命令來建立或變更 Azure 事件方格 MQTT 訊息代理程序數據流端點。
az iot ops dataflow endpoint apply --resource-group <ResourceGroupName> --instance <AioInstanceName> --name <EndpointName> --config-file <ConfigFilePathAndName>
參數 --config-file 是 JSON 組態檔的路徑和檔名,其中包含資源屬性。
在此範例中,假設名為 event-grid-endpoint.json 的組態檔,其中包含儲存在使用者主目錄中的下列內容:
{
"endpointType": "Mqtt",
"mqttSettings": {
"host": "mynamespace.eastus-1.ts.eventgrid.azure.net:9092",
"authentication": {
"method": "SystemAssignedManagedIdentity",
"systemAssignedManagedIdentitySettings": {}
},
"tls": {
"mode": "Enabled"
}
}
}
以下是建立或更新名為 event-grid-endpoint的事件方格 MQTT 訊息代理程式資料流端點的範例命令:
az iot ops dataflow endpoint apply --resource-group myResourceGroup --instance myAioInstance --name event-grid-endpoint --config-file ~/event-grid-endpoint.json
使用下列內容建立 Bicep .bicep 檔案。
param aioInstanceName string = '<AIO_INSTANCE_NAME>'
param customLocationName string = '<CUSTOM_LOCATION_NAME>'
param endpointName string = '<ENDPOINT_NAME>'
param eventGridHostName string = '<NAMESPACE>.<REGION>-1.ts.eventgrid.azure.net:8883'
resource aioInstance 'Microsoft.IoTOperations/instances@2024-11-01' existing = {
name: aioInstanceName
}
resource customLocation 'Microsoft.ExtendedLocation/customLocations@2021-08-31-preview' existing = {
name: customLocationName
}
resource remoteMqttBrokerDataflowEndpoint 'Microsoft.IoTOperations/instances/dataflowEndpoints@2024-11-01' = {
parent: aioInstance
name: endpointName
extendedLocation: {
name: customLocation.id
type: 'CustomLocation'
}
properties: {
endpointType: 'Mqtt'
mqttSettings: {
host: eventGridHostName
authentication: {
// See available authentication methods section for method types
// method: <METHOD_TYPE>
}
tls: {
mode: 'Enabled'
}
}
}
}
然後,透過 Azure CLI 進行部署。
az deployment group create --resource-group <RESOURCE_GROUP> --template-file <FILE>.bicep
使用下列內容建立 Kubernetes 資訊清單 .yaml 檔案。
apiVersion: connectivity.iotoperations.azure.com/v1
kind: DataflowEndpoint
metadata:
name: <ENDPOINT_NAME>
namespace: azure-iot-operations
spec:
endpointType: Mqtt
mqttSettings:
host: <NAMESPACE>.<REGION>-1.ts.eventgrid.azure.net:8883
authentication:
# See available authentication methods section for method types
# method: <METHOD_TYPE>
tls:
mode: Enabled
然後將資訊清單檔套用至 Kubernetes 叢集。
kubectl apply -f <FILE>.yaml
端點建立好之後,就可以在資料流程中使用端點作為來源或目的地,以連線到 Azure 事件方格 MQTT 代理程式。 MQTT 主題是在資料流程中設定的。
搭配 Azure 事件方格使用 X.509 憑證驗證
當您搭配 Azure 事件方格 MQTT 代理程式使用 X.509 驗證時,請移至 Azure 事件方格命名空間 >[設定],並檢查下列設定:
-
啟用 MQTT:選取此核取方塊。
-
啟用替代的用戶端驗證名稱來源:選取核取方塊。
-
憑證主體名稱:在下拉式清單中選取此選項。
-
每個驗證名稱的用戶端工作階段數量上限:設定為 [3] 或更大的數字。
替代用戶端驗證選項和用戶端工作階段數量上限選項可讓資料流程在驗證時使用用戶端憑證主體名稱,而不是使用 MQTT CONNECT Username。 這項功能很重要,其可讓資料流程繁衍多個執行個體,並保持連線能力。 若要深入了解,請參閱 Azure 事件方格 MQTT 用戶端憑證驗證 (部分機器翻譯) 和多工作階段支援 (部分機器翻譯)。
然後,依照 X.509 憑證中的步驟,使用 X.509 憑證設定來設定端點。
Azure 事件方格的共用訂用帳戶限制
Azure 事件方格 MQTT 代理程式不支援共用訂用帳戶 (部分機器翻譯),這表示如果將 Azure 事件方格作為資料流程的來源 (即資料流程訂閱訊息),則無法在資料流程設定檔中,將 instanceCount 設定為超過 1。 在此情況下,如果您將 instanceCount 設定為大於 1,則資料流程無法啟動。
自訂 MQTT 代理程式
針對其他 MQTT 代理程式,您可以視需要設定端點、TLS、驗證和其他設定。
在 [操作體驗] 中,選取 [資料流程端點] 索引標籤。
在 [建立新的資料流程端點] 下,選取 [自訂 MQTT 代理程式]>[新增]。
輸入端點的下列設定:
| Setting |
Description |
| Name |
資料流程端點的名稱 |
| Host |
MQTT 代理程式端點的主機名稱,格式為 <hostname>.<port>。 |
| 驗證方法 |
用於驗證的方法。 選擇 [服務帳戶權杖] 或 [X509 憑證]。 |
| 服務對象 |
服務帳戶權杖的對象。 如果使用 [服務帳戶權杖],則為必要設定。 |
| X509 用戶端憑證 |
用於驗證的 X.509 用戶端憑證。 如果使用 [X509 憑證],則為必要設定。 您可以上傳業界標準的多行 X509 憑證,以改善裝置驗證管理、安全性和彈性。 |
| X509 用戶端金鑰 |
對應至 X.509 用戶端憑證的私密金鑰。 如果使用 [X509 憑證],則為必要設定。 |
| X509 中繼憑證 |
X.509 用戶端憑證鏈結的中繼憑證。 如果使用 [X509 憑證],則為必要設定。 |
選取 [套用] 以佈建端點。
建立或取代
使用 az iot ops dataflow endpoint create custom-mqtt 命令來建立或取代自定義 MQTT 訊息代理程式數據流端點。
az iot ops dataflow endpoint create custom-mqtt --resource-group <ResourceGroupName> --instance <AioInstanceName> --name <EndpointName> --host <Host> --port <Port>
此命令會建立具有預設設定和系統指派受控識別驗證的自定義 MQTT 訊息代理程式端點。 您可以視需要指定其他選項。
以下是建立或取代名為 custom-mqtt-endpoint的自訂 MQTT 訊息代理程式資料流端點的範例命令:
az iot ops dataflow endpoint create custom-mqtt --resource-group myResourceGroup --instance myAioInstance --name custom-mqtt-endpoint --host mycustombroker.contoso.com --port 8883
建立或變更
使用 az iot ops dataflow endpoint apply 命令來建立或變更自定義 MQTT 訊息代理程式數據流端點。
az iot ops dataflow endpoint apply --resource-group <ResourceGroupName> --instance <AioInstanceName> --name <EndpointName> --config-file <ConfigFilePathAndName>
參數 --config-file 是 JSON 組態檔的路徑和檔名,其中包含資源屬性。
在此範例中,假設名為 custom-mqtt-endpoint.json 的組態檔,其中包含儲存在使用者主目錄中的下列內容:
{
"endpointType": "Mqtt",
"mqttSettings": {
"host": "mycustombroker.contoso.com:8883",
"authentication": {
"method": "SystemAssignedManagedIdentity",
"systemAssignedManagedIdentitySettings": {}
},
"tls": {
"mode": "Enabled"
}
}
}
以下是建立或更新名為 custom-mqtt-endpoint的自訂 MQTT 訊息代理程式資料流端點的範例命令:
az iot ops dataflow endpoint apply --resource-group myResourceGroup --instance myAioInstance --name custom-mqtt-endpoint --config-file ~/custom-mqtt-endpoint.json
mqttSettings: {
authentication: {
// See available authentication methods section for method types
// method: <METHOD_TYPE>
}
host: '<HOST>:<PORT>'
tls: {
mode: 'Enabled' // or 'Disabled'
trustedCaCertificateConfigMapRef: '<TRUSTED_CA_CERT_CONFIGMAP>'
}
}
spec:
endpointType: Mqtt
mqttSettings:
host: <HOST>:<PORT>
authentication:
# See available authentication methods section for method types
# method: <METHOD_TYPE>
tls:
mode: Enabled # or Disabled
trustedCaCertificateConfigMapRef: <TRUSTED_CA_CERT_CONFIGMAP>
若要自訂 MQTT 端點設定,請參閱下列各節以取得詳細資訊。
可用的驗證方法
下列驗證方法適用於 MQTT 代理程式資料流程端點。
系統指派的受控識別
在設定資料流程端點之前,請先指派角色給 Azure IoT 操作受控識別,以授與連線至 MQTT 代理程式的權限:
- 在 Azure 入口網站中,移至您的 Azure IoT 操作執行個體,然後選取 [概觀]。
- 複製 Azure IoT 操作Arc 延伸模組之後所列的延伸模組名稱。 例如,azure-iot-operations-xxxx7。
- 移至您需要授與權限的雲端資源。 例如,移至 [Azure 事件方格] 命名空間 >[存取控制 (IAM)]>[新增角色指派]。
- 在 [角色] 索引標籤上,選取適當的角色。
- 在 [成員] 索引標籤上,對於 [存取權指派對象為],請選取 [使用者、群組或服務主體] 選項,然後選取 [+ 選取成員] 並搜尋 Azure IoT 操作受控識別。 例如,azure-iot-operations-xxxx7。
然後,使用系統指派的受控識別設定來設定資料流程端點。
在 [操作體驗資料流端點設定] 頁面中,選取 [基本] 索引標籤,然後選擇 [驗證方法]>[系統指派的受控識別]。
建立或取代
使用 az iot ops dataflow endpoint create 命令,並將 --auth-type 參數設定為 SystemAssignedManagedIdentity 進行系統指派的受控識別驗證。
az iot ops dataflow endpoint create <Command> --auth-type SystemAssignedManagedIdentity --audience <Audience> --resource-group <ResourceGroupName> --instance <AioInstanceName> --name <EndpointName>
建立或變更
使用 az iot ops dataflow endpoint apply 命令並指定 --config-file 參數。
在此範例中,假設組態檔具有下列內容:
{
"endpointType": "Mqtt",
"mqttSettings": {
"host": "mycustombroker.contoso.com:8883",
"authentication": {
"method": "SystemAssignedManagedIdentity",
"systemAssignedManagedIdentitySettings": {}
},
"tls": {
"mode": "Enabled"
}
}
}
mqttSettings: {
authentication: {
method: 'SystemAssignedManagedIdentity'
systemAssignedManagedIdentitySettings: {}
}
}
mqttSettings:
authentication:
method: SystemAssignedManagedIdentity
systemAssignedManagedIdentitySettings:
{}
使用者指派的受控識別
若要將使用者指派的受控識別用於驗證,您必須先部署已啟用安全設定的 Azure IoT 操作。 然後,您必須為雲端連線設定使用者指派的受控識別。 若要深入了解,請參閱在 Azure IoT 操作部署中啟用安全設定 (部分機器翻譯)。
在設定資料流程端點之前,請先指派角色給使用者指派的受控識別,以授與連線至 MQTT 代理程式的權限:
- 在 Azure 入口網站中,移至您需要授與權限的雲端資源。 例如,移至 [Azure 事件方格] 命名空間 >[存取控制 (IAM)]>[新增角色指派]。
- 在 [角色] 索引標籤上,選取適當的角色。
- 在 [成員] 索引標籤上,對於 [存取權指派對象為],請選取 [受控識別] 選項,然後選取 [+ 選取成員] 並搜尋使用者指派的受控識別。
然後,使用使用者指派的受控識別設定來設定資料流程端點。
在 [操作體驗資料流程端點設定] 頁面中,選取 [基本] 索引標籤,然後選擇 [驗證方法]>[使用者指派的受控識別]。
建立或取代
使用 az iot ops dataflow endpoint create 命令,並將 --auth-type 參數設定為 UserAssignedManagedIdentity 以用於使用者指派的受控識別驗證。
az iot ops dataflow endpoint create <Command> --auth-type UserAssignedManagedIdentity --client-id <ClientId> --tenant-id <TenantId> --resource-group <ResourceGroupName> --instance <AioInstanceName> --name <EndpointName>
建立或變更
使用 az iot ops dataflow endpoint apply (部分機器翻譯) 搭配 --config-file 參數
在此範例中,假設組態檔具有下列內容:
{
"endpointType": "Mqtt",
"mqttSettings": {
"authentication": {
"method": "UserAssignedManagedIdentity",
"userAssignedManagedIdentitySettings": {
"clientId": "<ID>",
"tenantId": "<ID>",
// Optional
"scope": "https://<Scope_Url>"
}
}
}
}
mqttSettings: {
authentication: {
method: 'UserAssignedManagedIdentity'
userAssignedManagedIdentitySettings: {
clientId: '<ID>'
tenantId: '<ID>'
// Optional, defaults to 'https://eventgrid.azure.net/.default'
// scope: 'https://<SCOPE_URL>'
}
}
}
mqttSettings:
authentication:
method: UserAssignedManagedIdentity
userAssignedManagedIdentitySettings:
clientId: <ID>
tenantId: <ID>
# Optional, defaults to 'https://eventgrid.azure.net/.default'
# scope: https://<SCOPE_URL>
Kubernetes 服務帳戶權杖 (SAT)
若要使用 Kubernetes 服務帳戶權杖 (SAT) 來進行驗證,您不需要建立祕密。 您會使用 SAT 比對對象以向 MQTT 代理程式進行驗證。
在 [操作體驗資料流程端點設定] 頁面中,選取 [基本] 索引標籤,然後選擇 [驗證方法]>[服務帳戶權杖]。
輸入服務對象。
建立或取代
使用 az iot ops dataflow endpoint create 命令,並將 --auth-type 參數設定 ServiceAccountToken 為 ,以進行 Kubernetes 服務帳戶令牌驗證。
az iot ops dataflow endpoint create <Command> --auth-type ServiceAccountToken --audience <Audience> --resource-group <ResourceGroupName> --instance <AioInstanceName> --name <EndpointName>
建立或變更
使用 az iot ops dataflow endpoint apply (部分機器翻譯) 搭配 --config-file 參數。
在此範例中,假設組態檔具有下列內容:
{
"endpointType": "Mqtt",
"mqttSettings": {
"authentication": {
"method": "ServiceAccountToken",
"serviceAccountTokenSettings": {
"audience": "<ServiceAccountAudience>"
}
}
}
}
mqttSettings: {
authentication: {
method: 'ServiceAccountToken'
serviceAccountTokenSettings: {
audience: '<YOUR_SERVICE_ACCOUNT_AUDIENCE>'
}
}
}
mqttSettings:
authentication:
method: ServiceAccountToken
serviceAccountTokenSettings:
audience: <YOUR_SERVICE_ACCOUNT_AUDIENCE>
X.509 憑證
許多 MQTT 代理程式 (例如 Azure 事件方格) 支援 X.509 驗證。 資料流程可以出示用戶端 X.509 憑證,並交涉 TLS 通訊。
憑證和私密金鑰必須採用 PEM 格式,且未以密碼保護。
Tip
PEM 格式是憑證和金鑰的常見格式。 PEM 格式的憑證和金鑰是以 base64 編碼的 ASCII 檔案,其標頭看起來會像 -----BEGIN CERTIFICATE----- 和 -----BEGIN EC PRIVATE KEY----
如果您擁有的是其他格式的憑證,則可以使用 OpenSSL 將其轉換成 PEM 格式。 若要深入了解,請參閱如何將憑證轉換成適當的格式 (英文)。
在設定資料流程端點之前,請先使用憑證和私密金鑰建立祕密。
如果您使用操作入口網站,祕密會自動格式化並同步至 Kubernetes 叢集。
如果您使用 Bicep 或 Kubernetes,請在與 MQTT 資料流程端點相同的命名空間中,使用憑證和私密金鑰手動建立祕密。
kubectl create secret generic <X509_SECRET_NAME> -n azure-iot-operations --from-file=client_cert.pem=<CLIENT_CERT_FILE>.pem --from-file=client_key.pem=<PRIVATE_KEY_FILE>.pem --from-file=client_intermediate_certs.pem=<INTERMEDIATE_CERT_FILE>.pem
在這裡,祕密必須以 client_cert.pem 和 client_key.pem 作為憑證和私密金鑰的金鑰名稱。 (選擇性) 祕密也能以 client_intermediate_certs.pem 作為中繼憑證的金鑰名稱。
Important
若要使用作業體驗 Web UI 來管理秘密,必須先設定 Azure Key Vault 並啟用工作負載身分識別,以使用安全設定來啟用 Azure IoT 作業。 若要深入了解,請參閱在 Azure IoT 操作部署中啟用安全設定 (部分機器翻譯)。
Important
作業體驗 Web UI 目前有一個已知問題,即在建立 X.509 秘密時,結果會導致秘密中的數據編碼不正確。 若要了解更多資訊和因應措施,請參閱已知問題 (部分機器翻譯)。
在 [操作體驗資料流程端點設定] 頁面中,選取 [基本] 索引標籤,然後選擇 [驗證方法]>[X509 憑證]。
在這裡,於 [已同步的祕密名稱] 下,輸入祕密的名稱。 此名稱用來參考資料流程端點設定中的祕密,而且是儲存在 Kubernetes 叢集中的祕密名稱。
然後,在 [X509 用戶端憑證]、[X509 用戶端金鑰] 和 [X509 中繼憑證] 下,選取 [新增參考] 以新增憑證、私密金鑰和中繼憑證。 在下一個頁面上,使用 [從 Azure Key Vault 新增] 以從 Azure Key Vault 選取祕密,或 [建立新祕密]。
如果您選取 [建立新祕密],請輸入下列設定:
| Setting |
Description |
| 秘密名稱 |
Azure Key Vault 中的祕密名稱。 挑選容易記住的名稱,以便稍後從清單中選取祕密。 |
| 祕密值 |
PEM 格式的憑證、私密金鑰或中繼憑證。 您可以上傳業界標準的多行 X509 憑證,以改善裝置驗證管理、安全性和彈性。 |
| 設定啟用日期 |
若已開啟,則為祕密變成作用中的日期。 |
| 設定到期日期 |
如果已開啟,則為祕密到期的日期。 |
若要深入了解祕密,請參閱在 Azure IoT 操作中建立和管理祕密。
建立或取代
使用 az iot ops dataflow endpoint create 命令,並將 --auth-type 參數設定為 X509Certificate X.509 憑證驗證。
az iot ops dataflow endpoint create <Command> --auth-type X509Certificate --secret-name <X509SecretName> --resource-group <ResourceGroupName> --instance <AioInstanceName> --name <EndpointName>
建立或變更
使用 az iot ops dataflow endpoint apply (部分機器翻譯) 搭配 --config-file 參數。
在此範例中,假設組態檔具有下列內容:
{
"endpointType": "Mqtt",
"mqttSettings": {
"authentication": {
"method": "X509Certificate",
"x509CertificateSettings": {
"secretRef": "<X509SecretName>"
}
}
}
}
mqttSettings: {
authentication: {
method: 'X509Certificate'
x509CertificateSettings:
secretRef: '<X509_SECRET_NAME>'
}
}
mqttSettings:
authentication:
method: X509Certificate
x509CertificateSettings:
secretRef: <X509_SECRET_NAME>
Anonymous
若要使用匿名驗證,請將驗證方法設定為 Anonymous。
在 [操作體驗資料流程端點設定] 頁面中,選取 [基本] 索引標籤,然後選擇 [驗證方法]>[無]。
建立或取代
使用 az iot ops dataflow endpoint create 命令,其中包含可進行匿名驗證的 --no-auth 參數。
az iot ops dataflow endpoint create <Command> --no-auth --resource-group <ResourceGroupName> --instance <AioInstanceName> --name <EndpointName>
建立或變更
使用 az iot ops dataflow endpoint apply (部分機器翻譯) 搭配 --config-file 參數。
在此範例中,假設組態檔具有下列內容:
{
"endpointType": "Mqtt",
"mqttSettings": {
"authentication": {
"method": "Anonymous"
}
}
}
mqttSettings: {
authentication: {
method: 'Anonymous'
}
}
mqttSettings:
authentication:
method: Anonymous
anonymousSettings:
{}
進階設定
您可以設定 MQTT 代理程式資料流程端點的進階設定,例如 TLS、受信任的 CA 憑證、MQTT 傳訊設定和 CloudEvent。 您可以在資料流程端點的 [進階] 入口網站索引標籤中,於資料流程端點自訂資源內設定這些設定。
在操作體驗中,選取資料流程端點的 [進階] 索引標籤。
{
"mqttSettings": {
"qos": 1,
"retain": "Keep",
"sessionExpirySeconds": 3600,
"keepAliveSeconds": 60,
"maxInflightMessages": 100,
"protocol": "WebSockets",
"clientIdPrefix": "dataflow",
"cloudEventAttributes": "Propagate",
"tls": {
"mode": "Enabled"
}
}
}
// See sections below for explanation of each setting
mqttSettings: {
qos: 1
retain: 'Keep'
sessionExpirySeconds: 3600
keepAliveSeconds: 60
maxInflightMessages: 100
protocol: WebSockets
clientIdPrefix: 'dataflow'
cloudEventAttributes : 'Propagate' // or 'CreateOrRemap'
}
# See sections below for explanation of each setting
mqttSettings:
qos: 1
retain: Keep
sessionExpirySeconds: 3600
keepAliveSeconds: 60
maxInflightMessages: 100
protocol: WebSockets
clientIdPrefix: dataflow
cloudEventAttributes : Propagate # or CreateOrRemap
TLS 設定
TLS 模式
若要啟用或停用 MQTT 端點的 TLS,請更新 TLS 設定中的 mode 設定。
在 [操作體驗資料流程端點設定] 頁面中,選取 [進階] 索引標籤,然後使用 [啟用 TLS 模式] 旁的核取方塊。
{
"mqttSettings": {
"tls": {
"mode": "Enabled"
}
}
}
mqttSettings: {
tls: {
mode: 'Enabled' // or 'Disabled'
}
}
mqttSettings:
tls:
mode: Enabled # or Disabled
TLS 模式可以設定為 Enabled 或 Disabled。 如果模式設定為 Enabled,則資料流程會使用安全的 MQTT 代理程式連線。 如果模式設定為 Disabled,則資料流程會使用不安全的 MQTT 代理程式連線。
受信任的 CA 憑證
為 MQTT 端點設定受信任的 CA 憑證,以建立安全的 MQTT 代理程式連線。 如果 MQTT 代理程式使用自我簽署憑證或由未預設為受信任的自訂 CA 所簽署的憑證,此設定就很重要。
在 [操作體驗資料流程端點設定] 頁面中,選取 [進階] 索引標籤,然後使用 [受信任的 CA 憑證設定對應] 欄位來指定包含受信任 CA 憑證的 ConfigMap。
mqttSettings: {
tls: {
trustedCaCertificateConfigMapRef: '<YOUR_CA_CERTIFICATE>'
}
}
{
"mqttSettings": {
"tls": {
"trustedCaCertificateConfigMapRef": "<YOUR_CA_CERTIFICATE>"
}
}
}
mqttSettings:
tls:
trustedCaCertificateConfigMapRef: <YOUR_CA_CERTIFICATE>
此 ConfigMap 應包含 PEM 格式的 CA 憑證。 ConfigMap 必須與 MQTT 資料流程資源位於相同的命名空間中。 例如:
kubectl create configmap client-ca-configmap --from-file root_ca.crt -n azure-iot-operations
Tip
連線到 Azure 事件方格 MQTT 代理程式時不需要 CA 憑證,因為事件中樞服務會使用由預設受信任的公用 CA 所簽署的憑證。
用戶端識別碼前置詞
您可以設定 MQTT 用戶端的用戶端識別碼前置詞。 將資料流程執行個體名稱附加至前置詞即可產生用戶端識別碼。
Caution
大部分的應用程式都不應該修改用戶端識別碼前置詞。 在 IoT 操作初始部署之後,就請勿修改此用戶端識別碼前置詞。 在部署之後變更用戶端識別碼前置詞可能會導致資料遺失。
在 [操作體驗資料流程端點設定] 頁面中,選取 [進階] 索引標籤,然後使用 [用戶端識別碼前置詞] 欄位來指定前置詞。
{
"mqttSettings": {
"clientIdPrefix": "<YOUR_PREFIX>"
}
}
mqttSettings: {
clientIdPrefix: '<YOUR_PREFIX>'
}
mqttSettings:
clientIdPrefix: <YOUR_PREFIX>
QoS
您可以將 MQTT 訊息的服務品質 (QoS) 層級設定為 1 或 0。 預設值是 1。
在 [操作體驗資料流程端點設定] 頁面中,選取 [進階] 索引標籤,然後使用 [服務品質 (QoS)] 欄位來指定 QoS 層級。
{
"mqttSettings": {
"qos": 1
}
}
mqttSettings: {
qos: 1 // Or 0
}
mqttSettings:
qos: 1 # Or 0
Retain
使用 retain 設定可指定資料流程是否應保留 MQTT 訊息上的保留旗標。 預設值為 Keep。
將此欄位設定為 Keep 有助於確保遠端代理程式會保留與本機代理程式相同的訊息,這對於統一命名空間 (UNS) 案例而言可能很重要。
如果設定為 Never,則會從 MQTT 訊息中移除保留旗標。 當您不想讓遠端代理程式保留任何訊息,或遠端代理程式不支援保留時,這樣的設定可能會很有用。
若要設定保留設定:
在 [操作體驗資料流程端點設定] 頁面中,選取 [進階] 索引標籤,然後使用 [保留] 欄位來指定保留設定。
{
"mqttSettings": {
"retain": "Keep"
}
}
mqttSettings: {
retain: Keep // or Never
}
mqttSettings:
retain: Keep # or Never
只有在資料流程使用 MQTT 端點作為來源和目的地時,「保留」設定才會生效。 例如,在 MQTT 橋接器 (部分機器翻譯) 案例中。
Important
Azure 事件方格 MQTT 代理程式目前不支援保留旗標 (部分機器翻譯)。 這表示如果您將 Azure 事件方格 MQTT 代理程式端點的保留旗標設定為 Keep,而此端點目前作為目的地,則系統會拒絕訊息。 若要避免這種情況,請在使用 Azure 事件方格 MQTT 代理程式作為目的地時,將保留旗標設定為 Never。
工作階段到期
您可以設定資料流程 MQTT 用戶端的工作階段到期間隔。 工作階段到期間隔是指,資料流程用戶端中斷連線時,MQTT 工作階段會維持存在的時間上限。 預設值為 600 秒。 若要設定工作階段到期間隔:
在 [操作體驗資料流程端點設定] 頁面中,選取 [進階] 索引標籤,然後使用 [工作階段到期] 欄位來指定工作階段到期間隔。
{
"mqttSettings": {
"sessionExpirySeconds": 600
}
}
mqttSettings: {
sessionExpirySeconds: 600
}
mqttSettings:
sessionExpirySeconds: 600
MQTT 或 WebSocket 通訊協定
根據預設,系統不會啟用 WebSocket。 若要透過 WebSocket 使用 MQTT,請將 protocol 欄位設定為 WebSockets。
Important
透過 WebSocket 使用 MQTT 時,事件方格需要 /mqtt 附加至主機名值的結尾。 例如,my-event-grid.eventgrid.azure.net:443/mqtt 或 my-event-grid/mqtt。
在 [操作體驗資料流程端點設定] 頁面中,選取 [進階] 索引標籤,然後使用 [通訊協定] 欄位來指定通訊協定。
{
"mqttSettings": {
"protocol": "WebSockets"
}
}
mqttSettings: {
protocol: 'WebSockets'
}
mqttSettings:
protocol: WebSockets
傳輸中訊息數量上限
您可以設定資料流程 MQTT 用戶端可以擁有的傳輸中訊息數量上限。 預設值為 100。
在 [操作體驗資料流程端點設定] 頁面中,選取 [進階] 索引標籤,然後使用 [傳輸中訊息數量上限] 欄位來指定傳輸中訊息的數量上限。
{
"mqttSettings": {
"maxInflightMessages": 100
}
}
mqttSettings: {
maxInflightMessages: 100
}
mqttSettings:
maxInflightMessages: 100
若為 MQTT 端點作為來源時的訂閱,這是接收數量上限。 若為 MQTT 端點作為目的地時的發佈,這是等候通知之前要先傳送的訊息數量上限。
保持運作
您可以設定資料流程 MQTT 用戶端的保持運作間隔。 保持運作間隔是資料流程用戶端在傳送 PINGREQ 訊息給代理程式之前可以閒置的時間上限。 預設值是 60 秒。
在 [操作體驗資料流程端點設定] 頁面中,選取 [進階] 索引標籤,然後使用 [保持運作] 欄位來指定保持運作間隔。
{
"mqttSettings": {
"keepAliveSeconds": 60
}
}
mqttSettings: {
keepAliveSeconds: 60
}
mqttSettings:
keepAliveSeconds: 60
CloudEvents
CloudEvent 是一種以通用方式描述事件資料的方法。 CloudEvent 設定可用來傳送或接收 CloudEvent 格式的訊息。 您可以將 CloudEvent 用於事件驅動的架構,在這種架構下,不同的服務需要在相同或不同的雲端服務提供者中相互通訊。
cloudEventAttributes 選項為 Propagate 或 CreateOrRemap。 若要設定 CloudEvent 設定:
在 [操作體驗資料流程端點設定] 頁面中,選取 [進階] 索引標籤,然後使用 [雲端事件屬性] 欄位來指定 CloudEvent 設定。
{
"mqttSettings": {
"cloudEventAttributes": "Propagate"
}
}
mqttSettings: {
cloudEventAttributes : 'Propagate' // or 'CreateOrRemap'
}
mqttSettings:
cloudEventAttributes : Propagate # or CreateOrRemap
下列各節會提供關於 CloudEvent 設定的詳細資訊。
散佈設定
對於包含必要屬性的訊息,會傳遞 CloudEvent 屬性。 如果訊息未包含必要屬性,則訊息會按原樣傳遞。
| Name |
Required |
範例值 |
輸出值 |
specversion |
Yes |
1.0 |
照原樣傳遞 |
type |
Yes |
ms.aio.telemetry |
照原樣傳遞 |
source |
Yes |
aio://mycluster/myoven |
照原樣傳遞 |
id |
Yes |
A234-1234-1234 |
照原樣傳遞 |
subject |
No |
aio/myoven/sensor/temperature |
照原樣傳遞 |
time |
No |
2018-04-05T17:31:00Z |
照原樣傳遞。 不會重新標記。 |
datacontenttype |
No |
application/json |
在選用的轉換階段之後已變更為輸出資料內容類型。 |
dataschema |
No |
sr://fabrikam-schemas/123123123234234234234234#1.0.0 |
如果在轉換設定中指定了輸出資料轉換結構描述,則 dataschema 會變更為輸出結構描述。 |
CreateOrRemap 設定
對於包含必要屬性的訊息,會傳遞 CloudEvent 屬性。 如果訊息未包含必要屬性,則會產生屬性。
| Name |
Required |
遺漏時產生的值 |
specversion |
Yes |
1.0 |
type |
Yes |
ms.aio-dataflow.telemetry |
source |
Yes |
aio://<target-name> |
id |
Yes |
在目標用戶端中產生的 UUID |
subject |
No |
訊息所傳送到的輸出主題 |
time |
No |
在目標用戶端中產生為 RFC 3339 |
datacontenttype |
No |
在選用的轉換階段之後已變更為輸出資料內容類型 |
dataschema |
No |
結構描述登錄中定義的結構描述 |
後續步驟
若要深入了解資料流,請參閱建立資料流。