Freigeben über


Zertifikatverwaltung für die interne Kommunikation von „Azure IoT Einsatz“

Die gesamte Kommunikation in „Azure IoT Einsatz“ wird mithilfe von TLS verschlüsselt. Um Ihnen den Einstieg zu erleichtern, wird Azure IoT Einsatz mit einer Standardstammzertifizierungsstelle und einem Aussteller für TLS-Serverzertifikate bereitgestellt. Sie können das Standardsetup für Entwicklungs- und Testzwecke verwenden. Für eine Produktionsbereitstellung empfehlen wir die Verwendung Ihres eigenen ZS-Ausstellers und einer Unternehmens-PKI-Lösung.

Standardmäßiges selbstsigniertes Aussteller- und Stammzertifizierungsstellenzertifikat für TLS-Serverzertifikate

Um Ihnen den Einstieg zu erleichtern, wird „Azure IoT Einsatz“ mit einem standardmäßigen selbstsignierten Aussteller und einem Stamm-CA-Zertifikat für TLS-Serverzertifikate bereitgestellt. Sie können diesen Zertifikataussteller für Entwicklungs- und Testzwecke nutzen. Azure IoT Einsatz verwendet cert-manager zum Verwalten von TLS-Zertifikaten und trust-manager zum Verteilen von Vertrauenspaketen an Komponenten.

  • Das Zertifizierungsstellenzertifikat ist selbstsigniert und wird von jeglichen Clients außerhalb von Azure IoT Operations als nicht vertrauenswürdig eingestuft. Der Betreff des ZS-Zertifikats lautet CN=Azure IoT Operations Quickstart Root CA - Not for Production. Das ZS-Zertifikat wird von cert-manager automatisch rotiert.

  • Das Zertifikat der Stammzertifizierungsstelle wird in einem Kubernetes-Geheimnis namens azure-iot-operations-aio-ca-certificate im Namespace cert-manager gespeichert.

  • Der öffentliche Teil des ZS-Zertifikats wird in einer ConfigMap namens azure-iot-operations-aio-ca-trust-bundle unter dem Namespace azure-iot-operations gespeichert. Sie können das Zertifizierungsstellenzertifikat aus der ConfigMap abrufen und mit kubectl und openssl überprüfen. Die ConfigMap wird von trust-manager aktualisiert, wenn das Zertifizierungsstellenzertifikat von cert-manager rotiert wird.

    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] 
    
  • Standardmäßig ist bereits ein Aussteller namens azure-iot-operations-aio-certificate-issuer im Namespace azure-iot-operations namespace konfiguriert. Er wird als gemeinsamer Aussteller für alle TLS-Serverzertifikate für IoT Einsatz verwendet. Der MQTT-Broker verwendet einen Aussteller, der aus demselben Signaturzertifikat erstellt wurde, das vom selbstsignierten Aussteller signiert wurde, um TLS-Serverzertifikate für den Standard-TLS-Listener auf Port 18883 auszustellen. Sie können den Zertifikataussteller mit dem folgenden Befehl überprüfen:

    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 
    

Nutzen Sie Ihren eigenen Zertifikataussteller

Für Produktionsbereitstellungen empfehlen wir, Azure IoT Operations mit einer Unternehmens-PKI einzurichten, um Zertifikate zu verwalten und Ihren eigenen Zertifikataussteller mitzubringen, der mit Ihrer Unternehmens-PKI funktioniert, anstatt den standardmäßigen selbstsignierten Zertifikataussteller zum Ausgeben von TLS-Zertifikaten für die interne Kommunikation zu verwenden.

Um Azure IoT Operations mit Ihrem eigenen Zertifikataussteller einzurichten, führen Sie die folgenden Schritte aus, bevor Sie eine Instanz in Ihrem Cluster bereitstellen:

  1. Führen Sie die Schritte unter Vorbereiten des Clusters aus, um das Cluster einzurichten.

  2. Installieren Sie cert-manager. Der Cert-Manager verwaltet TLS-Zertifikate.

  3. Installieren Sie trust-manager. Legen Sie beim Installieren des Trust-Managers trust namespace auf Cert-Manager fest. Zum Beispiel:

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

    Der Trust-Manager wird verwendet, um ein Trust-Bundle an Komponenten zu verteilen.

  4. Erstellen Sie den Azure IoT Operations-Namespace.

    kubectl create namespace azure-iot-operations
    
  5. Stellen Sie einen Zertifikataussteller bereit, der mit Cert-Manager funktioniert. Eine Liste aller unterstützten Zertifikataussteller finden Sie unter Zertifikataussteller für Cert-Manager.

    Der Zertifikataussteller kann vom Typ ClusterIssuer oder Issuer. Bei Verwendung von Issuer muss die Ausstellerressource im Azure IoT Operations-Namespace erstellt werden.

  6. Richten Sie das Trust-Bundle im Azure IoT Operations-Namespace ein.

    1. Um ein Trust-Bundle einzurichten, erstellen Sie eine ConfigMap im Azure IoT Operations-Namespace. Platzieren Sie den öffentlichen Schlüsselteil Ihres Zertifizierungsstellenzertifikats in der Konfigurationszuordnung mit einem Schlüsselnamen Ihrer Wahl.

    2. Rufen Sie den öffentlichen Schlüsselteil Ihres Zertifizierungsstellenzertifikats ab. Die Schritte zum Abrufen des öffentlichen Schlüssels hängen vom ausgewählten Zertifikataussteller ab.

    3. Erstellen Sie die ConfigMap. Zum Beispiel:

      kubectl create configmap -n azure-iot-operations <YOUR_CONFIGMAP_NAME> --from-file=<CA_CERTIFICATE_FILENAME_PEM_OR_DER>
      
  7. Führen Sie die Schritte in Bereitstellen von Azure IoT-Vorgängen für die Bereitstellung mit einigen Änderungen aus.

    1. Fügen Sie den --user-trust-Parameter beim Vorbereiten des Clusters hinzu. Zum Beispiel:

      az iot ops init --subscription <SUBSCRIPTION_ID> --cluster <CLUSTER_NAME>  -g <RESOURCE_GROUP> --user-trust
      
    2. Fügen Sie den --trust-settings-Parameter mit den erforderlichen Informationen hinzu, während Sie Azure IoT Operations bereitstellen. Zum Beispiel:

    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>