設定 MQTT 資料流端點
重要
此頁面包含使用 Kubernetes 部署指令清單來管理 Azure IoT Operations 元件的指示,其處於預覽狀態。 這項功能隨附 數個限制,不應用於生產工作負載。
請參閱 Microsoft Azure 預覽版增補使用規定,以了解適用於 Azure 功能 (搶鮮版 (Beta)、預覽版,或尚未正式發行的版本) 的法律條款。
MQTT 資料流端點會用於 MQTT 來源和目的地。 您可以設定端點設定、傳輸層安全性 (TLS)、驗證和其他設定。
必要條件
- Azure IoT 作業的 實例
Azure IoT 作業本機 MQTT 訊息代理程式
Azure IoT 作業提供 內建的本機 MQTT 訊息代理程式 ,您可以搭配數據流使用。 您可以使用 MQTT 訊息代理程式作為來源,接收來自其他系統的訊息,或做為目的地,將訊息傳送至其他系統。
預設端點
當您部署 Azure IoT 作業時,會使用預設設定來建立名為 「default」 的 MQTT 訊息代理程式數據流端點。 您可以使用此端點作為資料流的來源或目的地。
重要
您必須在每個資料流中使用預設端點或具有相同設定的端點。 它可以是來源、目的地或兩者。 如需詳細資訊,請參閱 數據流必須使用本機 MQTT 訊息代理程式端點。
預設端點會使用下列設定:
- 主機:
aio-broker:18883
透過 預設 MQTT 訊息代理程式接聽程式 - 驗證:透過預設 BrokerAuthentication 資源的服務帳戶令牌 (SAT)
- TLS:已啟用
- 受信任的 CA 憑證:預設根 CA 的預設 CA 憑證
azure-iot-operations-aio-ca-trust-bundle
警告
請勿刪除預設端點。 如果您刪除預設端點,則必須使用相同的設定重新建立它。
若要檢視或編輯預設 MQTT 訊息代理程式端點設定:
在作業體驗中,選取數據流端點。
選取預設端點以檢視或編輯設定。
建立新的端點
您也可以使用自訂設定來建立新的本機 MQTT 訊息代理程式端點。 例如,您可以使用不同的埠、驗證或授權設定來建立新的 MQTT 訊息代理程式端點。 不過,即使您建立新的端點,您仍必須一律使用預設端點作為每個數據流中的來源或目的地。
在作業體驗中,選取數據流端點。
在 [建立新的數據流端點] 下,選取 [Azure IoT 作業本機 MQTT>新增]。
輸入端點的下列設定:
設定 描述 名稱 數據流端點的名稱。 Host MQTT 訊息代理程式的主機名和埠。 請使用 <hostname>:<port>
格式驗證方法 用於驗證的方法。 選擇 [服務帳戶令牌] 或 [X509 憑證] 服務對象 服務帳戶令牌的物件。 如果使用 服務帳戶令牌,則為必要專案。 X509 用戶端憑證 用於驗證的 X.509 用戶端憑證。 如果使用 X509 憑證,則為必要專案。 X509 用戶端金鑰 對應至 X.509 用戶端憑證的私鑰。 如果使用 X509 憑證,則為必要專案。 X509 中繼憑證 X.509 用戶端憑證鏈結的中繼憑證。 如果使用 X509 憑證,則為必要專案。
事件格線
Azure 事件方格 提供與 Azure IoT 作業數據流搭配運作的完全受控 MQTT 訊息代理程式。 若要設定 Azure 事件方格 MQTT 訊息代理程式端點,建議您使用受控識別進行驗證。
設定事件方格命名空間
如果您尚未這麼做, 請先建立 Event Grid 命名空間 。
啟用 MQTT
一旦您有事件方格命名空間,請移至 [ 組態 ] 並檢查:
- 啟用 MQTT:選取複選框。
- 每個驗證名稱的用戶端會話上限:設定為 3 個以上。
[最大用戶端會話] 選項很重要,因此數據流可以 相應增加 ,而且仍然可以連線。 若要深入瞭解,請參閱 事件方格 MQTT 多會話支援。
建立主題空間
為了讓數據流傳送或接收訊息至事件方格 MQTT 訊息代理程式,您必須在 Event Grid 命名空間中建立至少一個主題空間。 您可以選取 [主題空間>][新增主題空間],在 [事件方格] 命名空間中建立主題空間。
若要快速開始使用和進行測試,您可以使用通配符主題 #
作為主題範本來建立主題空間。
將許可權指派給受控識別
若要設定事件方格 MQTT 訊息代理程式的數據流端點,建議您使用使用者指派或系統指派的受控識別。 這種方法是安全的,而且不需要手動管理認證。
建立主題空間之後,您必須將角色指派給 Azure IoT Operations 受控識別,以授與傳送或接收訊息給事件方格 MQTT 訊息代理程式的許可權。
如果使用系統指派的受控識別,請在 Azure 入口網站 中移至您的 Azure IoT 作業實例,然後選取 [概觀]。 複製 Azure IoT Operations Arc 延伸模組之後 所列的延伸模組名稱。 例如, azure-iot-operations-xxxx7。 您可以使用 Azure IoT Operations Arc 延伸模組的相同名稱,找到系統指派的受控識別。
然後,移至事件方格命名空間>訪問控制 (IAM)>新增角色指派。
- 在 [ 角色] 索引標籤上,選取適當的角色,例如
EventGrid TopicSpaces Publisher
或EventGrid TopicSpaces Subscriber
。 這會為受控識別提供針對命名空間中所有主題空間傳送或接收訊息的必要許可權。 若要深入瞭解,請參閱 Microsoft Entra JWT 驗證和 Azure RBAC 授權來發佈或訂閱 MQTT 訊息。 - 在 [ 成員] 索引標籤上:
- 如果使用系統指派的受控識別,針對 [指派存取權],選取 [使用者、群組或服務主體 ] 選項,然後選取 [+ 選取成員 ],然後搜尋 Azure IoT Operations Arc 擴充功能的名稱。
- 如果使用使用者指派的受控識別,針對 [指派存取權] 選取 [受控識別 ] 選項,然後選取 [+ 選取成員 ],然後搜尋針對 雲端連線設定的使用者指派受控識別。
或者,您可以在主題空間層級指派角色。 移至空間>訪問控制 (IAM)>新增角色指派主題。 使用 或 EventGrid TopicSpaces Subscriber
等EventGrid TopicSpaces Publisher
適當角色指派受控識別。 這會為受控識別提供傳送或接收特定主題空間之訊息的必要許可權。
建立事件方格 MQTT 訊息代理程式的數據流端點
設定事件方格命名空間之後,您可以建立事件方格 MQTT 訊息代理程式的數據流端點。
在作業體驗中,選取 [數據流端點] 索引標籤。
在 [建立新的數據流端點] 下,選取 [Azure 事件方格 [MQTT>新增]。
輸入端點的下列設定:
設定 描述 名稱 數據流端點的名稱。 Host 事件方格 MQTT 訊息代理程式的主機名和埠。 請使用 <NAMESPACE>.<REGION>-1.ts.eventgrid.azure.net:8883
格式驗證方法 用於驗證的方法。 我們建議您選擇 [系統指派的受控識別] 或 [使用者指派的受控識別]。 選取 [ 套用 ] 以布建端點。
建立端點之後,您可以在數據流中使用它,以作為來源或目的地連線到事件方格 MQTT 訊息代理程式。 MQTT 主題是在數據流中設定的。
搭配事件方格使用 X.509 憑證驗證
當您搭配事件方格 MQTT 訊息代理程式使用 X.509 驗證時,請移至事件方格命名空間 >組態 ,並檢查下列設定:
- 啟用 MQTT:選取複選框。
- 啟用替代客戶端驗證名稱來源:選取複選框。
- 憑證主體名稱:在下拉式清單中選取此選項。
- 每個驗證名稱的用戶端會話上限:設定為 3 個以上。
替代客戶端驗證和最大用戶端工作階段選項可讓資料流使用客戶端憑證主體名稱進行驗證,而不是 MQTT CONNECT Username
。 這項功能很重要,因此數據流可以繁衍多個實例,而且仍然可以連線。 若要深入瞭解,請參閱 事件方格 MQTT 用戶端憑證驗證 和 多會話支援。
然後,依照 X.509 憑證中的步驟,使用 X.509 憑證設定來設定端點。
事件方格共用訂用帳戶限制
Azure 事件方格 MQTT 訊息代理程式不支援共用訂閱,這表示如果事件方格作為數據流的來源(其中資料流訂閱訊息)用於資料流,則您無法將 設定instanceCount
為 超過1
數據流設定檔中的 。 在此情況下,如果您設定 instanceCount
大於 1
,數據流將無法啟動。
自訂 MQTT 訊息代理程式
針對其他 MQTT 代理,您可以視需要設定端點、TLS、驗證和其他設定。
在作業體驗中,選取 [數據流端點] 索引標籤。
在 [建立新的數據流端點] 下,選取 [自定義 MQTT 訊息代理程式>新增]。
輸入端點的下列設定:
設定 描述 名稱 數據流端點的名稱 Host MQTT 訊息代理程式端點的主機名,格式為 <hostname>.<port>
。驗證方法 用於驗證的方法。 選擇 [服務帳戶令牌] 或 [X509 憑證]。 服務對象 服務帳戶令牌的物件。 如果使用 服務帳戶令牌,則為必要專案。 X509 用戶端憑證 用於驗證的 X.509 用戶端憑證。 如果使用 X509 憑證,則為必要專案。 X509 用戶端金鑰 對應至 X.509 用戶端憑證的私鑰。 如果使用 X509 憑證,則為必要專案。 X509 中繼憑證 X.509 用戶端憑證鏈結的中繼憑證。 如果使用 X509 憑證,則為必要專案。 選取 [ 套用 ] 以布建端點。
若要自定義 MQTT 端點設定,請參閱下列各節以取得詳細資訊。
可用的驗證方法
下列驗證方法適用於 MQTT 訊息代理程式數據流端點。
系統指派的受控識別
設定數據流端點之前,請先將角色指派給 Azure IoT Operations 受控識別,以授與連線到 MQTT 訊息代理程式的許可權:
- 在 Azure 入口網站 中,移至您的 Azure IoT 作業實例,然後選取 [概觀]。
- 複製 Azure IoT Operations Arc 延伸模組之後 所列的延伸模組名稱。 例如, azure-iot-operations-xxxx7。
- 移至您需要授與許可權的雲端資源。 例如,移至事件方格命名空間>訪問控制 (IAM)>新增角色指派。
- 在 [ 角色] 索引標籤上,選取適當的角色。
- 在 [成員] 索引標籤上,針對 [指派存取權],選取 [使用者、群組或服務主體] 選項,然後選取 [+ 選取成員],然後搜尋 Azure IoT Operations 受控識別。 例如, azure-iot-operations-xxxx7。
然後,使用系統指派的受控識別設定來設定數據流端點。
在 [作業體驗數據流端點設定] 頁面中,選取 [基本] 索引標籤,然後選擇 [驗證方法>系統指派的受控識別]。
在大部分情況下,搭配事件方格使用時,您可以將設定保留空白,如下所示。 這會將受控識別物件設定為事件方格的常見物件 https://eventgrid.azure.net
。 如果您需要設定不同的物件,您可以在設定中指定它。
不支援。
使用者指派的受控識別
若要使用使用者指派的受控識別進行驗證,您必須先部署已啟用安全設定的 Azure IoT 作業。 然後, 您必須為雲端連線設定使用者指派的受控識別。 若要深入瞭解,請參閱 在 Azure IoT 作業部署中啟用安全設定。
設定資料流端點之前,請先將角色指派給使用者指派的受控識別,以授與連線到 MQTT 訊息代理程式的許可權:
- 在 Azure 入口網站 中,移至您需要授與許可權的雲端資源。 例如,移至事件方格命名空間>訪問控制 (IAM)>新增角色指派。
- 在 [ 角色] 索引標籤上,選取適當的角色。
- 在 [成員] 索引標籤上,針對 [指派存取權],選取 [受控識別] 選項,然後選取 [+ 選取成員],然後搜尋使用者指派的受控識別。
然後,使用使用者指派的受控識別設定來設定數據流端點。
在 [作業體驗數據流端點設定] 頁面中,選取 [基本] 索引標籤,然後選擇 [驗證方法>使用者指派的受控識別]。
在這裡,範圍是選擇性的,而且預設https://eventgrid.azure.net/.default
適用於所有 Azure 事件方格 命名空間。 如果您需要設定不同的範圍,您可以透過 Bicep 或 Kubernetes 在設定中指定它。
Kubernetes 服務帳戶令牌 (SAT)
若要使用 Kubernetes 服務帳戶令牌 (SAT) 進行驗證,您不需要建立秘密。 SAT 是用來比對物件向 MQTT 訊息代理程式進行驗證。
在 [作業體驗數據流端點設定] 頁面中,選取 [基本] 索引標籤,然後選擇 [驗證方法>服務帳戶令牌]。
輸入服務物件。
X.509 憑證
許多 MQTT 代理,例如事件方格,都支援 X.509 驗證。 數據流可以呈現用戶端 X.509 憑證,並交涉 TLS 通訊。
憑證和私鑰必須是 PEM 格式,且不受密碼保護。
提示
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
中繼憑證的密鑰名稱。
重要
若要使用作業體驗入口網站來管理秘密,必須先設定 Azure 金鑰保存庫 並啟用工作負載身分識別,以使用安全設定來啟用 Azure IoT 作業。 若要深入瞭解,請參閱 在 Azure IoT 作業部署中啟用安全設定。
重要
作業體驗入口網站目前有已知問題,其中建立 X.509 秘密會導致密碼編碼不正確。 若要深入瞭解和因應措施,請參閱 已知問題。
在 [作業體驗數據流端點設定] 頁面中,選取 [基本] 索引標籤,然後選擇 [驗證方法>X509 憑證]。
在這裡,在 [同步的秘密名稱] 下,輸入秘密的名稱。 此名稱用來參考數據流端點設定中的秘密,而且是儲存在 Kubernetes 叢集中的秘密名稱。
然後,在 [X509 用戶端憑證]、[X509 用戶端密鑰] 和 [X509 中繼憑證] 下,選取 [新增參考] 以新增憑證、私鑰和中繼憑證。 在下一個頁面上,從 Azure 金鑰保存庫 選取 [從 Azure 新增] 金鑰保存庫 或 [建立新秘密] 的秘密。
如果您選擇 [ 新建],請輸入下列設定:
設定 | 描述 |
---|---|
祕密名稱 | Azure 金鑰保存庫 中的秘密名稱。 挑選容易記住的名稱,以便稍後從清單中選取秘密。 |
祕密值 | PEM 格式的憑證、私鑰或中繼憑證。 |
設定啟用日期 | 如果開啟,則秘密變成作用中的日期。 |
設定到期日期 | 如果開啟,則為秘密到期的日期。 |
若要深入瞭解秘密,請參閱 在 Azure IoT Operations Preview 中建立和管理秘密。
匿名
若要使用匿名驗證,請將驗證方法設定為 Anonymous
。
在 [作業體驗數據流端點設定] 頁面中,選取 [基本] 索引標籤,然後選擇 [驗證方法>無]。
進階設定
您可以設定 MQTT 訊息代理程式數據流端點的進階設定,例如 TLS、受信任的 CA 憑證、MQTT 傳訊設定,以及 CloudEvents。 您可以在數據流端點 的 [進階 入口網站] 索引標籤中,在數據流端點自定義資源內設定這些設定。
在作業體驗中,選取數據流端點的 [ 進階 ] 索引標籤。
TLS 設定
TLS 模式
若要啟用或停用 MQTT 端點的 TLS,請更新 mode
TLS 設定中的設定。
在 [作業體驗數據流端點設定] 頁面中,選取 [ 進階 ] 索引標籤,然後使用啟用 TLS 模式旁 的複選框。
TLS 模式可以設定為 Enabled
或 Disabled
。 如果模式設定為 Enabled
,數據流會使用與 MQTT 訊息代理程式的安全連線。 如果模式設定為 Disabled
,數據流會使用與 MQTT 訊息代理程式不安全的連線。
受信任的 CA 憑證
設定 MQTT 端點的受信任 CA 憑證,以建立與 MQTT 訊息代理程式的安全連線。 如果 MQTT 訊息代理程式使用自我簽署憑證或由預設不信任的自定義 CA 所簽署的憑證,此設定就很重要。
在 [作業體驗數據流端點設定] 頁面中,選取 [ 進階 ] 索引卷標,然後使用 [受信任的 CA 憑證設定對應 ] 字段來指定包含受信任 CA 憑證的 ConfigMap。
此 ConfigMap 應包含 PEM 格式的 CA 憑證。 ConfigMap 必須與 MQTT 數據流資源位於相同的命名空間中。 例如:
kubectl create configmap client-ca-configmap --from-file root_ca.crt -n azure-iot-operations
提示
聯機到事件方格 MQTT 訊息代理程式時,不需要 CA 憑證,因為事件中樞服務會使用預設信任的公用 CA 所簽署的憑證。
用戶端標識碼前置詞
您可以設定 MQTT 用戶端的用戶端識別碼前置詞。 用戶端標識碼是藉由將數據流實例名稱附加至前置詞來產生。
警告
大部分的應用程式都不應該修改用戶端標識碼前置詞。 在初始IoT作業部署之後,請勿修改此專案。 在部署之後變更用戶端標識碼前置詞可能會導致數據遺失。
在 [作業體驗數據流端點設定] 頁面中,選取 [ 進階 ] 索引卷標,然後使用 [用戶端標識符前置 詞] 字段來指定前置詞。
QoS
您可以將 MQTT 訊息的服務品質 (QoS) 層級設定為 1 或 0。 預設值是 1。
在 [作業體驗數據流端點設定] 頁面中,選取 [ 進階 ] 索引卷標,然後使用 [服務品質] 字段來指定 QoS 層級。
保留
retain
使用 設定來指定數據流是否應該在 MQTT 訊息上保留保留旗標。 預設值為 Keep
。
將此欄位設定為 Keep
有助於確保遠端訊息代理程式保留與本機訊息代理程式相同,這對於整合命名空間 (UNS) 案例而言很重要。
如果設定為 Never
,則會從 MQTT 訊息中移除保留旗標。 當您不想讓遠端訊息代理程式保留任何訊息,或遠端訊息代理程式不支援保留時,這非常有用。
若要設定保留設定:
在 [作業體驗數據流端點設定] 頁面中,選取 [ 進階 ] 索引標籤,然後使用 [保留 ] 字段來指定保留設定。
只有在 數據流使用 MQTT 端點作為來源和目的地時,保留 設定才會生效。 例如,在 MQTT 網橋案例中。
重要
Azure 事件方格 MQTT 訊息代理程式目前不支援保留旗標。 這表示如果您將 Event Grid MQTT 訊息代理程式端點的保留旗標 Keep
設定為 ,而且它正當做目的地使用,則會拒絕訊息。 若要避免這種情況,請在使用事件方格 MQTT 訊息代理程式作為目的地時,將保留旗標 Never
設定為 。
會話到期
您可以設定資料流 MQTT 用戶端的工作階段到期間隔。 如果數據流用戶端中斷連線,會話到期間隔是 MQTT 會話維持的時間上限。 預設值是 600 秒。 若要設定工作階段到期間隔:
在 [作業體驗數據流端點設定] 頁面中,選取 [ 進階 ] 索引卷標,然後使用 [會話到期 ] 字段來指定會話到期間隔。
MQTT 或 WebSocket 通訊協定
根據預設,不會啟用 WebSockets。 若要透過 WebSocket 使用 MQTT,請將 protocol
欄位設定為 WebSockets
。
在 [作業體驗數據流端點設定] 頁面中,選取 [ 進階 ] 索引標籤,然後使用 [ 通訊協定 ] 字段來指定通訊協定。
最大內飛訊息
您可以設定資料流 MQTT 用戶端可以擁有的最大內飛訊息數目。 預設值為 100。
在 [作業體驗數據流端點設定] 頁面中,選取 [進階 ] 索引卷標,然後使用 [執行中訊息 上限] 字段來指定飛行訊息數目上限。
針對當 MQTT 端點作為來源使用時訂閱,這是接收上限。 若要在 MQTT 端點作為目的地時發布,這是等候通知之前要傳送的訊息數目上限。
保持運作
您可以設定資料流 MQTT 用戶端的保持運作間隔。 保持運作間隔是數據流用戶端在傳送 PINGREQ 訊息給訊息代理程式之前可以閒置的最大時間。 預設值是 60 秒。
在 [作業體驗數據流端點設定] 頁面中,選取 [ 進階 ] 索引卷標,然後使用 [ 保持運作 ] 字段來指定保持運作間隔。
CloudEvents
CloudEvents 是一種以常見方式描述事件數據的方法。 CloudEvents 設定可用來以 CloudEvents 格式傳送或接收訊息。 您可以將 CloudEvents 用於事件驅動架構,其中不同的服務需要在相同或不同的雲端提供者中彼此通訊。
選項 cloudEventAttributes
為 Propagate
或CreateOrRemap
。 若要設定 CloudEvents 設定:
在 [作業體驗數據流端點設定] 頁面中,選取 [ 進階 ] 索引標籤,然後使用 [雲端事件屬性 ] 字段來指定 CloudEvents 設定。
下列各節提供 CloudEvents 設定的詳細資訊。
傳播設定
CloudEvent 屬性會針對包含必要屬性的訊息傳遞。 如果訊息未包含必要的屬性,訊息會依目前方式傳遞。
名稱 | 必要 | 範例值 | 輸出值 |
---|---|---|---|
specversion |
Yes | 1.0 |
以目前方式傳遞 |
type |
Yes | ms.aio.telemetry |
以目前方式傳遞 |
source |
Yes | aio://mycluster/myoven |
以目前方式傳遞 |
id |
Yes | A234-1234-1234 |
以目前方式傳遞 |
subject |
No | aio/myoven/telemetry/temperature |
以目前方式傳遞 |
time |
No | 2018-04-05T17:31:00Z |
以目前方式傳遞。 它沒有安息。 |
datacontenttype |
No | application/json |
在選擇性轉換階段之後,已變更為輸出數據內容類型。 |
dataschema |
No | sr://fabrikam-schemas/123123123234234234234234#1.0.0 |
如果在轉換組態中指定輸出數據轉換架構, dataschema 則會變更為輸出架構。 |
CreateOrRemap 設定
CloudEvent 屬性會針對包含必要屬性的訊息傳遞。 如果訊息未包含必要的屬性,則會產生屬性。
名稱 | 必要 | 遺漏時產生的值 |
---|---|---|
specversion |
Yes | 1.0 |
type |
.是 | ms.aio-dataflow.telemetry |
source |
.是 | aio://<target-name> |
id |
Yes | 目標客戶端中產生的 UUID |
subject |
No | 傳送訊息的輸出主題 |
time |
No | 在目標客戶端中產生為 RFC 3339 |
datacontenttype |
No | 在選擇性轉換階段之後變更為輸出數據內容類型 |
dataschema |
No | 架構登錄中定義的架構 |
下一步
若要深入了解數據流,請參閱 建立數據流。