使用 Microsoft Entra ID 控制對IoT 中樞的存取

您可以使用 Microsoft Entra ID 來驗證Azure IoT 中樞服務 API 的要求,例如 建立裝置身分識別 叫用直接方法 。 您也可以使用 Azure 角色型存取控制 (Azure RBAC) 來授權這些相同的服務 API。 藉由將這些技術一起使用,您可以將存取IoT 中樞服務 API 的許可權授與 Microsoft Entra 安全性主體。 此安全性主體可以是使用者、群組或應用程式服務主體。

使用 Microsoft Entra 識別碼來驗證存取權,並使用 Azure RBAC 來控制許可權,可改善安全性權杖的安全性和使用方式。 若要將安全性權杖固有的潛在安全性問題降到最低,建議您 盡可能 強制執行 Microsoft Entra 驗證。

注意

IoT 中樞 裝置 API 不支援使用 Microsoft Entra 識別碼 進行驗證(例如裝置到雲端訊息和更新報告屬性)。 使用 對稱金鑰 X.509 來驗證裝置以IoT 中樞。

驗證和授權

驗證 是證明您是誰的程式。 驗證會驗證使用者或裝置的身分識別,以IoT 中樞。 它有時會縮短為 AuthN 授權 是確認IoT 中樞上已驗證使用者或裝置許可權的程式。 它會指定您可以存取哪些資源和命令,以及您可以使用這些資源和命令執行的動作。 授權有時會縮短為 AuthZ

當 Microsoft Entra 安全性主體要求存取IoT 中樞服務 API 時,主體的身分識別會先 進行 驗證。 若要進行驗證,要求必須在執行時間包含 OAuth 2.0 存取權杖。 要求權杖的資源名稱為 https://iothubs.azure.net 。 如果應用程式在 Azure 資源中執行,例如 Azure VM、Azure Functions 應用程式或Azure App 服務應用程式,它可以表示為 受控識別

驗證 Microsoft Entra 主體之後,下一個步驟是 授權 。 在此步驟中,IoT 中樞會使用 Microsoft Entra 角色指派服務來判斷主體擁有的許可權。 如果主體的許可權符合要求的資源或 API,IoT 中樞授權要求。 因此,此步驟需要將一或多個 Azure 角色指派給安全性主體。 IoT 中樞提供一些具有一般許可權群組的內建角色。

使用 Azure RBAC 角色指派來管理對IoT 中樞的存取權

使用 Microsoft Entra ID 和 RBAC,IoT 中樞需要要求 API 的主體具有適當的授權層級許可權。 若要授與主體許可權,請為主體指派角色。

若要確保最低許可權,請一律在可能的最低 資源範圍 指派適當的角色,這可能是IoT 中樞範圍。

IoT 中樞提供下列 Azure 內建角色,以使用 Microsoft Entra ID 和 RBAC 來授權存取IoT 中樞服務 API:

角色 描述
IoT 中樞資料參與者 允許完整存取資料平面作業IoT 中樞。
IoT 中樞資料讀取器 允許完整讀取IoT 中樞資料平面屬性。
IoT 中樞登錄參與者 允許完整存取IoT 中樞裝置登錄。
IoT 中樞對應項參與者 允許所有IoT 中樞裝置和模組對應項的讀取和寫入存取權。

您也可以結合 所需的許可權 ,定義要與IoT 中樞搭配使用的自訂角色。 如需詳細資訊,請參閱 建立 Azure 角色型存取控制 的自訂角色。

資源範圍

將 Azure RBAC 角色指派給安全性主體之前,請先判斷安全性主體應具備的存取範圍。 最好只授與最窄的範圍。 在更廣泛的範圍內定義的 Azure RBAC 角色會由其下方的資源繼承。

此清單描述您可以從最窄的範圍開始,將存取範圍設定為IoT 中樞的範圍:

  • IoT 中樞。 在此範圍中,角色指派會套用至 IoT 中樞。 沒有小於個別 IoT 中樞的範圍。 不支援較小範圍的角色指派,例如個別裝置身分識別或對應項區段。
  • 資源群組。 在此範圍中,角色指派會套用至資源群組中的所有 IoT 中樞。
  • 訂用帳戶。 在此範圍內,角色指派會套用至訂用帳戶中所有資源群組中的所有 IoT 中樞。
  • 管理群組。 在此範圍中,角色指派會套用至管理群組中所有訂用帳戶中所有資源群組中的所有 IoT 中樞。

IoT 中樞服務 API 的許可權

下表描述IoT 中樞服務 API 作業可用的許可權。 若要讓用戶端呼叫特定作業,請確定用戶端指派的 RBAC 角色為作業提供足夠的許可權。

RBAC 動作 描述
Microsoft.Devices/IotHubs/devices/read 讀取任何裝置或模組身分識別。
Microsoft.Devices/IotHubs/devices/write 建立或更新任何裝置或模組身分識別。
Microsoft.Devices/IotHubs/devices/delete 刪除任何裝置或模組身分識別。
Microsoft.Devices/IotHubs/twins/read 讀取任何裝置或模組對應項。
Microsoft.Devices/IotHubs/twins/write 寫入任何裝置或模組對應項。
Microsoft.Devices/IotHubs/jobs/read 傳回作業清單。
Microsoft.Devices/IotHubs/jobs/write 建立或更新任何作業。
Microsoft.Devices/IotHubs/jobs/delete 刪除任何作業。
Microsoft.Devices/IotHubs/cloudToDeviceMessages/send/action 將雲端到裝置訊息傳送至任何裝置。
Microsoft.Devices/IotHubs/cloudToDeviceMessages/feedback/action 接收、完成或放棄雲端到裝置訊息意見反應通知。
Microsoft.Devices/IotHubs/cloudToDeviceMessages/queue/purge/action 刪除裝置的所有擱置命令。
Microsoft.Devices/IotHubs/directMethods/invoke/action 在任何裝置或模組上叫用直接方法。
Microsoft.Devices/IotHubs/fileUpload/notifications/action 接收、完成或放棄檔案上傳通知。
Microsoft.Devices/IotHubs/statistics/read 讀取裝置和服務統計資料。
Microsoft.Devices/IotHubs/configurations/read 讀取裝置管理設定。
Microsoft.Devices/IotHubs/configurations/write 建立或更新裝置管理設定。
Microsoft.Devices/IotHubs/configurations/delete 刪除任何裝置管理設定。
Microsoft.Devices/IotHubs/configurations/applyToEdgeDevice/action 將設定內容套用至邊緣裝置。
Microsoft.Devices/IotHubs/configurations/testQueries/action 驗證組態的目標條件和自訂計量查詢。

提示

注意

若要使用 Microsoft Entra ID 從IoT 中樞取得資料, 請設定路由至個別的事件中樞 。 若要存取 內建事件中樞相容端點 ,請使用與先前相同的連接字串(共用存取金鑰)方法。

強制執行 Microsoft Entra 驗證

根據預設,IoT 中樞支援透過 Microsoft Entra ID 和 共用存取原則和安全性權杖 的服務 API 存取。 若要將安全性權杖固有的潛在安全性弱點降到最低,您可以使用共用存取原則來停用存取。

警告

藉由拒絕使用共用存取原則的連線,使用此方法連線的所有使用者和服務都會立即失去存取權。 值得注意的是,由於裝置布建服務 (DPS) 僅支援使用共用存取原則連結 IoT 中樞,因此所有裝置布建流程都會失敗,並出現「未經授權」錯誤。 請小心操作,並計畫以 Microsoft Entra 角色型存取取代存取權。 如果您使用 DPS ,請勿繼續進行。

  1. 請確定您的服務用戶端和使用者有足夠的 IoT 中樞存取 權。 遵循最低許可權 原則。
  2. Azure 入口網站 中,移至您的 IoT 中樞。
  3. 在左窗格中,選取 [共用存取原則 ]。
  4. 在 [使用共用存取原則 連線] 下 ,選取 [ 拒絕 ],然後檢閱警告。 Screenshot that shows how to turn off IoT Hub shared access policies.

您的IoT 中樞服務 API 現在只能透過 Microsoft Entra ID 和 RBAC 存取。

Microsoft Entra ID access from the Azure 入口網站

您可以使用共用存取原則或 Microsoft Entra 許可權,從Azure 入口網站提供IoT 中樞的存取權。

當您嘗試從Azure 入口網站存取IoT 中樞時,Azure 入口網站會先檢查您是否已獲指派 Azure 角色 Microsoft.Devices/iotHubs/listkeys/action 。 如果您有,Azure 入口網站會使用來自共用存取原則的金鑰來存取IoT 中樞。 如果沒有,Azure 入口網站會嘗試使用您的 Microsoft Entra 帳戶存取資料。

若要使用 Microsoft Entra 帳戶從Azure 入口網站存取IoT 中樞,您需要存取IoT 中樞資料資源的許可權(例如裝置和對應項)。 您也需要許可權,才能前往Azure 入口網站中的IoT 中樞資源。 IoT 中樞提供的內建角色會授與裝置和對應項等資源的存取權,但不會授與IoT 中樞資源的存取權。 因此,存取入口網站也需要指派 Azure Resource Manager 角色,例如 讀者 。 讀者角色是不錯的選擇,因為它是最受限制的角色,可讓您流覽入口網站。 它不包含 Microsoft.Devices/iotHubs/listkeys/action 許可權(可透過共用存取原則存取所有IoT 中樞資料資源)。

若要確保帳戶沒有指派許可權以外的存取權,當您建立自訂角色時,請勿包含 Microsoft.Devices/iotHubs/listkeys/action 許可權。 例如,若要建立可讀取裝置身分識別但無法建立或刪除裝置的自訂角色,請建立可:

  • Microsoft.Devices/IotHubs/devices/read具有資料動作。
  • Microsoft.Devices/IotHubs/devices/write沒有資料動作。
  • Microsoft.Devices/IotHubs/devices/delete沒有資料動作。
  • Microsoft.Devices/iotHubs/listkeys/action沒有動作。

然後,請確定帳戶沒有任何其他具有 Microsoft.Devices/iotHubs/listkeys/action 許可權的角色,例如 擁有者 參與者 。 若要允許帳戶具有資源存取權並流覽入口網站,請指派 讀者

從 Azure CLI 存取 Microsoft Entra ID

針對 IoT 中樞 的大部分命令都支援 Microsoft Entra 驗證。 您可以使用 接受 或 login 值的參數 key 來控制用來執行命令 --auth-type 的驗證類型。 值為 key 預設值。

  • --auth-type 具有 key 值時,CLI 會在與IoT 中樞互動時自動探索適當的原則。

  • 當 具有 login 值時 --auth-type ,會使用來自登入主體之 Azure CLI 的存取權杖來進行作業。

如需詳細資訊,請參閱 適用于 Azure CLI 的 Azure IoT 擴充功能版本頁面

SDK 範例

下一步

  • 如需在應用程式中使用 Microsoft Entra ID 的優點詳細資訊,請參閱 與 Microsoft Entra ID 整合。
  • 如需要求使用者和服務主體之 Microsoft Entra ID 存取權杖的詳細資訊,請參閱 Microsoft Entra ID 的驗證案例。

使用裝置布建服務,使用註冊群組 建多個 X.509 裝置。