Azure IoT 作業會使用 TLS 來加密所有元件之間的通訊。 本文說明如何管理內部通訊和外部通訊的憑證,以及如何在生產環境中引入您自己的證書授權機構(CA)以進行內部通訊。
先決條件
- 若要管理外部通訊的憑證,您需要部署具有安全設定的 Azure IoT 作業實例。 如果您使用測試設定部署 Azure IoT 作業,您必須先 啟用安全設定。
管理內部通訊的憑證
Azure IoT 作業中的所有通訊都會使用 TLS 加密。 為了協助您開始使用,Azure IoT 操作會使用 TLS 伺服器憑證的預設根 CA 和簽發者來部署。 您可以使用預設設定進行開發和測試。 針對生產部署,我們建議 使用您自己的 CA 簽發者和 企業 PKI 解決方案。
TLS 伺服器憑證的預設自我簽署簽發者和根 CA 憑證
為了協助您開始使用,Azure IoT 操作會使用 TLS 伺服器憑證的預設自我簽署簽發者和根 CA 憑證來部署。 您可以使用此簽發者進行開發和測試。 Azure IoT 操作會使用 cert-manager 來管理 TLS 憑證,以及使用 trust-manager 來將信任套件組合散發至元件。
CA 憑證是自我簽署,且不受 Azure IoT 操作以外的任何用戶端信任。 CA 憑證的主體為
CN=Azure IoT Operations Quickstart Root CA - Not for Production
。 CA 憑證會由 cert-manager 自動輪替。根 CA 憑證會儲存在
azure-iot-operations-aio-ca-certificate
命名空間下名為cert-manager
的 Kubernetes 祕密中。根 CA 憑證的公用部分會儲存在
azure-iot-operations-aio-ca-trust-bundle
命名空間下名為azure-iot-operations
的 ConfigMap 中。 您可以從 ConfigMap 擷取 CA 憑證,並使用 kubectl 和 openssl 加以檢查。 當 CA 憑證由 cert-manager 輪替時,ConfigMap 會由 trust-manager 更新。kubectl get configmap azure-iot-operations-aio-ca-trust-bundle -n azure-iot-operations -o "jsonpath={.data['ca\.crt']}" | openssl x509 -text -noout
Certificate: Data: Version: 3 (0x2) Serial Number: <SERIAL-NUMBER> Signature Algorithm: sha256WithRSAEncryption Issuer: O=Microsoft, CN=Azure IoT Operations Quickstart Root CA - Not for Production Validity Not Before: Sep 18 20:42:19 2024 GMT Not After : Sep 18 20:42:19 2025 GMT Subject: O=Microsoft, CN=Azure IoT Operations Quickstart Root CA - Not for Production Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: <MODULUS> Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: <SUBJECT-KEY-IDENTIFIER> Signature Algorithm: sha256WithRSAEncryption [Signature]
預設情況下,
azure-iot-operations namespace
中已設定名為azure-iot-operations-aio-certificate-issuer
的 CA 簽發者。 它會用作 IoT 作業的所有 TLS 伺服器憑證的通用簽發者。 MQTT 代理程式會使用由自我簽署簽發者簽署、從相同 CA 憑證建立的簽發者,針對連接埠 18883 上的預設 TLS 接聽程式核發 TLS 伺服器憑證。 您可以使用下列命令來檢查簽發者:kubectl get clusterissuer azure-iot-operations-aio-certificate-issuer -o yaml
apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: creationTimestamp: "2024-09-18T20:42:17Z" generation: 1 name: azure-iot-operations-aio-certificate-issuer resourceVersion: "36665" uid: 592700a6-95e0-4788-99e4-ea93934bd330 spec: ca: secretName: azure-iot-operations-aio-ca-certificate status: conditions: - lastTransitionTime: "2024-09-18T20:42:22Z" message: Signing CA verified observedGeneration: 1 reason: KeyPairVerified status: "True" type: Ready
攜帶您自己的簽發者
針對生產環境部署,建議您使用企業 PKI 設定 Azure IoT 作業來管理憑證,而且您攜帶自己的 CA 簽發者可搭配企業 PKI 使用,而不是使用預設的自我簽署簽發者來發行 TLS 憑證以進行內部通訊。
若要使用您自己的簽發者設定 Azure IoT 作業以進行內部通訊,請在 將實例部署至叢集之前,先使用下列步驟:
遵循準備您的叢集中的步驟來設定叢集。
安裝 cert-manager。 cert-manager 會管理 TLS 憑證。
安裝 trust-manager。 安裝信任管理員時,將
trust namespace
設定為 cert-manager。 例如:helm upgrade trust-manager jetstack/trust-manager --install --namespace cert-manager --set app.trust.namespace=cert-manager --wait
cert-manager 可用來將信任套件組合散發至元件。
建立 Azure IoT 操作命名空間。
kubectl create namespace azure-iot-operations
部署可與 cert-manager 搭配使用的簽發者。 如需所有支援的簽發者清單,請參閱 cert-manager 簽發者。
簽發者可以是
ClusterIssuer
或Issuer
類型。 如果使用Issuer
,則必須在 Azure IoT 操作命名空間中建立簽發者資源。在 Azure IoT 操作命名空間中設定信任套件組合。
若要設定信任套件組合,請在 Azure IoT 操作命名空間中建立 ConfigMap。 以您選擇的私密金鑰名稱,將 CA 憑證的公開金鑰部分放入設定對應中。
取得 CA 憑證的公開金鑰部分。 取得公開金鑰的步驟取決於您選擇的簽發者。
建立 ConfigMap。 例如:
kubectl create configmap -n azure-iot-operations <YOUR_CONFIGMAP_NAME> --from-file=<CA_CERTIFICATE_FILENAME_PEM_OR_DER>
遵循部署 Azure IoT 操作中的步驟來部署,並進行一些變更。
準備叢集時新增
--user-trust
參數。 例如:az iot ops init --subscription <SUBSCRIPTION_ID> --cluster <CLUSTER_NAME> -g <RESOURCE_GROUP> --user-trust
在部署 Azure IoT 操作時,以必要資訊新增
--trust-settings
參數。 例如:
az iot ops create --subscription <SUBSCRIPTION_ID> -g <RESOURCE_GROUP> --cluster <CLUSTER_NAME> --custom-location <CUSTOM_LOCATION> -n <INSTANCE_NAME> --sr-resource-id <SCHEMAREGISTRY_RESOURCE_ID> --trust-settings configMapName=<CONFIGMAP_NAME> configMapKey=<CONFIGMAP_KEY_WITH_PUBLICKEY_VALUE> issuerKind=<CLUSTERISSUER_OR_ISSUER> issuerName=<ISSUER_NAME>
管理外部通訊的憑證
外部通訊的憑證管理體驗會使用 Azure Key Vault 作為雲端上的受控保存庫解決方案。 憑證會新增至金鑰保存庫做為祕密,並透過 Azure Key Vault 祕密存放區延伸模組同步至邊緣作為 Kubernetes 祕密。
例如,OPC UA 的連接器會使用憑證管理體驗,將 OPC UA 用戶端應用程式驗證設定為外部 OPC UA 伺服器。 Azure IoT 作業會管理 OPC UA 連接器的兩個不同的證書存儲:一個用於 信任清單 ,另一個用於 簽發者清單。 若要深入瞭解 OPC UA 連接器如何使用憑證與 OPC UA 伺服器建立相互信任,請參閱 OPC UA 連接器的 OPC UA 憑證基礎結構。
當您 部署具有安全設定的 Azure IoT 作業時,您可以開始將憑證新增至 Azure Key Vault,並將其同步至 Kubernetes 叢集,以用於 OPC UA 連線的信任 清單 和 簽發者清單 存放區:
上傳憑證:上傳憑證,然後新增為 Azure Key Vault 的機密,並透過秘密存放區擴充功能自動同步至叢集。
小提示
- 檢視上傳之後的憑證詳細數據,以確保您在新增至 Azure Key Vault 並同步至叢集之前擁有正確的憑證。
- 使用直覺式名稱,讓您未來可以辨識哪些袐密代表您的祕密。
備註
只是上傳憑證並不會將祕密新增至 Azure Key Vault 並同步至叢集,您必須選取 [套用] 以套用變更。
從 Azure Key Vault 新增:從 Azure Key Vault 新增要同步處理至叢集的現有秘密。
備註
務必選取保存您要同步至叢集之憑證的祕密。 選取不是正確憑證的秘密會導致連線失敗。
您可以使用清單檢視來管理同步處理的憑證。 您可以檢視所有已同步的憑證,並查看它同步的憑證存儲區。
- 若要深入瞭解 信任清單 和 簽發者清單 存放區,請參閱 設定 OPC UA 連接器的 OPC UA 憑證基礎結構。
您也可以刪除同步處理的憑證。 當您刪除同步的憑證時,它只會從 Kubernetes 叢集刪除同步的憑證,而且不會從 Azure Key Vault 刪除包含的秘密參考。 您必須從金鑰保存庫手動刪除憑證密碼。