在 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 叢集上啟用工作負載身分識別:
使用 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
使用 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"
建立 K3s 組態檔:
sudo nano /etc/rancher/k3s/config.yaml
將下列內容新增至 config.yaml 檔案:
kube-apiserver-arg: - service-account-issuer=<SERVICE_ACCOUNT_ISSUER> - service-account-max-token-expiration=24h
儲存並關閉檔案編輯器。
重新啟動 k3s:
systemctl restart k3s
設定秘密管理
Azure IoT 作業的秘密管理會使用秘密存放區擴充功能來同步處理來自 Azure 金鑰保存庫的秘密,並將其儲存在邊緣做為 Kubernetes 秘密。 秘密存放區擴充功能需要使用者指派的受控識別,且可存取儲存秘密的 Azure 金鑰保存庫。 若要深入瞭解,請參閱 什麼是 Azure 資源的受控識別?。
若要設定秘密管理:
建立用來儲存秘密的 Azure 金鑰保存庫,並提供您的使用者帳戶許可權,以使用
Key Vault Secrets Officer
角色管理秘密。使用 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 作業元件,例如數據流端點,會針對雲端連線使用使用者指派的受控識別。 建議您使用與用來設定秘密管理的不同身分識別。
-
注意
您必須將身分識別許可權授與您使用受控識別的雲端資源。
使用 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
現在,您可以在數據流端點中使用此受控識別來進行雲端連線。