Condividi tramite


Configurare l'infrastruttura di certificati OPC UA per l'anteprima di Azure IoT OPC UA Broker

Importante

Anteprima delle operazioni di Azure IoT: abilitata da Azure Arc è attualmente disponibile in ANTEPRIMA. Non è consigliabile usare questo software di anteprima negli ambienti di produzione.

Vedere le condizioni per l'utilizzo supplementari per le anteprime di Microsoft Azure per termini legali aggiuntivi che si applicano a funzionalità di Azure in versione beta, in anteprima o in altro modo non ancora disponibili a livello generale.

Questo articolo illustra come configurare l'infrastruttura di certificati OPC UA per Azure IoT OPC UA Broker. Questa configurazione consente di determinare con quali server OPC UA considerare attendibili per stabilire in modo sicuro una sessione.

In base alla specifica OPC UA, OPC UA Broker funge da singola applicazione OPC UA quando stabilisce comunicazioni sicure con i server OPC UA. Azure IoT OPC UA Broker usa lo stesso certificato dell'istanza dell'applicazione per tutti i canali sicuri che si apre ai server OPC UA.

Per altre informazioni, vedere Infrastruttura di certificati OPC UA per Azure IoT OPC UA Broker Preview.

Prerequisiti

Istanza distribuita di Azure IoT Operations Preview. Per distribuire le operazioni IoT di Azure a scopo dimostrativo ed esplorazione, vedere Avvio rapido: Distribuire operazioni IoT di Azure in un cluster Kubernetes abilitato per Arc.

Configurare un certificato di istanza dell'applicazione autofirmato

La distribuzione predefinita di OPC UA Broker installa tutte le risorse necessarie da cert-manager per creare un certificato autofirmato conforme a OPC UA. Questo certificato viene archiviato nel aio-opc-opcuabroker-default-application-cert segreto. Questo segreto viene mappato in tutti i pod del connettore OPC UA e funge da certificato dell'istanza dell'applicazione client OPC UA. cert-manager gestisce il rinnovo automatico del certificato dell'istanza dell'applicazione.

Questa configurazione è in genere sufficiente per la comunicazione conforme e sicura tra i server OPC UA e OPC UA Broker in un ambiente dimostrativo o di esplorazione. Per un ambiente di produzione, usare i certificati dell'istanza dell'applicazione di livello aziendale nella distribuzione.

Configurare l'elenco di certificati attendibili

Per connettersi a un asset, è prima necessario stabilire l'autenticazione reciproca dell'applicazione. Per OPC UA Broker, completare la procedura seguente:

  1. Ottenere il certificato dell'istanza dell'applicazione server OPC UA come file. Questi file in genere hanno un'estensione .der o crt. Questa è solo la chiave pubblica.

    Suggerimento

    In genere, un server OPC UA ha un'interfaccia che consente di esportare il certificato dell'istanza dell'applicazione. Questa interfaccia non è standardizzata. Per i server come KEPServerEx, è disponibile un'interfaccia utente di configurazione basata su Windows per la gestione dei certificati. Altri server possono avere un'interfaccia Web o usare cartelle del sistema operativo per archiviare i certificati. Fare riferimento al manuale dell'utente del server per informazioni su come esportare il certificato dell'istanza dell'applicazione. Dopo aver ottenuto il certificato, assicurarsi che sia codificato con DER o PEM. In genere archiviato nei file con estensione der o crt. Se il certificato non è in uno di questi formati di file, usare uno strumento come openssl per trasformare il certificato nel formato richiesto.

  2. Salvare il certificato dell'istanza dell'applicazione del server OPC UA in Azure Key Vault come segreto.

    Per un certificato con codifica DER in un file, ad esempio ./my-server.der, eseguire il comando seguente:

    # 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
    

    Per un certificato con codifica PEM in un file come ./my-server.crt, eseguire il comando seguente:

    # 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. Configurare la aio-opc-ua-broker-trust-list risorsa personalizzata nel cluster. Usare un client Kubernetes, kubectl ad esempio per configurare i segreti, ad esempio my-server-der o my-server-crt, nella SecretProviderClass matrice di oggetti nel cluster.

    L'esempio seguente mostra una risorsa personalizzata completa SecretProviderClass che contiene il certificato del server OPC UA attendibile in un file con codifica 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'esempio seguente mostra una risorsa personalizzata completa SecretProviderClass che contiene il certificato del server OPC UA attendibile in un file con codifica PEM con estensione 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
    

    Nota

    Il tempo necessario per proiettare i certificati di Azure Key Vault nel cluster dipende dall'intervallo di polling configurato.

Se il server OPC UA usa un certificato emesso da un'autorità di certificazione (CA), è possibile considerare attendibile la CA aggiungendo il certificato di chiave pubblica all'elenco di certificati attendibili OPC UA Broker. L'istanza di OPC UA Broker ora considera automaticamente attendibili tutti i server che usano un certificato valido emesso dalla CA. Non è quindi necessario aggiungere in modo esplicito il certificato del server OPC UA all'elenco di certificati attendibili OPC UA Broker.

Per considerare attendibile una CA, completare i passaggi seguenti:

  1. Ottenere la codifica della chiave pubblica del certificato CA in formato DER o PEM. Questi certificati vengono in genere archiviati nei file con estensione .der o crt. Ottenere l'elenco di revoche di certificati (CRL) della CA. Questo elenco si trova in genere in un file con estensione crl. Per informazioni dettagliate, vedere la documentazione relativa al server OPC UA.

  2. Salvare il certificato della CA e il CRL in Azure Key Vault come segreti.

    Per un certificato con codifica DER in un file come ./my-server-ca.der, eseguire i comandi seguenti:

    # 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
    

    Per un certificato con codifica PEM in un file, ad esempio ./my-server-ca.crt, eseguire i comandi seguenti:

    # 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. Configurare la aio-opc-ua-broker-trust-list risorsa personalizzata nel cluster. Usare un client Kubernetes, kubectl ad esempio per configurare i segreti, ad esempio my-server-ca-der o my-server-ca-crt, nella SecretProviderClass matrice di oggetti nel cluster.

    L'esempio seguente mostra una risorsa personalizzata completa SecretProviderClass che contiene il certificato del server OPC UA attendibile in un file con codifica 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'esempio seguente mostra una risorsa personalizzata completa SecretProviderClass che contiene il certificato del server OPC UA attendibile in un file con codifica PEM con estensione 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
    

    Nota

    Il tempo necessario per proiettare i certificati di Azure Key Vault nel cluster dipende dall'intervallo di polling configurato.

Configurare l'elenco dei certificati dell'autorità emittente

Se il server OPC UA usa un certificato emesso da un'autorità di certificazione (CA), ma non si vuole considerare attendibili tutti i certificati rilasciati dalla CA, completare la procedura seguente:

  1. Considerare attendibile il certificato dell'istanza dell'applicazione del server OPC UA seguendo i primi tre passaggi della sezione precedente.

  2. Oltre al certificato stesso, OPC UA Broker richiede il certificato CA per convalidare correttamente la catena di autorità di certificazione del certificato del server OPC UA. Aggiungere il certificato CA e il relativo elenco di revoche di certificati (CRL) a un elenco separato denominato aio-opc-ua-broker-issuer-list.

    1. Salvare il certificato della CA e il CRL in Azure Key Vault come segreti.

      Per un certificato con codifica DER in un file come ./my-server-ca.der, eseguire i comandi seguenti:

      # 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
      

      Per un certificato con codifica PEM in un file, ad esempio ./my-server-ca.crt, eseguire i comandi seguenti:

      # 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. Configurare la aio-opc-ua-broker-issuer-list risorsa personalizzata nel cluster. Usare un client Kubernetes, kubectl ad esempio per configurare i segreti, ad esempio my-server-ca-der o my-server-ca-crt, nella SecretProviderClass matrice di oggetti nel cluster.

    L'esempio seguente mostra una risorsa personalizzata completa SecretProviderClass che contiene il certificato del server OPC UA attendibile in un file con codifica 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'esempio seguente mostra una risorsa personalizzata completa SecretProviderClass che contiene il certificato del server OPC UA attendibile in un file con codifica PEM con estensione 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
    

    Nota

    Il tempo necessario per proiettare i certificati di Azure Key Vault nel cluster dipende dall'intervallo di polling configurato.

Configurare il server OPC UA

Per completare la configurazione dell'attendibilità reciproca dell'autenticazione dell'applicazione, è necessario configurare il server OPC UA in modo che consideri attendibile il certificato dell'istanza dell'applicazione OPC UA Broker:

  1. Per estrarre il certificato di OPC UA Broker in un opcuabroker.crt file, eseguire il comando seguente:

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

    In PowerShell è possibile completare la stessa attività con il comando seguente:

    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. Molti server OPC UA supportano solo i certificati nel formato DER. Se necessario, usare il comando seguente per convertire il certificato opcuabroker.crt in opcuabroker.der:

    openssl x509 -outform der -in opcuabroker.crt -out opcuabroker.der
    
  3. Consultare la documentazione del server OPC UA per informazioni su come aggiungere il opcuabroker.crt file di certificato o opcuabroker.der all'elenco di certificati attendibili del server.

Configurare un certificato dell'istanza dell'applicazione di livello aziendale

Per gli ambienti di produzione, è possibile configurare OPC UA Broker per l'uso di un certificato di istanza dell'applicazione di livello aziendale. In genere, un'autorità di certificazione (CA) dell'organizzazione rilascia questo certificato ed è necessario il certificato della CA per la configurazione. Spesso è presente una gerarchia di CA ed è necessario aggiungere la catena completa di convalida delle ca alla configurazione.

L'esempio seguente fa riferimento agli elementi seguenti:

Articolo Descrizione
opcuabroker-certificate.der File contenente la chiave pubblica del certificato dell'istanza dell'applicazione di livello aziendale.
opcuabroker-certificate.pem File contenente la chiave privata del certificato dell'istanza dell'applicazione di livello aziendale.
subjectName Stringa del nome soggetto incorporata nel certificato dell'istanza dell'applicazione.
applicationUri URI dell'istanza dell'applicazione incorporato nell'istanza dell'applicazione.
enterprise-grade-ca-1.der File contenente la chiave pubblica del certificato CA di livello aziendale.
enterprise-grade-ca-1.crl Il file dell'elenco di revoche di certificati (CRL) della CA.

Come negli esempi precedenti, si usa Azure Key Vault per archiviare i certificati e i CRL. Si configurano quindi le SecretProviderClass risorse personalizzate nel cluster connesso per proiettare i certificati e i CRL nei pod OPC UA Broker. Per configurare il certificato dell'istanza dell'applicazione di livello aziendale, completare la procedura seguente:

  1. Salvare i certificati e il CRL in Azure Key Vault come segreti usando i comandi seguenti:

     # 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. Configurare la aio-opc-ua-broker-client-certificate risorsa personalizzata nel cluster. Usare un client Kubernetes, kubectl ad esempio per configurare i segreti opcuabroker-certificate-der e opcuabroker-certificate-pem nella SecretProviderClass matrice di oggetti nel cluster.

    L'esempio seguente mostra una risorsa personalizzata completa SecretProviderClass dopo aver aggiunto le configurazioni dei segreti:

    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. Se si usa la CA per rilasciare certificati per i server OPC UA, configurare aio-opc-ua-broker-issuer-list la risorsa personalizzata nel cluster. Usare un client Kubernetes, kubectl ad esempio per configurare i segreti enterprise-grade-ca-1-der e enterprise-grade-ca-1-crl nella SecretProviderClass matrice di oggetti nel cluster.

    L'esempio seguente mostra una risorsa personalizzata completa SecretProviderClass dopo aver aggiunto le configurazioni dei segreti:

    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. Aggiornare la distribuzione di OPC UA Broker per usare la nuova SecretProviderClass origine per i certificati dell'istanza dell'applicazione usando il comando seguente:

    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>
    

Ora che OPC UA Broker usa il certificato aziendale, non dimenticare di aggiungere la chiave pubblica del nuovo certificato agli elenchi di certificati attendibili di tutti i server OPC UA a cui deve connettersi.