Condividi tramite


Gestione dei certificati per le comunicazioni interne di Azure IoT Operations

Tutte le comunicazioni all'interno delle operazioni IoT di Azure vengono crittografate tramite TLS. Per iniziare, Le operazioni di Azure IoT vengono distribuite con una CA radice predefinita e un'autorità di certificazione per i certificati server TLS. È possibile usare la configurazione predefinita per scopi di sviluppo e test. Per una distribuzione di produzione, è consigliabile usare un'autorità di certificazione personalizzata e una soluzione PKI aziendale.

Autorità di certificazione autofirmato predefinita e certificato CA radice per i certificati server TLS

Per iniziare, Le operazioni di Azure IoT vengono distribuite con un'autorità di certificazione autofirmato predefinita e un certificato CA radice per i certificati server TLS. È possibile usare questa autorità emittente per lo sviluppo e il test. Le operazioni di Azure IoT usano cert-manager per gestire i certificati TLS e trust-manager per distribuire bundle di attendibilità ai componenti.

  • Il certificato della CA è autofirmato e non è considerato attendibile da alcun client all'esterno delle Operazioni di Azure IoT. L'oggetto del certificato della CA è CN=Azure IoT Operations Quickstart Root CA - Not for Production. Il certificato della CA viene ruotato automaticamente da cert-manager.

  • Il certificato CA radice viene archiviato in un segreto Kubernetes denominato azure-iot-operations-aio-ca-certificate nello spazio dei cert-manager nomi .

  • La parte pubblica del certificato CA radice viene archiviata in un oggetto ConfigMap denominato azure-iot-operations-aio-ca-trust-bundle nello spazio dei azure-iot-operations nomi . È possibile recuperare il certificato della CA da ConfigMap ed esaminarlo con kubectl e openssl. ConfigMap viene mantenuto aggiornato da trust-manager quando il certificato della CA viene ruotato da cert-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] 
    
  • Per impostazione predefinita, esiste già un'autorità emittente configurata nel azure-iot-operations namespace denominato azure-iot-operations-aio-certificate-issuer. Viene usato come autorità di certificazione comune per tutti i certificati server TLS per le operazioni IoT. Il broker MQTT usa un'autorità di certificazione creata dallo stesso certificato CA firmato dall'autorità di certificazione autofirmata per rilasciare certificati server TLS per il listener TLS predefinito sulla porta 18883. È possibile esaminare l'autorità emittente con il comando seguente:

    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 
    

Bring Your Own Issuer

Per le distribuzioni di produzione, è consigliabile configurare le operazioni IoT di Azure con un'infrastruttura a chiave pubblica aziendale per gestire i certificati e che si usa un'autorità di certificazione personalizzata che funziona con l'infrastruttura a chiave pubblica aziendale anziché usare l'autorità di certificazione autofirmato predefinita per rilasciare certificati TLS per la comunicazione interna.

Per configurare le operazioni di Azure IoT con il proprio emittente, seguire questa procedura prima di distribuire un'istanza nel cluster:

  1. Seguire la procedura descritta in Preparare il cluster per configurare il cluster.

  2. Installare cert-manager. Cert-manager gestisce i certificati TLS.

  3. Installare trust-manager. Durante l'installazione del gestore attendibilità, impostare su trust namespace cert-manager. Ad esempio:

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

    Trust-manager viene usato per distribuire un bundle di attendibilità ai componenti.

  4. Creare lo spazio dei nomi Azure IoT Operations.

    kubectl create namespace azure-iot-operations
    
  5. Distribuire un'autorità di certificazione che funziona con cert-manager. Per un elenco di tutte le autorità emittenti supportate, vedere Autorità emittenti di cert-manager.

    L'autorità emittente può essere di tipo ClusterIssuer o Issuer. Se si usa Issuer, la risorsa autorità di certificazione deve essere creata nello spazio dei nomi Operazioni IoT di Azure.

  6. Configurare il bundle di attendibilità nello spazio dei nomi Operazioni IoT di Azure.

    1. Per configurare il bundle di attendibilità, creare un oggetto ConfigMap nello spazio dei nomi Operazioni IoT di Azure. Inserire la parte chiave pubblica del certificato della CA nella mappa di configurazione con un nome di chiave di propria scelta.

    2. Ottenere la parte della chiave pubblica del certificato della CA. I passaggi per acquisire la chiave pubblica dipendono dall'autorità emittente scelta.

    3. Creare ConfigMap. Ad esempio:

      kubectl create configmap -n azure-iot-operations <YOUR_CONFIGMAP_NAME> --from-file=<CA_CERTIFICATE_FILENAME_PEM_OR_DER>
      
  7. Seguire i passaggi descritti in Distribuire le operazioni IoT di Azure per la distribuzione, con alcune modifiche.

    1. Aggiungere il parametro durante la preparazione del --user-trust cluster. Ad esempio:

      az iot ops init --subscription <SUBSCRIPTION_ID> --cluster <CLUSTER_NAME>  -g <RESOURCE_GROUP> --user-trust
      
    2. Aggiungere il --trust-settings parametro con le informazioni necessarie durante la distribuzione di Operazioni IoT di Azure. Ad esempio:

    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>