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 deicert-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 deiazure-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
denominatoazure-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:
Seguire la procedura descritta in Preparare il cluster per configurare il cluster.
Installare cert-manager. Cert-manager gestisce i certificati TLS.
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.
Creare lo spazio dei nomi Azure IoT Operations.
kubectl create namespace azure-iot-operations
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
oIssuer
. Se si usaIssuer
, la risorsa autorità di certificazione deve essere creata nello spazio dei nomi Operazioni IoT di Azure.Configurare il bundle di attendibilità nello spazio dei nomi Operazioni IoT di Azure.
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.
Ottenere la parte della chiave pubblica del certificato della CA. I passaggi per acquisire la chiave pubblica dipendono dall'autorità emittente scelta.
Creare ConfigMap. Ad esempio:
kubectl create configmap -n azure-iot-operations <YOUR_CONFIGMAP_NAME> --from-file=<CA_CERTIFICATE_FILENAME_PEM_OR_DER>
Seguire i passaggi descritti in Distribuire le operazioni IoT di Azure per la distribuzione, con alcune modifiche.
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
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>