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 -nooutCertificate: 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 yamlapiVersion: 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 --waitcert-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>
備註
自訂位置名稱的長度上限為 63 個字元。
管理外部通訊的憑證
Azure IoT 營運使用 Azure Key Vault 作為雲端的受控金鑰保存解決方案,並使用適用於 Kubernetes 的 Azure Key Vault Secret Store 擴充功能,將秘密從雲端同步至邊緣,並作為 Kubernetes 秘密儲存。 您可將憑證以秘密的形式新增到 Azure Key Vault,而延伸模組會將它們同步到邊緣端作為 Kubernetes 秘密。
設定 Azure Key Vault 權限
要利用操作經驗在金鑰庫中建立秘密,使用者需要在 Azure 資源層級取得 金鑰庫秘密官 權限。
在測試或開發環境中,請依以下步驟將 Key Vault Secrets Officer 角色指派給使用者,於部署 Azure IoT Operations 實例和 Azure Key Vault 實例的資源群組層級:
要找到資源群組名稱,請前往 operations experience 網頁介面,進入 Instances 頁面,找到你的 Azure IoT Operations 實例。 資源群組名稱顯示在 資源群組 欄位中。
前往 Azure 入口網站 ,然後前往部署 Azure IoT Operations 實例和 Azure Key Vault 實例的資源群組。
小提示
使用 Azure 入口網站頂端的搜尋框,輸入資源群組名稱即可快速找到。
從左側選單選擇存取控制(IAM)。 然後選擇 + 新增 > 角色分配。
在 角色 標籤中,從角色列表中選擇 「Key Vault 密碼官」,然後選擇 「下一步」。
在「成員」標籤中,選擇使用者、群組或服務主體,選擇「選擇成員」,選擇您想指派為金鑰庫密鑰管理員角色的使用者,然後選擇「下一步」。
選取 [檢閱 + 指派],以完成角色指派。
在生產環境中,請遵循最佳實務來保護你在 Azure IoT Operations 中使用的 Azure Key Vault。 欲了解更多資訊,請參閱 使用 Azure Key Vault 的最佳實務。
新增與使用憑證
連接器會使用憑證管理體驗來設定對外部伺服器的用戶端應用程式驗證。 若要深入了解連接器如何使用憑證與外部伺服器建立相互信任,請參閱連接器特定的憑證管理文件。
當您部署具有安全性設定的 Azure IoT 操作時,您可以開始將憑證新增至 Azure Key Vault,並將其同步至 Kubernetes 叢集,以用於外部連線的「信任清單」和「簽發者清單」存放區。
若要管理外部通訊的憑證,請遵循下列步驟:
在左側導覽窗格中,選取 [裝置]。
按一下 [管理憑證和祕密]。
在 [憑證和祕密] 頁面中,按一下 [新增憑證]。
您可以透過兩種方式新增憑證:
上傳憑證:上傳憑證,然後新增為 Azure Key Vault 的機密,並透過秘密存放區擴充功能自動同步至叢集。
- 檢視上傳之後的憑證詳細數據,以確保您在新增至 Azure Key Vault 並同步至叢集之前擁有正確的憑證。
- 使用直覺式名稱,讓您未來可以辨識哪些袐密代表您的祕密。
- 為使用憑證的連接器選取適當的憑證存放區。 例如, OPC UA 信任清單。
備註
只是上傳憑證並不會將祕密新增至 Azure Key Vault 並同步至叢集,您必須選取 [套用] 以套用變更。
從 Azure Key Vault 新增:從 Azure Key Vault 新增要同步處理至叢集的現有秘密。
備註
務必選取保存您要同步至叢集之憑證的祕密。 選取不是正確憑證的秘密會導致連線失敗。
您可以使用清單檢視來管理同步處理的憑證。 您可以檢視所有已同步的憑證,並查看它同步的憑證存儲區。
若要深入了解如何針對特定連接器管理信任憑證,請參閱連接器特定的憑證管理文件。
您也可以刪除同步處理的憑證。 當您刪除同步的憑證時,它只會從 Kubernetes 叢集刪除同步的憑證,而且不會從 Azure Key Vault 刪除包含的秘密參考。 您必須從金鑰保存庫手動刪除憑證密碼。