Share via


管理 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 識別子註冊應用程式:

  1. 在 Azure 入口網站 搜尋列中,搜尋並選取 [Microsoft Entra ID]。

  2. [Microsoft 項目標識符] 功能表的 [管理] 區段中選取 [應用程式註冊]。

  3. 選取新增註冊

  4. 在 [ 註冊應用程式 ] 頁面上,提供下列資訊:

    欄位
    名稱 提供應用程式的名稱。
    支援的帳戶類型 請確定只選取此組織目錄中的帳戶(<僅限YOUR_TENANT_NAME> - 單一租使用者)。
    重新導向URI 選取 [Web ] 作為平臺。 您可以將網址保留空白。
  5. 選取註冊

    建立應用程式時,系統會將您導向至其資源頁面。

  6. 從應用程式註冊概觀頁面複製應用程式 (client) 識別碼。 使用 命令執行 Azure IoT 作業部署 az iot ops init 時,您將使用此值作為自變數。

接下來,為您的應用程式提供 金鑰保存庫 許可權:

  1. 在應用程式的 [資源] 頁面上,從應用程式功能表的 [管理] 區段選取 [API 許可權]。

  2. 選取新增權限

  3. 在 [要求 API 許可權] 頁面上,向下捲動並選取 [Azure 金鑰保存庫]。

  4. 選取委派的權限

  5. 核取方塊以選取 user_impersonation 許可權。

  6. 選取新增權限

建立已新增至 Kubernetes 叢集的用戶端密碼,以向密鑰保存庫進行驗證:

  1. 在應用程式的資源頁面上,從應用程式功能表的 [管理] 區段選取 [憑證和秘密]。

  2. 選取 [新用戶端密碼]

  3. 提供秘密的選擇性描述,然後選取 [ 新增]。

  4. 從新的秘密複製 [值]。 您稍後會在執行 az iot ops init時使用此值。

擷取服務主體物件標識碼:

  1. 在應用程式的 [概觀] 頁面上,於 [基本資訊] 區段底下,選取 [本機目錄中受控應用程式] 底下的 [應用程式名稱] 連結。 這會開啟企業應用程式屬性。 複製執行 時 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

在 金鑰保存庫 中設定服務主體存取原則

新建立的服務主體需要 秘密listget 存取原則,Azure IoT 作業才能使用秘密存放區。

若要管理 金鑰保存庫 存取原則,登入 CLI 的主體需要足夠的 Azure 許可權。 在角色型 存取控制 (RBAC) 模型中,此許可權包含在 金鑰保存庫 參與者或更高角色中。

提示

如果您使用登入的 CLI 主體來建立金鑰保存庫,您可能已經有正確的許可權。 不過,如果您要指向不同的或現有的密鑰保存庫,您應該檢查您是否有足夠的許可權可設定存取原則。

執行下列命令,將秘密listget許可權指派給服務主體。

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 作業元件

在叢集上設定秘密存放區之後,您可以建立並新增 金鑰保存庫 秘密。

  1. 使用您需要的任何名稱和值,在 金鑰保存庫 中建立秘密。 您可以使用 Azure 入口網站az keyvault secret set 命令來建立秘密。

  2. 在您的叢集上,識別您要新增秘密之元件的秘密提供者類別 (SPC)。 例如: aio-default-spc 。 使用下列命令列出叢集上的所有 SPC:

    kubectl get secretproviderclasses -A
    
  3. 在慣用的文字編輯器中開啟檔案。 如果您使用 k9s,請輸入 e 來編輯。

  4. 將秘密物件新增至下方 spec.parameters.objects.array的清單。 例如:

    spec:
      parameters:
        keyvaultName: my-key-vault
        objects: |
          array:
            - |
              objectName: PlaceholderSecret
              objectType: secret
              objectVersion: ""
    
  5. 儲存您的變更,並將其套用至您的叢集。 如果您使用 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 秘密。