共用方式為


在 Azure IoT 操作中啟用安全設定

Azure IoT 操作的安全設定包括祕密管理的設定,以及雲端連線的使用者指派受控識別;例如,OPC UA 伺服器或資料流程端點。

本文提供當您未在初始部署期間啟用安全設定時,該如何進行相關操作的指示。

先決條件

  • 已部署具有測試設定的 Azure IoT 操作執行個體。 例如,當您遵循將 Azure IoT 操作部署至已啟用 Arc 的 Kubernetes 叢集 (部分機器翻譯) 中的指示時,您選擇了 [測試設定]

  • 開發機器上已安裝 Azure CLI。 此案例需要 Azure CLI 2.53.0 版或更高版本。 使用 az --version 檢查您的版本,並視需要更新 az upgrade。 如需詳細資訊,請參閱如何安裝 Azure CLI (部分機器翻譯)。

  • 適用於 Azure CLI 的最新版 connectedk8s 延伸模組。 使用下列命令新增此延伸模組,或將延伸模組更新為最新版本:

    az extension add --upgrade --name connectedk8s
    
  • 適用於 Azure CLI 的 Azure IoT 操作延伸模組。 使用下列命令新增此延伸模組,或將延伸模組更新為最新版本:

    az extension add --upgrade --name azure-iot-ops
    

啟用叢集以使用安全設定

若要啟用 Azure IoT 操作執行個體的祕密同步處理,您必須將叢集啟用為 OIDC 簽發者,並讓叢集能夠使用工作負載身分識別同盟。 此設定是必要的,以便 Azure Key Vault Secret Store 擴充套件能夠同步 Azure Key Vault 中的秘密,並在邊緣將它們儲存為 Kubernetes 秘密。

若為 Azure Kubernetes Service (AKS) 叢集,您只能在建立叢集時啟用 OIDC 簽發者和工作負載身分識別功能。 若為 AKS 邊緣程式集上的叢集,自動化指令碼預設會啟用這些功能。 若為 Azure Local 上的 AKS 叢集,則請遵循在由 Azure Arc 叢集啟用的 AKS 上部署和設定工作負載身分識別 (部分機器翻譯) 的步驟以建立新的叢集 (如果您沒有具有所需功能的叢集的話)。

若為 Kubernetes 上的 k3s 叢集,您可以更新現有的叢集。 若要啟用和設定這些功能,請使用下列步驟:

  1. 更新叢集以啟用 OIDC 簽發者和工作負載身分識別。

    az connectedk8s update -n <CLUSTER_NAME> -g <RESOURCE_GROUP> --enable-oidc-issuer --enable-workload-identity
    

    如果您在建立叢集時已啟用 OIDC 簽發者和工作負載身分識別功能,則不需要再次執行先前的命令。 使用下列命令來為叢集檢查 OIDC 簽發者和工作負載身分識別功能的狀態:

    az connectedk8s show -g <RESOURCE_GROUP> -n <CLUSTER_NAME> --query "{ClusterName:name, OIDCIssuerEnabled:oidcIssuerProfile.enabled, WorkloadIdentityEnabled:securityProfile.workloadIdentity.enabled}"
    
  2. 取得叢集的簽發者 URL。

    az connectedk8s show -g <RESOURCE_GROUP> -n <CLUSTER_NAME> --query oidcIssuerProfile.issuerUrl --output tsv
    

    記下此命令的輸出,以在後續步驟中使用。

  3. 在您部署 Kubernetes 叢集的電腦上建立 k3s 組態檔:

    sudo nano /etc/rancher/k3s/config.yaml
    
  4. 將下列內容新增至 config.yaml 檔案,並將 <SERVICE_ACCOUNT_ISSUER> 預留位置取代為您先前記下的叢集簽發者 URL:

    kube-apiserver-arg:
    - service-account-issuer=<SERVICE_ACCOUNT_ISSUER>
    - service-account-max-token-expiration=24h
    

    儲存檔案,並結束 nano 編輯器。

  5. 重新啟動 k3s 服務:

    sudo systemctl restart k3s
    

設定祕密管理

Azure IoT 作業的機密管理會使用機密存放區擴充套件來同步 Azure Key Vault 的機密,並將其儲存在邊緣作為 Kubernetes 的機密。 密碼存放區延伸模組需要使用者指派的受控識別,且這個受控識別必須能夠存取祕密儲存所在的 Azure Key Vault。 若要深入了解,請參閱什麼是 Azure 資源受控識別? (部分機器翻譯)。

若要設定祕密管理:

  1. 建立用來儲存祕密的 Azure Key Vault (部分機器翻譯),並使用 角色Key Vault Secrets Officer (部分機器翻譯)。

  2. 為秘密存放區擴充功能建立使用者指派的受控識別,以用來存取密鑰保存庫。

  3. 使用 az iot ops secretsync enable (部分機器翻譯) 命令來設定 Azure IoT 操作執行個體以便能夠使用祕密同步處理。 此命令會:

    • 使用使用者指派的受控識別來建立同盟身分識別認證。
    • 為使用者指派的受控識別新增角色指派,使其能夠存取 Azure Key Vault。
    • 新增與 Azure IoT 操作執行個體相關聯的最小祕密提供者類別。
    # Variable block
    AIO_INSTANCE_NAME="<AIO_INSTANCE_NAME>"
    RESOURCE_GROUP="<RESOURCE_GROUP>"
    USER_ASSIGNED_MI_NAME="<USER_ASSIGNED_MI_NAME>"
    KEYVAULT_NAME="<KEYVAULT_NAME>"
    
    #Get the resource ID of the user-assigned managed identity
    USER_ASSIGNED_MI_RESOURCE_ID=$(az identity show --name $USER_ASSIGNED_MI_NAME --resource-group $RESOURCE_GROUP --query id --output tsv)
    
    #Get the resource ID of the key vault
    KEYVAULT_RESOURCE_ID=$(az keyvault show --name $KEYVAULT_NAME --resource-group $RESOURCE_GROUP --query id --output tsv)
    
    #Enable secret synchronization
    az iot ops secretsync enable --instance $AIO_INSTANCE_NAME \
                                 --resource-group $RESOURCE_GROUP \
                                 --mi-user-assigned $USER_ASSIGNED_MI_RESOURCE_ID \
                                 --kv-resource-id $KEYVAULT_RESOURCE_ID
    

現在祕密同步處理的設定已完成,接下來您可以參閱管理 Azure IoT 操作部署的祕密,以了解如何搭配使用祕密與 Azure IoT 操作。

設定雲端連線的使用者指派受控識別

某些 Azure IoT 操作元件 (例如資料流程端點) 會使用使用者指派的受控識別來進行雲端連線。 我們的建議是,您使用的身分識別要與用來設定祕密管理的身分識別不同。

  1. 建立使用者指派的受控識別 (部分機器翻譯),以用於雲端連線。

    注意

    您必須向這個受控識別授與權限,該權限能夠用來存取會使用這個受控識別的雲端資源。

  2. 使用 az iot ops identity assign (部分機器翻譯) 命令,將身分識別指派給 Azure IoT 操作執行個體。 此命令也會使用所指出連線叢集的 OIDC 簽發者和 Azure IoT 操作的服務帳戶,來建立同盟身分識別認證。

    # Variable block
    AIO_INSTANCE_NAME="<AIO_INSTANCE_NAME>"
    RESOURCE_GROUP="<RESOURCE_GROUP>"
    USER_ASSIGNED_MI_NAME="<USER_ASSIGNED_MI_NAME FOR CLOUD CONNECTIONS>"
    
    #Get the resource ID of the user-assigned managed identity
    USER_ASSIGNED_MI_RESOURCE_ID=$(az identity show --name $USER_ASSIGNED_MI_NAME --resource-group $RESOURCE_GROUP --query id --output tsv)
    
    #Assign the identity to the Azure IoT Operations instance
    az iot ops identity assign --name $AIO_INSTANCE_NAME \
                               --resource-group $RESOURCE_GROUP \
                               --mi-user-assigned $USER_ASSIGNED_MI_RESOURCE_ID
    

現在,您可以在資料流程端點中使用此受控識別來進行雲端連線了。