分享方式:


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

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

使用 Microsoft Entra ID 驗證存取權和使用 Azure RBAC 控制權限,可提供比安全性權杖更高的安全性且更容易使用。 若要將安全性權杖中固有的潛在安全性問題降至最低,建議您盡可能強制執行 Microsoft Entra 驗證

注意

IoT 中樞「裝置 API」不支援使用 Microsoft Entra ID 進行驗證 (例如,裝置到雲端訊息,以及更新報告屬性)。 請使用對稱金鑰X.509 來向 IoT 中樞驗證裝置。

驗證和授權

驗證是證明您確實是您本人的程序。 驗證會向 Azure IoT 中樞確認使用者或裝置的身分識別。 有時會簡稱為 AuthN (驗證)。

授權是在 Azure IoT 中樞上確認已驗證使用者或裝置權限的流程。 授權指定您可以存取哪些資源和命令,以及您可以使用這些資源和命令執行的動作。 授權 (Authorization) 有時會被簡稱為 AuthZ

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

驗證 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 角色型存取取代存取權。

如果您使用裝置佈建服務,請勿繼續進行

  1. 確定您的服務用戶端和使用者對 IoT 中樞具有足夠的存取權。 遵循最低權限原則

  2. Azure 入口網站中,移至您的 IoT 中樞。

  3. 在左窗格中,選取 [共用存取原則]

  4. 在 [使用共用存取原則進行連線] 底下,選取 [拒絕],然後檢閱警告。

    螢幕擷取畫面:顯示如何關閉 IoT 中樞共用存取原則。

  5. 選取 [儲存]。

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

從 Azure 入口網站存取 Microsoft Entra ID

您可以使用共用存取原則或 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 驗證。 您可以使用 --auth-type 參數,來控制用於執行命令的驗證類型,其接受 keylogin 值。 key 值為預設值。

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

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

如需詳細資訊,請參閱適用於 Azure CLI 的 Azure IoT 延伸模組發行頁面 (英文)。

SDK 範例

下一步