Správa certifikátů pro interní komunikaci operací Azure IoT
Veškerá komunikace v rámci operací Azure IoT se šifruje pomocí protokolu TLS. Abyste mohli začít, nasadí se operace Azure IoT s výchozí kořenovou certifikační autoritou a vystavitelem pro certifikáty serveru TLS. Pro účely vývoje a testování můžete použít výchozí nastavení. Pro produkční nasazení doporučujeme použít vlastního vystavitele certifikační autority a podnikové řešení PKI.
Výchozí vystavitel podepsaný svým držitelem a kořenový certifikát certifikační autority pro certifikáty serveru TLS
Aby vám to pomohlo začít, nasadí se operace Azure IoT s výchozím vystavitelem podepsaným svým držitelem a kořenovým certifikátem certifikační autority pro certifikáty serveru TLS. Tento vystavitel můžete použít pro vývoj a testování. Operace Azure IoT používají nástroj cert-manager ke správě certifikátů TLS a správce důvěryhodnosti k distribuci sad důvěryhodnosti do komponent.
Certifikát certifikační autority je podepsaný svým držitelem a není důvěryhodný pro žádné klienty mimo provoz Azure IoT. Subjektem certifikátu certifikační autority je
CN=Azure IoT Operations Quickstart Root CA - Not for Production
. Certifikát certifikační autority se automaticky otočí správcem certifikátů.Kořenový certifikát certifikační autority je uložený v tajném kódu Kubernetes volaném
azure-iot-operations-aio-ca-certificate
pod oboremcert-manager
názvů.Veřejná část kořenového certifikátu certifikační autority je uložena v objektu ConfigMap volaném
azure-iot-operations-aio-ca-trust-bundle
pod oboremazure-iot-operations
názvů. Certifikát certifikační autority můžete načíst z objektu ConfigMap a zkontrolovat ho pomocí kubectl a openssl. Objekt ConfigMap se aktualizuje správcem důvěryhodnosti při obměně certifikátu certifikační autority nástrojem 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]
Ve výchozím nastavení je volaný
azure-iot-operations-aio-certificate-issuer
již vystavitel nakonfigurovanýazure-iot-operations namespace
. Používá se jako společný vystavitel pro všechny certifikáty serveru TLS pro operace IoT. Zprostředkovatel MQTT používá vystavitele vytvořeného ze stejného certifikátu certifikační autority podepsaného vystavitelem podepsaným svým držitelem k vydávání certifikátů serveru TLS pro výchozí naslouchací proces TLS na portu 18883. Vystavitele můžete zkontrolovat pomocí následujícího příkazu: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
Používání vlastního vystavitele
V případě produkčních nasazení doporučujeme nastavit operace Azure IoT s podnikovou pkI pro správu certifikátů a použít vlastní vystavitele, který funguje s podnikovou pkI místo použití výchozího vystavitele podepsaného svým držitelem k vydávání certifikátů TLS pro interní komunikaci.
Pokud chcete nastavit operace Azure IoT s vlastním vystavitelem, před nasazením instance do clusteru postupujte následovně:
Postupujte podle kroků v části Příprava clusteru a nastavte cluster.
Nainstalujte nástroj cert-manager. Cert-manager spravuje certifikáty TLS.
Nainstalujte správce důvěryhodnosti. Při instalaci správce důvěryhodnosti nastavte
trust namespace
na cert-manager. Příklad:helm upgrade trust-manager jetstack/trust-manager --install --namespace cert-manager --set app.trust.namespace=cert-manager --wait
Správce důvěryhodnosti se používá k distribuci sady důvěryhodnosti komponentám.
Vytvořte obor názvů operací Azure IoT.
kubectl create namespace azure-iot-operations
Nasaďte vystavitele, který funguje s nástrojem cert-manager. Seznam všechpodporovaných
Vystavitel může být typu
ClusterIssuer
neboIssuer
. Pokud používáteIssuer
prostředek vystavitele, musí se vytvořit v oboru názvů Azure IoT Operations.Nastavte sadu důvěryhodnosti v oboru názvů operací Azure IoT.
Pokud chcete nastavit sadu důvěryhodnosti, vytvořte v oboru názvů Operací Azure IoT objekt ConfigMap. Část veřejného klíče certifikátu certifikační autority umístěte do mapy konfigurace s názvem klíče podle vašeho výběru.
Získejte část veřejného klíče certifikátu certifikační autority. Postup získání veřejného klíče závisí na zvoleném vystaviteli.
Vytvořte objekt ConfigMap. Příklad:
kubectl create configmap -n azure-iot-operations <YOUR_CONFIGMAP_NAME> --from-file=<CA_CERTIFICATE_FILENAME_PEM_OR_DER>
Podle kroků v části Nasazení operací Azure IoT proveďte nasazení s několika změnami.
--user-trust
Přidejte parametr při přípravě clusteru. Příklad:az iot ops init --subscription <SUBSCRIPTION_ID> --cluster <CLUSTER_NAME> -g <RESOURCE_GROUP> --user-trust
--trust-settings
Při nasazování operací Azure IoT přidejte parametr s potřebnými informacemi. Příklad:
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>