Partager via


Gestion des certificats pour la communication interne concernant Opérations Azure IoT

Toutes les communications dans Opérations Azure IoT sont chiffrées à l’aide du protocole TLS. Pour vous aider à démarrer, Opérations Azure IoT est déployé avec une autorité de certification racine « démarrage rapide » par défaut et un émetteur pour les certificats de serveur TLS. Vous pouvez utiliser la configuration par défaut à des fins de développement et de test. Pour un déploiement en production, nous vous recommandons d’utiliser votre propre émetteur d’autorité de certification et une solution PKI d’entreprise.

Émetteur auto-signé par défaut et certificat d’autorité de certification racine pour les certificats de serveur TLS

Pour vous aider à démarrer, Opérations Azure IoT est déployé avec un émetteur auto-signé par défaut et un certificat d'autorité de certification racine pour les certificats de serveur TLS. Vous pouvez utiliser cet émetteur pour le développement et le test. Azure IoT Operations utilise cert-manager pour gérer les certificats TLS et trust-manager pour distribuer des offres groupées de confiance aux composants.

  • Le certificat d’autorité de certification est auto-signé et non approuvé par des clients en dehors d’Opérations Azure IoT. Le sujet du certificat d’autorité de certification est CN=Azure IoT Operations Quickstart Root CA - Not for Production. Le certificat d’autorité de certification est automatiquement mis en rotation par cert-manager.

  • Le certificat d’autorité de certification racine est stocké dans un secret Kubernetes appelé azure-iot-operations-aio-ca-certificate sous l’espace de noms cert-manager.

  • La partie publique du certificat d’autorité de certification racine est stockée dans une carte ConfigMap appelée azure-iot-operations-aio-ca-trust-bundle sous l’espace de nomsazure-iot-operations. Vous pouvez récupérer le certificat d’autorité de certification à partir de ConfigMap et l’inspecter avec kubectl et openssl. La carte ConfigMap est mise à jour par trust-manager lorsque le certificat d’autorité de certification est mis en rotation par 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] 
    
  • Par défaut, il existe déjà un émetteur configuré dans le système azure-iot-operations namespace appelé azure-iot-operations-aio-certificate-issuer. Il est utilisé comme émetteur commun pour tous les certificats de serveur TLS pour les opérations IoT. L’agent MQTT utilise un émetteur créé à partir du même certificat CA qui est signé par l'émetteur auto-signé pour émettre des certificats de serveur TLS pour l'auditeur TLS par défaut sur le port 18883. Vous pouvez inspecter l’émetteur avec la commande suivante :

    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 
    

Apporter votre propre émetteur

Pour les déploiements de production, nous vous recommandons de configurer Opérations Azure IoT avec une infrastructure à clé publique d’entreprise pour gérer les certificats et que vous apportez votre propre émetteur qui fonctionne avec votre infrastructure à clé publique d’entreprise au lieu d’utiliser l’émetteur auto-signé par défaut pour émettre des certificats TLS pour la communication interne.

Pour configurer Opérations Azure IoT avec votre propre émetteur, procédez comme suit avant de déployer une instance sur votre cluster :

  1. Suivez les étapes de Préparer votre cluster pour configurer votre cluster.

  2. Installer cert-manager. Le ou la gestionnaire de certificats gère les certificats TLS.

  3. Installer trust-manager. Lors de l’installation du ou de la gestionnaire de confiance, définissez la trust namespace sur cert-manager. Par exemple :

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

    Le ou la gestionnaire de confiance est utilisé pour distribuer un ensemble d’approbations aux composants.

  4. Créez l'espace de noms Opérations Azure IoT.

    kubectl create namespace azure-iot-operations
    
  5. Déployez un(e) émetteur(-trice) qui fonctionne avec cert-manager. Pour obtenir la liste de tous les émetteurs pris en charge, consultez émetteurs de gestionnaire de certificats.

    L’émetteur(-trice) peut être de type ClusterIssuer ou Issuer. Si vous utilisez Issuer, la ressource émetteur doit être créée dans l’espace de noms Opérations Azure IoT.

  6. Configurez l’offre groupée d’approbation dans l’espace de noms Opérations Azure IoT.

    1. Pour configurer le faisceau de confiance, créez un ConfigMap dans l'espace de noms Opérations Azure IoT. Placez la partie clé publique de votre certificat d’autorité de certification dans la carte de configuration avec un nom de clé de votre choix.

    2. Obtenez la partie clé publique de votre certificat d’autorité de certification. Les étapes d’acquisition de la clé publique dépendent de l’émetteur(-trice) que vous choisissez.

    3. Créer le ConfigMap. Par exemple :

      kubectl create configmap -n azure-iot-operations <YOUR_CONFIGMAP_NAME> --from-file=<CA_CERTIFICATE_FILENAME_PEM_OR_DER>
      
  7. Suivez les étapes de Déployer Opérations Azure IoT pour déployer, avec quelques modifications.

    1. Ajoutez le paramètre --user-trust lors de la préparation du cluster. Par exemple :

      az iot ops init --subscription <SUBSCRIPTION_ID> --cluster <CLUSTER_NAME>  -g <RESOURCE_GROUP> --user-trust
      
    2. Ajoutez le paramètre --trust-settings avec les informations nécessaires lors du déploiement d’Opérations Azure IoT. Par exemple :

    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>