Partage via


Configurer l’infrastructure de certificats OPC UA pour la préversion d’Azure IoT OPC UA Broker

Important

Opérations Azure IoT (préversion) – activé parc Azure Arc est actuellement en PRÉVERSION. Vous ne devez pas utiliser ce logiciel en préversion dans des environnements de production.

Pour connaître les conditions juridiques qui s’appliquent aux fonctionnalités Azure en version bêta, en préversion ou plus généralement non encore en disponibilité générale, consultez l’Avenant aux conditions d’utilisation des préversions de Microsoft Azure.

Dans cet article, vous allez apprendre à configurer l’infrastructure de certificats OPC UA pour Azure IoT OPC UA Broker. Cette configuration vous permet de désigner les serveurs OPC UA auxquels vous faites confiance pour établir une session de manière sécurisée.

Conformément à la spécification OPC UA, OPC UA Broker agit en tant qu’application OPC UA unique lorsqu’il établit une communication sécurisée avec les serveurs OPC UA. Azure IoT OPC UA Broker utilise le même certificat d’instance d’application pour tous les canaux sécurisés qu’il ouvre avec vos serveurs OPC UA.

Pour plus d’informations, consultez Infrastructure de certificats OPC UA pour Azure IoT OPC UA Broker (préversion).

Prérequis

Une instance déployée d’Opérations Azure IoT (préversion). Pour déployer Opérations Azure IoT à des fins de démonstration et d’exploration, consultez Démarrage rapide : Déployer Opérations Azure IoT – sur un cluster Kubernetes avec Arc.

Configurer un certificat d’instance d’application auto-signé

Le déploiement par défaut d’OPC UA Broker installe toutes les ressources dont a besoin cert-manager pour créer un certificat auto-signé conforme OPC UA. Ce certificat est stocké dans le secret aio-opc-opcuabroker-default-application-cert. Ce secret est mappé dans tous les pods de connecteur OPC UA et fait office de certificat d’instance d’application cliente OPC UA. cert-manager gère le renouvellement automatique de ce certificat d’instance d’application.

Cette configuration est généralement suffisante pour une communication conforme et sécurisée entre vos serveurs OPC UA et OPC UA Broker dans un environnement de démonstration ou d’exploration. Pour un environnement de production, utilisez des certificats d’instance d’application de niveau entreprise dans votre déploiement.

Configurer la liste des certificats approuvés

Pour vous connecter à une ressource, vous devez d’abord établir l’approbation mutuelle de l’authentification d’application. Pour OPC UA Broker, effectuez les étapes suivantes :

  1. Obtenez le certificat d’instance de l’application du serveur OPC UA sous la forme d’un fichier. Les fichiers de ce type ont généralement une extension .der ou .crt. Il s’agit uniquement de la clé publique.

    Conseil

    En règle générale, un serveur OPC UA dispose d’une interface qui vous permet d’exporter son certificat d’instance d’application. Cette interface n’est pas standardisée. Certains serveurs tels que KEPServerEx proposent une interface utilisateur de configuration basée sur Windows dédiée à la gestion des certificats. D’autres serveurs peuvent disposer d’une interface web ou utiliser des dossiers de système d’exploitation pour le stockage des certificats. Consultez le manuel utilisateur de votre serveur pour savoir comment exporter le certificat d’instance d’application. Une fois que vous disposez du certificat, vérifiez qu’il est encodé en DER ou PEM. Il est généralement stocké dans un fichier ayant pour extension .der ou .crt. Si le certificat ne présente pas l’un de ces formats de fichier, utilisez un outil tel que openssl pour transformer le certificat dans le format requis.

  2. Enregistrez le certificat d’instance d’application du serveur OPC UA dans Azure Key Vault sous forme de secret.

    Pour un certificat encodé en DER dans un fichier tel que ./my-server.der, exécutez la commande suivante :

    # Upload my-server.der OPC UA Server's certificate as secret to Azure Key Vault
    az keyvault secret set \
      --name "my-server-der" \
      --vault-name <your-azure-key-vault-name> \
      --file ./my-server.der \
      --encoding hex \
      --content-type application/pkix-cert
    

    Pour un certificat encodé en PEM dans un fichier tel que ./my-server.crt, exécutez la commande suivante :

    # Upload my-server.crt OPC UA Server's certificate as secret to Azure Key Vault
    az keyvault secret set \
      --name "my-server-crt" \
      --vault-name <your-azure-key-vault-name> \
      --file ./my-server.crt \
      --encoding hex \
      --content-type application/x-pem-file
    
  3. Configurez la ressource personnalisée aio-opc-ua-broker-trust-list dans le cluster. Utilisez un client Kubernetes, par exemple kubectl, pour configurer les secrets, tels que my-server-der et my-server-crt, dans le tableau d’objets SecretProviderClass du cluster.

    L’exemple suivant montre une ressource personnalisée SecretProviderClass complète qui contient le certificat de serveur OPC UA approuvé dans un fichier encodé en DER :

    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: aio-opc-ua-broker-trust-list
      namespace: azure-iot-operations
    spec:
      provider: azure
      parameters:
        usePodIdentity: 'false'
        keyvaultName: <your-azure-key-vault-name>
        tenantId: <your-azure-tenant-id>
        objects: |
          array:
            - |
              objectName: my-server-der
              objectType: secret
              objectAlias: my-server.der
              objectEncoding: hex
    

    L’exemple suivant montre une ressource personnalisée SecretProviderClass complète qui contient le certificat de serveur OPC UA approuvé dans un fichier encodé en PEM avec l’extension .crt :

    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: aio-opc-ua-broker-trust-list
      namespace: azure-iot-operations
    spec:
      provider: azure
      parameters:
        usePodIdentity: 'false'
        keyvaultName: <your-azure-key-vault-name>
        tenantId: <your-azure-tenant-id>
        objects: |
          array:
            - |
              objectName: my-server-crt
              objectType: secret
              objectAlias: my-server.crt
              objectEncoding: hex
    

    Remarque

    Le temps nécessaire pour projeter des certificats Azure Key Vault dans le cluster dépend de l’intervalle d’interrogation configuré.

Si votre serveur OPC UA utilise un certificat qui a été émis par une autorité de certification, vous pouvez approuver celle-ci en ajoutant son certificat de clé publique à la liste des certificats approuvés OPC UA Broker. Dès lors, l’instance OPC UA Broker approuve automatiquement tous les serveurs qui utilisent un certificat valide émis par l’autorité de certification. De ce fait, vous n’avez pas besoin d’ajouter explicitement le certificat du serveur OPC UA à la liste des certificats approuvés OPC UA Broker.

Pour approuver une autorité de certification, effectuez les étapes suivantes :

  1. Obtenez la clé publique de certificat de l’autorité de certification encodée au format DER ou PEM. Ces certificats sont généralement stockés dans un fichier ayant pour extension .der ou .crt. Obtenez la liste de révocation de certificats (CRL) de l’autorité de certification. Cette liste se trouve généralement dans un fichier ayant l’extension .crl. Pour plus d’informations, consultez la documentation de votre serveur OPC UA.

  2. Enregistrez le certificat de l’autorité de certification et la liste CRL dans Azure Key Vault sous forme de secrets.

    Pour un certificat encodé en DER dans un fichier tel que ./my-server-ca.der, exécutez les commandes suivantes :

    # Upload CA certificate as secret to Azure Key Vault
    az keyvault secret set \
      --name "my-server-ca-der" \
      --vault-name <your-azure-key-vault-name> \
      --file ./my-server-ca.der \
      --encoding hex \
      --content-type application/pkix-cert
    
    # Upload the CRL as secret to Azure Key Vault
    az keyvault secret set \
      --name "my-server-crl" \
      --vault-name <your-azure-key-vault-name> \
      --file ./my-server-ca.crl \
      --encoding hex \
      --content-type application/pkix-crl
    

    Pour un certificat encodé en PEM dans un fichier tel que ./my-server-ca.crt, exécutez les commandes suivantes :

    # Upload CA certificate as secret to Azure Key Vault
    az keyvault secret set \
      --name "my-server-ca-crt" \
      --vault-name <your-azure-key-vault-name> \
      --file ./my-server-ca.crt \
      --encoding hex \
      --content-type application/x-pem-file
    
    # Upload the CRL as secret to Azure Key Vault
    az keyvault secret set \
      --name "my-server-crl" \
      --vault-name <your-azure-key-vault-name> \
      --file ./my-server-ca.crl \
      --encoding hex \
      --content-type application/pkix-crl
    
  3. Configurez la ressource personnalisée aio-opc-ua-broker-trust-list dans le cluster. Utilisez un client Kubernetes, par exemple kubectl, pour configurer les secrets, tels que my-server-ca-der et my-server-ca-crt, dans le tableau d’objets SecretProviderClass du cluster.

    L’exemple suivant montre une ressource personnalisée SecretProviderClass complète qui contient le certificat de serveur OPC UA approuvé dans un fichier encodé en DER :

    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: aio-opc-ua-broker-trust-list
      namespace: azure-iot-operations
    spec:
      provider: azure
      parameters:
        usePodIdentity: 'false'
        keyvaultName: <your-azure-key-vault-name>
        tenantId: <your-azure-tenant-id>
        objects: |
          array:
            - |
              objectName: my-server-ca-der
              objectType: secret
              objectAlias: my-server-ca.der
              objectEncoding: hex
            - |
              objectName: my-server-ca-crl
              objectType: secret
              objectAlias: my-server-ca.crl
              objectEncoding: hex
    

    L’exemple suivant montre une ressource personnalisée SecretProviderClass complète qui contient le certificat de serveur OPC UA approuvé dans un fichier encodé en PEM avec l’extension .crt :

    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: aio-opc-ua-broker-trust-list
      namespace: azure-iot-operations
    spec:
      provider: azure
      parameters:
        usePodIdentity: 'false'
        keyvaultName: <your-azure-key-vault-name>
        tenantId: <your-azure-tenant-id>
        objects: |
          array:
            - |
              objectName: my-server-ca-crt
              objectType: secret
              objectAlias: my-server-ca.crt
              objectEncoding: hex
            - |
              objectName: my-server-ca-crl
              objectType: secret
              objectAlias: my-server-ca.crl
              objectEncoding: hex
    

    Remarque

    Le temps nécessaire pour projeter des certificats Azure Key Vault dans le cluster dépend de l’intervalle d’interrogation configuré.

Configurer la liste des certificats de l’émetteur

Si votre serveur OPC UA utilise un certificat émis par une autorité de certification, mais que vous ne voulez pas approuver tous les certificats émis par cette autorité de certification, effectuez les étapes suivantes :

  1. Approuvez le certificat d’instance d’application du serveur OPC UA en suivant les trois premières étapes de la section précédente.

  2. En plus du certificat lui-même, OPC UA Broker a besoin du certificat d’autorité de certification pour valider correctement la chaîne d’émetteur du certificat du serveur OPC UA. Ajoutez le certificat d’autorité de certification et sa liste de révocation de certificats (CRL) à une liste distincte appelée aio-opc-ua-broker-issuer-list.

    1. Enregistrez le certificat de l’autorité de certification et la liste CRL dans Azure Key Vault sous forme de secrets.

      Pour un certificat encodé en DER dans un fichier tel que ./my-server-ca.der, exécutez les commandes suivantes :

      # Upload CA certificate as secret to Azure Key Vault
      az keyvault secret set \
        --name "my-server-ca-der" \
        --vault-name <your-azure-key-vault-name> \
        --file ./my-server-ca.der \
        --encoding hex \
        --content-type application/pkix-cert
      
      # Upload the CRL as secret to Azure Key Vault
      az keyvault secret set \
        --name "my-server-crl" \
        --vault-name <your-azure-key-vault-name> \
        --file ./my-server-ca.crl \
        --encoding hex \
        --content-type application/pkix-crl
      

      Pour un certificat encodé en PEM dans un fichier tel que ./my-server-ca.crt, exécutez les commandes suivantes :

      # Upload CA certificate as secret to Azure Key Vault
      az keyvault secret set \
        --name "my-server-ca-crt" \
        --vault-name <your-azure-key-vault-name> \
        --file ./my-server-ca.crt \
        --encoding hex \
        --content-type application/x-pem-file
      
      # Upload the CRL as secret to Azure Key Vault
      az keyvault secret set \
        --name "my-server-crl" \
        --vault-name <your-azure-key-vault-name> \
        --file ./my-server-ca.crl \
        --encoding hex \
        --content-type application/pkix-crl
      
  3. Configurez la ressource personnalisée aio-opc-ua-broker-issuer-list dans le cluster. Utilisez un client Kubernetes, par exemple kubectl, pour configurer les secrets, tels que my-server-ca-der et my-server-ca-crt, dans le tableau d’objets SecretProviderClass du cluster.

    L’exemple suivant montre une ressource personnalisée SecretProviderClass complète qui contient le certificat de serveur OPC UA approuvé dans un fichier encodé en DER :

    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: aio-opc-ua-broker-issuer-list
      namespace: azure-iot-operations
    spec:
      provider: azure
      parameters:
        usePodIdentity: 'false'
        keyvaultName: <your-azure-key-vault-name>
        tenantId: <your-azure-tenant-id>
        objects: |
          array:
            - |
              objectName: my-server-ca-der
              objectType: secret
              objectAlias: my-server-ca.der
              objectEncoding: hex
            - |
              objectName: my-server-ca-crl
              objectType: secret
              objectAlias: my-server-ca.crl
              objectEncoding: hex
    

    L’exemple suivant montre une ressource personnalisée SecretProviderClass complète qui contient le certificat de serveur OPC UA approuvé dans un fichier encodé en PEM avec l’extension .crt :

    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: aio-opc-ua-broker-issuer-list
      namespace: azure-iot-operations
    spec:
      provider: azure
      parameters:
        usePodIdentity: 'false'
        keyvaultName: <your-azure-key-vault-name>
        tenantId: <your-azure-tenant-id>
        objects: |
          array:
            - |
              objectName: my-server-ca-crt
              objectType: secret
              objectAlias: my-server-ca.crt
              objectEncoding: hex
            - |
              objectName: my-server-ca-crl
              objectType: secret
              objectAlias: my-server-ca.crl
              objectEncoding: hex
    

    Remarque

    Le temps nécessaire pour projeter des certificats Azure Key Vault dans le cluster dépend de l’intervalle d’interrogation configuré.

Configurer votre serveur OPC UA

Pour mener à bien la configuration de l’approbation mutuelle de l’authentification d’application, vous devez configurer votre serveur OPC UA de façon à approuver le certificat d’instance d’application d’OPC UA Broker :

  1. Pour extraire le certificat d’OPC UA Broker dans un fichier opcuabroker.crt, exécutez la commande suivante :

    kubectl -n azure-iot-operations get secret aio-opc-opcuabroker-default-application-cert -o jsonpath='{.data.tls\.crt}' | base64 -d > opcuabroker.crt
    

    Dans PowerShell, vous pouvez effectuer la même tâche avec la commande suivante :

    kubectl -n azure-iot-operations get secret aio-opc-opcuabroker-default-application-cert -o jsonpath='{.data.tls\.crt}' | %{ [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($_)) } > opcuabroker.crt
    
  2. De nombreux serveurs OPC UA prennent uniquement en charge les certificats au format DER. Si nécessaire, utilisez la commande suivante pour convertir le certificat opcuabroker.crt en certificat opcuabroker.der :

    openssl x509 -outform der -in opcuabroker.crt -out opcuabroker.der
    
  3. Consultez la documentation de votre serveur OPC UA pour savoir comment ajouter le fichier de certificat opcuabroker.crt ou opcuabroker.der à la liste des certificats approuvés du serveur.

Configurer un certificat d’instance d’application de niveau entreprise

Pour les environnements de production, vous pouvez configurer OPC UA Broker pour qu’il utilise un certificat d’instance d’application de niveau entreprise. En règle générale, une autorité de certification d’entreprise émet ce certificat, et vous avez besoin du certificat de l’autorité de certification dans votre configuration. Souvent, il existe une hiérarchie d’autorités de certification et vous devez ajouter la chaîne de validation complète des autorités de certification à votre configuration.

L’exemple ci-dessous fait référence aux éléments suivants :

Élément Description
opcuabroker-certificate.der Fichier contenant la clé publique du certificat d’instance d’application de niveau entreprise.
opcuabroker-certificate.pem Fichier contenant la clé privée du certificat d’instance d’application de niveau entreprise.
subjectName Chaîne de nom d’objet incorporée dans le certificat d’instance d’application.
applicationUri URI de l’instance d’application incorporé dans l’instance d’application.
enterprise-grade-ca-1.der Fichier contenant la clé publique du certificat d’autorité de certification de niveau entreprise.
enterprise-grade-ca-1.crl Fichier de liste de révocation de certificats (CRL) de l’autorité de certification.

Comme dans les exemples précédents, vous stockez les certificats et les listes CRL dans Azure Key Vault. Vous configurez ensuite les ressources personnalisées SecretProviderClass dans le cluster connecté pour projeter les certificats et les listes CRL dans les pods OPC UA Broker. Pour configurer le certificat d’instance d’application de niveau entreprise, effectuez les étapes suivantes :

  1. Enregistrez les certificats et la liste CRL dans Azure Key Vault sous forme de secrets en utilisant les commandes suivantes :

     # Upload OPC UA Broker public key certificate as secret to Azure Key Vault
     az keyvault secret set \
       --name "opcuabroker-certificate-der" \
       --vault-name <your-azure-key-vault-name> \
       --file ./opcuabroker-certificate.der \
       --encoding hex \
       --content-type application/pkix-cert
    
     # Upload OPC UA Broker private key certificate as secret to Azure Key Vault
     az keyvault secret set \
       --name "opcuabroker-certificate-pem" \
       --vault-name <your-azure-key-vault-name> \
       --file ./opcuabroker-certificate.pem \
       --encoding hex \
       --content-type application/x-pem-file
    
     # Upload CA public key certificate as secret to Azure Key Vault
     az keyvault secret set \
       --name "enterprise-grade-ca-1-der" \
       --vault-name <your-azure-key-vault-name> \
       --file ./enterprise-grade-ca-1.der \
       --encoding hex \
       --content-type application/pkix-cert
    
     # Upload CA certificate revocation list as secret to Azure Key Vault
     az keyvault secret set \
       --name "enterprise-grade-ca-1-crl" \
       --vault-name <your-azure-key-vault-name> \
       --file ./enterprise-grade-ca-1.crl \
       --encoding hex \
       --content-type application/pkix-crl
    
  2. Configurez la ressource personnalisée aio-opc-ua-broker-client-certificate dans le cluster. Utilisez un client Kubernetes tel que kubectl pour configurer les secrets opcuabroker-certificate-der et opcuabroker-certificate-pem dans le tableau d’objets SecretProviderClass du cluster.

    L’exemple suivant montre une ressource personnalisée SecretProviderClass complète après l’ajout des configurations de secrets :

    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: aio-opc-ua-broker-client-certificate
      namespace: azure-iot-operations
    spec:
      provider: azure
      parameters:
        usePodIdentity: 'false'
        keyvaultName: <your-azure-key-vault-name>
        tenantId: <your-azure-tenant-id>
        objects: |
          array:
            - |
              objectName: opcuabroker-certificate-der
              objectType: secret
              objectAlias: opcuabroker-certificate.der
              objectEncoding: hex
            - |
              objectName: opcuabroker-certificate-pem
              objectType: secret
              objectAlias: opcuabroker-certificate.pem
              objectEncoding: hex
    
  3. Si vous vous servez de l’autorité de certification pour émettre les certificats de vos serveurs OPC UA, configurez la ressource personnalisée aio-opc-ua-broker-issuer-list dans le cluster. Utilisez un client Kubernetes tel que kubectl pour configurer les secrets enterprise-grade-ca-1-der et enterprise-grade-ca-1-crl dans le tableau d’objets SecretProviderClass du cluster.

    L’exemple suivant montre une ressource personnalisée SecretProviderClass complète après l’ajout des configurations de secrets :

    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: aio-opc-ua-broker-issuer-list
      namespace: azure-iot-operations
    spec:
      provider: azure
      parameters:
        usePodIdentity: 'false'
        keyvaultName: <your-azure-key-vault-name>
        tenantId: <your-azure-tenant-id>
        objects: |
          array:
            - |
              objectName: enterprise-grade-ca-1-der
              objectType: secret
              objectAlias: enterprise-grade-ca-1.der
              objectEncoding: hex
            - |
              objectName: enterprise-grade-ca-1-crl
              objectType: secret
              objectAlias: enterprise-grade-ca-1.crl
              objectEncoding: hex
    
  4. Mettez à jour le déploiement d’OPC UA Broker de sorte qu’il utilise la nouvelle source SecretProviderClass pour les certificats d’instance d’application en utilisant la commande suivante :

    az k8s-extension update \
        --version 0.3.0-preview \
        --name opc-ua-broker \
        --release-train preview \
        --cluster-name <cluster-name> \
        --resource-group <azure-resource-group> \
        --cluster-type connectedClusters \
        --auto-upgrade-minor-version false \
        --config securityPki.applicationCert=aio-opc-ua-broker-client-certificate \
        --config securityPki.subjectName=<subjectName> \
        --config securityPki.applicationUri=<applicationUri>
    

Maintenant que OPC UA Broker utilise le certificat d’entreprise, n’oubliez pas d’ajouter la clé publique du nouveau certificat dans les listes de certificats approuvés de tous les serveurs OPC UA auxquels il doit se connecter.