Intern kommunikation för certifikathantering för Azure IoT Operations
All kommunikation inom Azure IoT Operations krypteras med hjälp av TLS. För att hjälpa dig att komma igång distribueras Azure IoT Operations med en standardrotcertifikatutfärdare och utfärdare för TLS-servercertifikat. Du kan använda standardinställningen för utveckling och testning. För en produktionsdistribution rekommenderar vi att du använder en egen CA-utfärdare och en PKI-lösning för företag.
Standard självsignerad utfärdare och rotcertifikatutfärdarcertifikat för TLS-servercertifikat
För att hjälpa dig att komma igång distribueras Azure IoT Operations med en självsignerad standardutfärdare och rotcertifikatutfärdarcertifikat för TLS-servercertifikat. Du kan använda den här utfärdaren för utveckling och testning. Azure IoT Operations använder cert-manager för att hantera TLS-certifikat och trust-manager för att distribuera förtroendepaket till komponenter.
CA-certifikatet är självsignerat och inte betrott av några klienter utanför Azure IoT Operations. Certifikatutfärdarcertifikatets ämne är
CN=Azure IoT Operations Quickstart Root CA - Not for Production
. CA-certifikatet roteras automatiskt av cert-manager.Rotcertifikatutfärdarcertifikatet lagras i en Kubernetes-hemlighet som anropas
azure-iot-operations-aio-ca-certificate
undercert-manager
namnområdet.Den offentliga delen av rotcertifikatutfärdarcertifikatet lagras i en ConfigMap som anropas
azure-iot-operations-aio-ca-trust-bundle
underazure-iot-operations
namnområdet. Du kan hämta CA-certifikatet från ConfigMap och inspektera det med kubectl och openssl. ConfigMap hålls uppdaterad av trust-manager när CA-certifikatet roteras av 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]
Som standard finns det redan en utfärdare som har konfigurerats i namnet
azure-iot-operations namespace
azure-iot-operations-aio-certificate-issuer
. Den används som vanlig utfärdare för alla TLS-servercertifikat för IoT-åtgärder. MQTT Broker använder en utfärdare som skapats från samma CA-certifikat som är signerat av den självsignerade utfärdaren för att utfärda TLS-servercertifikat för TLS-standardlyssnaren på port 18883. Du kan inspektera utfärdaren med följande kommando: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
Ta med din egen utfärdare
För produktionsdistributioner rekommenderar vi att du konfigurerar Azure IoT Operations med en företags-PKI för att hantera certifikat och att du tar med din egen utfärdare som fungerar med företagets PKI i stället för att använda den självsignerade standardutfärdaren för att utfärda TLS-certifikat för intern kommunikation.
Om du vill konfigurera Azure IoT Operations med din egen utfärdare använder du följande steg innan du distribuerar en instans till klustret:
Följ stegen i Förbered klustret för att konfigurera klustret.
Installera cert-manager. Cert-manager hanterar TLS-certifikat.
Installera trust-manager. När du installerar förtroendehanteraren anger du
trust namespace
till cert-manager. Till exempel:helm upgrade trust-manager jetstack/trust-manager --install --namespace cert-manager --set app.trust.namespace=cert-manager --wait
Trust-manager används för att distribuera ett förtroendepaket till komponenter.
Skapa Azure IoT Operations-namnområdet.
kubectl create namespace azure-iot-operations
Distribuera en utfärdare som fungerar med cert-manager. En lista över alla utfärdare som stöds finns i utfärdare av certifikathanterare.
Utfärdaren kan vara av typen
ClusterIssuer
ellerIssuer
. Om du använderIssuer
måste utfärdarresursen skapas i Azure IoT Operations-namnområdet.Konfigurera förtroendepaket i Azure IoT Operations-namnområdet.
Om du vill konfigurera förtroendepaket skapar du en ConfigMap i Azure IoT Operations-namnområdet. Placera den offentliga nyckeldelen av certifikatutfärdarcertifikatet i konfigurationskartan med ett valfritt nyckelnamn.
Hämta den offentliga nyckeldelen av certifikatutfärdarcertifikatet. Stegen för att hämta den offentliga nyckeln beror på vilken utfärdare du väljer.
Skapa ConfigMap. Till exempel:
kubectl create configmap -n azure-iot-operations <YOUR_CONFIGMAP_NAME> --from-file=<CA_CERTIFICATE_FILENAME_PEM_OR_DER>
Följ stegen i Distribuera Azure IoT-åtgärder att distribuera med några ändringar.
Lägg till parametern
--user-trust
när du förbereder klustret. Till exempel:az iot ops init --subscription <SUBSCRIPTION_ID> --cluster <CLUSTER_NAME> -g <RESOURCE_GROUP> --user-trust
Lägg till parametern
--trust-settings
med nödvändig information när du distribuerar Azure IoT Operations. Till exempel:
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>