Azure IoT 作業內部通訊的憑證管理
Azure IoT 作業中的所有通訊都會使用 TLS 加密。 為了協助您開始使用,Azure IoT 作業會使用 TLS 伺服器證書的預設根 CA 和簽發者來部署。 您可以使用預設設定進行開發和測試。 針對生產部署,我們建議使用您自己的 CA 簽發者和企業 PKI 解決方案。
TLS 伺服器證書的預設自我簽署簽發者和根 CA 憑證
為了協助您開始使用,Azure IoT 作業會使用 TLS 伺服器證書的預設自我簽署簽發者和根 CA 憑證進行部署。 您可以使用此簽發者進行開發和測試。 Azure IoT 作業會使用 cert-manager 來管理 TLS 憑證,以及 信任管理員 將信任套件組合散發至元件。
CA 憑證是自我簽署,且不受 Azure IoT 操作外部任何用戶端信任。 CA 憑證的主體為
CN=Azure IoT Operations Quickstart Root CA - Not for Production
。 憑證管理員會自動輪替 CA 憑證。根 CA 憑證會儲存在命名空間下呼叫
azure-iot-operations-aio-ca-certificate
的 Kubernetes 秘密中cert-manager
。根 CA 憑證的公用部分會儲存在命名空間下呼叫
azure-iot-operations-aio-ca-trust-bundle
的azure-iot-operations
ConfigMap 中。 您可以從 ConfigMap 擷取 CA 憑證,並使用 kubectl 和 openssl 加以檢查。 ConfigMap 會在 cert-manager 輪替 CA 憑證時,由 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-aio-certificate-issuer
的azure-iot-operations namespace
中設定簽發者。 它會作為IoT作業之所有TS伺服器憑證的通用簽發者。 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 作業來管理憑證,而且您攜帶自己的簽發者可搭配企業 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
信任管理員可用來將信任套件組合散發至元件。
建立 Azure IoT 作業命名空間。
kubectl create namespace azure-iot-operations
部署與 cert-manager 搭配運作的簽發者。 如需所有支持的簽發者清單,請參閱 憑證管理員簽發者。
簽發者可以是 或
Issuer
類型ClusterIssuer
。Issuer
如果使用 ,則必須在 Azure IoT Operations 命名空間中建立簽發者資源。在 Azure IoT Operations 命名空間中設定信任套件組合。
若要設定信任套件組合,請在 Azure IoT Operations 命名空間中建立 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
--trust-settings
在部署 Azure IoT 作業時,新增具有必要資訊的 參數。 例如:
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>