共用方式為


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-bundleazure-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-issuerazure-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 作業,請先使用下列步驟,再將實例部署至叢集:

  1. 請遵循準備叢集以設定叢集中的步驟。

  2. 安裝 cert-manager。 Cert-manager 會管理 TLS 憑證。

  3. 安裝 trust-manager。 安裝信任管理員時,將 設定 trust namespace 為 cert-manager。 例如:

    helm upgrade trust-manager jetstack/trust-manager --install --namespace cert-manager --set app.trust.namespace=cert-manager --wait
    

    信任管理員可用來將信任套件組合散發至元件。

  4. 建立 Azure IoT 作業命名空間。

    kubectl create namespace azure-iot-operations
    
  5. 部署與 cert-manager 搭配運作的簽發者。 如需所有支持的簽發者清單,請參閱 憑證管理員簽發者

    簽發者可以是 或Issuer類型ClusterIssuerIssuer如果使用 ,則必須在 Azure IoT Operations 命名空間中建立簽發者資源。

  6. 在 Azure IoT Operations 命名空間中設定信任套件組合。

    1. 若要設定信任套件組合,請在 Azure IoT Operations 命名空間中建立 ConfigMap。 將 CA 憑證的公鑰部分放入設定對應中,並具有您選擇的密鑰名稱。

    2. 取得 CA 憑證的公鑰部分。 取得公鑰的步驟取決於您選擇的簽發者。

    3. 建立 ConfigMap。 例如:

      kubectl create configmap -n azure-iot-operations <YOUR_CONFIGMAP_NAME> --from-file=<CA_CERTIFICATE_FILENAME_PEM_OR_DER>
      
  7. 請遵循部署 Azure IoT 作業中的步驟來部署,並進行一些變更

    1. 準備叢集時新增 --user-trust 參數。 例如:

      az iot ops init --subscription <SUBSCRIPTION_ID> --cluster <CLUSTER_NAME>  -g <RESOURCE_GROUP> --user-trust
      
    2. --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>