共用方式為


在 Azure IoT 作業部署中啟用安全設定

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

如果您未在初始部署期間這麼做,本文提供啟用安全設定的指示。

必要條件

  • 使用測試設定部署的 Azure IoT 作業實例。 例如,請遵循快速入門:在 GitHub Codespaces 中執行 Azure IoT Operations Preview 中的指示

  • 在您的開發電腦上安裝 Azure CLI。 此案例需要 Azure CLI 2.64.0 版或更新版本。 如有必要,請使用 az --version 來檢查您的版本和 az upgrade 更新。 如需詳細資訊,請參閱如何安裝 Azure CLI

  • Azure CLI 的下列擴充功能最新版本:

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

設定工作負載身分識別的叢集

工作負載身分識別是您指派給軟體工作負載的身分識別(例如應用程式、服務、腳本或容器),以驗證及存取其他服務和資源。 您必須在叢集上啟用工作負載身分識別功能,讓 Kubernetes 和 Azure IoT 作業的 Azure 金鑰保存庫 秘密存放區擴充功能可以存取 Microsoft Entra ID 受保護的資源。 若要深入瞭解,請參閱 什麼是工作負載身分識別?

注意

此步驟僅適用於Ubuntu + K3s 叢集。 準備已啟用 Azure Arc 的 Kubernetes 叢集所使用的 Azure Kubernetes Service (AKS) Edge Essentials 快速入門腳本預設會啟用工作負載身分識別。 如果您有 AKS Edge Essentials 叢集,請繼續進行下一節。

如果您不確定 K3s 叢集是否已啟用工作負載識別,請執行 az connectedk8s show 命令來檢查:

az connectedk8s show --name <CLUSTER_NAME> --resource-group <RESOURCE_GROUP> --query "{oidcIssuerEnabled:oidcIssuerProfile.enabled, workloadIdentityEnabled: securityProfile.workloadIdentity.enabled}"

若要在現有的已連線 K3s 叢集上啟用工作負載身分識別:

  1. 使用 az connectedk8s update 命令在叢集上啟用工作負載身分識別功能:

    #!/bin/bash   
    
    # Variable block
    RESOURCE_GROUP="<RESOURCE_GROUP>"
    CLUSTER_NAME="<CLUSTER_NAME>"
    
    # Enable a workload identity
    az connectedk8s update --resource-group $RESOURCE_GROUP \
                           --name $CLUSTER_NAME \
                           --enable-oidc-issuer --enable-workload-identity 
    
  2. 使用 az connectedk8s show 命令來取得叢集的簽發者 URL。 您稍後會在 K3s 組態檔中新增 URL。

    #!/bin/bash
    
    # Variable block
    RESOURCE_GROUP="<RESOURCE_GROUP>"
    CLUSTER_NAME="<CLUSTER_NAME>"
    
    # Get the cluster's issuer URL
    SERVICE_ACCOUNT_ISSUER=$(az connectedk8s show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query oidcIssuerProfile.issuerUrl --output tsv)
    echo "SERVICE_ACCOUNT_ISSUER = $SERVICE_ACCOUNT_ISSUER"
    
  3. 建立 K3s 組態檔:

    sudo nano /etc/rancher/k3s/config.yaml
    
  4. 將下列內容新增至 config.yaml 檔案:

    kube-apiserver-arg:
     - service-account-issuer=<SERVICE_ACCOUNT_ISSUER>
     - service-account-max-token-expiration=24h 
    
  5. 儲存並關閉檔案編輯器。

  6. 重新啟動 k3s:

    systemctl restart k3s 
    

設定秘密管理

Azure IoT 作業的秘密管理會使用秘密存放區擴充功能來同步處理來自 Azure 金鑰保存庫的秘密,並將其儲存在邊緣做為 Kubernetes 秘密。 秘密存放區擴充功能需要使用者指派的受控識別,且可存取儲存秘密的 Azure 金鑰保存庫。 若要深入瞭解,請參閱 什麼是 Azure 資源的受控識別?

若要設定秘密管理:

  1. 建立用來儲存秘密的 Azure 金鑰保存庫,並提供您的使用者帳戶許可權,以使用Key Vault Secrets Officer角色管理秘密

  2. 為秘密存放區擴充功能建立使用者指派的受控識別

  3. 使用 az iot ops secretsync enable 命令來設定 Azure IoT 作業實例以進行秘密同步處理。 此命令:

    • 使用使用者指派的受控識別來建立同盟身分識別認證。
    • 將角色指派新增至使用者指派的受控識別,以存取 Azure 金鑰保存庫。
    • 新增與 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 Operations Preview 部署 的秘密,以瞭解如何搭配 Azure IoT 作業使用秘密。

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

某些 Azure IoT 作業元件,例如數據流端點,會針對雲端連線使用使用者指派的受控識別。 建議您使用與用來設定秘密管理的不同身分識別。

  1. 建立用於雲端連線的使用者指派受控識別

    注意

    您必須將身分識別許可權授與您使用受控識別的雲端資源。

  2. 使用 az iot ops identity assign 命令,將身分識別指派給 Azure IoT Operations 實例。 此命令也會使用所指出叢集的 OIDC 簽發者和 Azure IoT Operations 服務帳戶的 OIDC 簽發者來建立同盟身分識別認證。

    # 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
    

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