管理 Azure IoT Operations Preview 部署的秘密
重要
Azure IoT Operations Preview – 由 Azure Arc 啟用目前處於預覽狀態。 您不應該在生產環境中使用此預覽軟體。
請參閱 Microsoft Azure 預覽版增補使用規定,以了解適用於 Azure 功能 (搶鮮版 (Beta)、預覽版,或尚未正式發行的版本) 的法律條款。
Azure IoT Operations Preview 中的秘密管理會使用 Azure 金鑰保存庫 作為雲端上的受控保存庫解決方案,並使用秘密存放區 CSI 驅動程式從雲端提取秘密,並將其儲存在邊緣。
必要條件
- 已啟用 Arc 的 Kubernetes 叢集。 如需詳細資訊,請參閱 準備叢集。
在叢集上設定秘密存放區
Azure IoT 作業支援 金鑰保存庫 來儲存秘密和憑證。 az iot ops init
Azure CLI 命令會將設定服務主體的步驟自動化,以授與密鑰保存庫的存取權,以及設定執行 Azure IoT 作業所需的秘密。
如需詳細資訊,請參閱 將 Azure IoT Operations Preview 延伸模組部署至 Kubernetes 叢集。
手動設定服務主體和 金鑰保存庫
如果執行命令的 az iot ops init
Azure 帳戶沒有查詢 Microsoft Graph 並建立服務主體的許可權,您可以在執行 CLI 命令時事先準備這些自變數,並在執行 CLI 命令時使用額外的自變數,如部署 Azure IoT 作業延伸模組中所述。
設定服務主體以透過 Microsoft Entra ID 與 金鑰保存庫 互動
請遵循下列步驟,為 Azure IoT Operations 應用程式建立新的應用程式註冊,以用來驗證 金鑰保存庫。
首先,使用 Microsoft Entra 識別子註冊應用程式:
在 Azure 入口網站 搜尋列中,搜尋並選取 [Microsoft Entra ID]。
從 [Microsoft 項目標識符] 功能表的 [管理] 區段中選取 [應用程式註冊]。
選取新增註冊。
在 [ 註冊應用程式 ] 頁面上,提供下列資訊:
欄位 值 名稱 提供應用程式的名稱。 支援的帳戶類型 請確定只選取此組織目錄中的帳戶(<僅限YOUR_TENANT_NAME> - 單一租使用者)。 重新導向URI 選取 [Web ] 作為平臺。 您可以將網址保留空白。 選取註冊。
建立應用程式時,系統會將您導向至其資源頁面。
從應用程式註冊概觀頁面複製應用程式 (client) 識別碼。 使用 命令執行 Azure IoT 作業部署
az iot ops init
時,您將使用此值作為自變數。
接下來,為您的應用程式提供 金鑰保存庫 許可權:
在應用程式的 [資源] 頁面上,從應用程式功能表的 [管理] 區段選取 [API 許可權]。
選取新增權限。
在 [要求 API 許可權] 頁面上,向下捲動並選取 [Azure 金鑰保存庫]。
選取委派的權限。
核取方塊以選取 user_impersonation 許可權。
選取新增權限。
建立已新增至 Kubernetes 叢集的用戶端密碼,以向密鑰保存庫進行驗證:
在應用程式的資源頁面上,從應用程式功能表的 [管理] 區段選取 [憑證和秘密]。
選取 [新用戶端密碼]。
提供秘密的選擇性描述,然後選取 [ 新增]。
從新的秘密複製 [值]。 您稍後會在執行
az iot ops init
時使用此值。
擷取服務主體物件標識碼:
- 在應用程式的 [概觀] 頁面上,於 [基本資訊] 區段底下,選取 [本機目錄中受控應用程式] 底下的 [應用程式名稱] 連結。 這會開啟企業應用程式屬性。 複製執行 時
az iot ops init
要使用的物件識別碼。
建立金鑰保存庫
建立新的 Azure 金鑰保存庫 實例,並確定它已將許可權模型設定為保存庫存取原則。
az keyvault create --enable-rbac-authorization false --name "<your unique key vault name>" --resource-group "<the name of the resource group>"
如果您有現有的金鑰保存庫,您可以執行下列命令來變更許可權模型:
az keyvault update --name "<your unique key vault name>" --resource-group "<the name of the resource group>" --enable-rbac-authorization false
當您執行 az iot ops init
時,將需要 金鑰保存庫 資源識別碼。 若要擷取資源標識碼,請執行:
az keyvault show --name "<your unique key vault name>" --resource-group "<the name of the resource group>" --query id -o tsv
在 金鑰保存庫 中設定服務主體存取原則
新建立的服務主體需要 秘密list
和 get
存取原則,Azure IoT 作業才能使用秘密存放區。
若要管理 金鑰保存庫 存取原則,登入 CLI 的主體需要足夠的 Azure 許可權。 在角色型 存取控制 (RBAC) 模型中,此許可權包含在 金鑰保存庫 參與者或更高角色中。
提示
如果您使用登入的 CLI 主體來建立金鑰保存庫,您可能已經有正確的許可權。 不過,如果您要指向不同的或現有的密鑰保存庫,您應該檢查您是否有足夠的許可權可設定存取原則。
執行下列命令,將秘密list
和get
許可權指派給服務主體。
az keyvault set-policy --name "<your unique key vault name>" --resource-group "<the name of the resource group>" --object-id <Object ID copied from Enterprise Application SP in Microsoft Entra ID> --secret-permissions get list
將服務主體和 金鑰保存庫 自變數傳遞至 Azure IoT 作業部署
遵循部署 Azure IoT 作業延伸模組指南時,請將其他旗標傳遞至 az iot ops init
命令,以使用預先設定的服務主體和密鑰保存庫。
下列範例示範如何準備 Azure IoT 作業的叢集,而不需使用 --no-deploy
旗標完全部署。 您也可以針對預設的 Azure IoT 作業部署執行命令,而不需要此自變數。
az iot ops init --name "<your unique key vault name>" --resource-group "<the name of the resource group>" \
--kv-id <Key Vault Resource ID> \
--sp-app-id <Application registration App ID (client ID) from Microsoft Entra ID> \
--sp-object-id <Object ID copied from Enterprise Application in Microsoft Entra ID> \
--sp-secret "<Client Secret from App registration in Microsoft Entra ID>" \
--no-deploy
命令採用的一個步驟 init
是確保 Azure IoT 作業所需的所有秘密提供者類別(SPC)在密鑰保存庫中設定預設秘密。 如果預設秘密的值不存在 init
,將會建立一個。 此步驟要求登入 CLI 的主體具有秘密 set
許可權。 如果您想要使用現有的秘密做為預設 SPC 秘密,您可以使用 參數指定它 --kv-sat-secret-name
,在此情況下,登入的主體只需要秘密 get
許可權。
將秘密新增至 Azure IoT 作業元件
在叢集上設定秘密存放區之後,您可以建立並新增 金鑰保存庫 秘密。
使用您需要的任何名稱和值,在 金鑰保存庫 中建立秘密。 您可以使用 Azure 入口網站 或 az keyvault secret set 命令來建立秘密。
在您的叢集上,識別您要新增秘密之元件的秘密提供者類別 (SPC)。 例如:
aio-default-spc
。 使用下列命令列出叢集上的所有 SPC:kubectl get secretproviderclasses -A
在慣用的文字編輯器中開啟檔案。 如果您使用 k9s,請輸入
e
來編輯。將秘密物件新增至下方
spec.parameters.objects.array
的清單。 例如:spec: parameters: keyvaultName: my-key-vault objects: | array: - | objectName: PlaceholderSecret objectType: secret objectVersion: ""
儲存您的變更,並將其套用至您的叢集。 如果您使用 k9s,則會自動套用變更。
CSI 驅動程式會使用輪詢間隔來更新秘密,因此在下次輪詢間隔之前,Pod 無法使用新的秘密。 若要立即更新元件,請重新啟動元件的 Pod。 例如,若要重新啟動數據處理者元件,請執行下列命令:
kubectl delete pod aio-dp-reader-worker-0 -n azure-iot-operations
kubectl delete pod aio-dp-runner-worker-0 -n azure-iot-operations
Azure IoT MQ 預覽秘密
使用適用於 Azure IoT MQ 預覽的 Azure 金鑰保存庫 來管理秘密的步驟不同。 如需詳細資訊,請參閱使用 金鑰保存庫 管理 MQ 秘密。