Partilhar via


Configurar a infraestrutura de certificados OPC UA para o Azure IoT OPC UA Broker Preview

Importante

Azure IoT Operations Preview – habilitado pelo Azure Arc está atualmente em visualização. Não deve utilizar este software de pré-visualização em ambientes de produção.

Veja Termos de Utilização Complementares da Pré-visualizações do Microsoft Azure para obter os termos legais que se aplicam às funcionalidades do Azure que estão na versão beta, na pré-visualização ou que ainda não foram lançadas para disponibilidade geral.

Neste artigo, você aprenderá a configurar a infraestrutura de certificados OPC UA para o Azure IoT OPC UA Broker. Essa configuração permite determinar com quais servidores OPC UA você confia para estabelecer uma sessão com segurança.

Com base na especificação OPC UA, o OPC UA Broker atua como um único aplicativo OPC UA quando estabelece comunicações seguras com servidores OPC UA. O Azure IoT OPC UA Broker usa o mesmo certificado de instância de aplicativo para todos os canais seguros que abre para seus servidores OPC UA.

Para saber mais, consulte Infraestrutura de certificados OPC UA para Azure IoT OPC UA Broker Preview.

Pré-requisitos

Uma instância implantada do Azure IoT Operations Preview. Para implantar o Azure IoT Operations para fins de demonstração e exploração, consulte Guia de início rápido: implantar operações do Azure IoT – em um cluster Kubernetes habilitado para Arc.

Configurar um certificado de instância de aplicativo autoassinado

A implantação padrão do OPC UA Broker instala todos os recursos necessários ao cert-manager para criar um certificado autoassinado compatível com OPC UA. Este certificado é armazenado em aio-opc-opcuabroker-default-application-cert segredo. Esse segredo é mapeado em todos os pods de conector OPC UA e atua como o certificado de instância do aplicativo cliente OPC UA. cert-manager lida com a renovação automática deste certificado de instância de aplicativo.

Essa configuração geralmente é suficiente para uma comunicação compatível e segura entre seus servidores OPC UA e o OPC UA Broker em um ambiente de demonstração ou exploração. Para um ambiente de produção, use certificados de instância de aplicativo de nível empresarial em sua implantação.

Configurar a lista de certificados confiáveis

Para se conectar a um ativo, primeiro você precisa estabelecer a confiança mútua de autenticação do aplicativo. Para OPC UA Broker, conclua as seguintes etapas:

  1. Obtenha o certificado de instância do aplicativo de servidor OPC UA como um arquivo. Esses arquivos normalmente têm uma extensão .der ou .crt. Esta é apenas a chave pública.

    Gorjeta

    Normalmente, um servidor OPC UA tem uma interface que permite exportar seu certificado de instância do aplicativo. Esta interface não é padronizada. Para servidores como o KEPServerEx, há uma interface do usuário de configuração baseada no Windows para gerenciamento de certificados. Outros servidores podem ter uma interface Web ou usar pastas do sistema operacional para armazenar os certificados. Consulte o manual do usuário do seu servidor para saber como exportar o certificado de instância do aplicativo. Depois de ter o certificado, certifique-se de que está codificado DER ou PEM. Normalmente armazenado em arquivos com a extensão .der ou .crt. Se o certificado não estiver em um desses formatos de arquivo, use uma ferramenta como openssl transformar o certificado no formato necessário.

  2. Salve o certificado de instância de aplicativo do servidor OPC UA no Cofre da Chave do Azure como um segredo.

    Para um certificado codificado DER em um arquivo como ./my-server.der, execute o seguinte comando:

    # 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
    

    Para um certificado codificado PEM em um arquivo como ./my-server.crt, execute o seguinte comando:

    # 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. Configure o aio-opc-ua-broker-trust-list recurso personalizado no cluster. Use um cliente Kubernetes como kubectl para configurar os segredos, como my-server-der ou my-server-crt, na matriz de SecretProviderClass objetos no cluster.

    O exemplo a seguir mostra um recurso personalizado completo SecretProviderClass que contém o certificado de servidor OPC UA confiável em um arquivo codificado pelo 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
    

    O exemplo a seguir mostra um recurso personalizado completo SecretProviderClass que contém o certificado de servidor OPC UA confiável em um arquivo codificado PEM com a extensão .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

    O tempo necessário para projetar certificados do Cofre da Chave do Azure no cluster depende do intervalo de sondagem configurado.

Se o seu OPC UA Server usa um certificado emitido por uma autoridade de certificação (CA), você pode confiar na CA adicionando seu certificado de chave pública à lista de certificados confiáveis do OPC UA Broker. A instância do OPC UA Broker agora confia automaticamente em todos os servidores que usam um certificado válido emitido pela autoridade de certificação. Portanto, você não precisa adicionar explicitamente o certificado do servidor OPC UA à lista de certificados confiáveis do OPC UA Broker.

Para confiar em uma autoridade de certificação, conclua as seguintes etapas:

  1. Obtenha a codificação de chave pública do certificado da autoridade de certificação no formato DER ou PEM. Esses certificados são normalmente armazenados em arquivos com a extensão .der ou .crt. Obtenha a lista de revogação de certificados (CRL) da autoridade de certificação. Essa lista normalmente está em um arquivo com o .crl. Verifique a documentação do seu servidor OPC UA para obter detalhes.

  2. Salve o certificado da autoridade de certificação e a CRL no Cofre da Chave do Azure como segredos.

    Para um certificado codificado DER em um arquivo como ./my-server-ca.der, execute os seguintes comandos:

    # 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
    

    Para um certificado codificado PEM em um arquivo como ./my-server-ca.crt, execute os seguintes comandos:

    # 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. Configure o aio-opc-ua-broker-trust-list recurso personalizado no cluster. Use um cliente Kubernetes como kubectl para configurar os segredos, como my-server-ca-der ou my-server-ca-crt, na matriz de SecretProviderClass objetos no cluster.

    O exemplo a seguir mostra um recurso personalizado completo SecretProviderClass que contém o certificado de servidor OPC UA confiável em um arquivo codificado pelo 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
    

    O exemplo a seguir mostra um recurso personalizado completo SecretProviderClass que contém o certificado de servidor OPC UA confiável em um arquivo codificado PEM com a extensão .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

    O tempo necessário para projetar certificados do Cofre da Chave do Azure no cluster depende do intervalo de sondagem configurado.

Configurar a lista de certificados do emissor

Se o servidor OPC UA usa um certificado emitido por uma autoridade de certificação (CA), mas você não deseja confiar em todos os certificados emitidos pela CA, conclua as seguintes etapas:

  1. Confie no certificado de instância de aplicativo do servidor OPC UA seguindo as três primeiras etapas na seção anterior.

  2. Além do certificado em si, o OPC UA Broker precisa do certificado CA para validar corretamente a cadeia de emissores do certificado do servidor OPC UA. Adicione o certificado da autoridade de certificação e sua lista de revogação de certificados (CRL) a uma lista separada chamada aio-opc-ua-broker-issuer-list.

    1. Salve o certificado da autoridade de certificação e a CRL no Cofre da Chave do Azure como segredos.

      Para um certificado codificado DER em um arquivo como ./my-server-ca.der, execute os seguintes comandos:

      # 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
      

      Para um certificado codificado PEM em um arquivo como ./my-server-ca.crt, execute os seguintes comandos:

      # 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. Configure o aio-opc-ua-broker-issuer-list recurso personalizado no cluster. Use um cliente Kubernetes como kubectl para configurar os segredos, como my-server-ca-der ou my-server-ca-crt, na matriz de SecretProviderClass objetos no cluster.

    O exemplo a seguir mostra um recurso personalizado completo SecretProviderClass que contém o certificado de servidor OPC UA confiável em um arquivo codificado pelo 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
    

    O exemplo a seguir mostra um recurso personalizado completo SecretProviderClass que contém o certificado de servidor OPC UA confiável em um arquivo codificado PEM com a extensão .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

    O tempo necessário para projetar certificados do Cofre da Chave do Azure no cluster depende do intervalo de sondagem configurado.

Configurar o servidor OPC UA

Para concluir a configuração da confiança mútua de autenticação de aplicativo, você precisa configurar seu servidor OPC UA para confiar no certificado de instância de aplicativo do OPC UA Broker:

  1. Para extrair o certificado do OPC UA Broker em um opcuabroker.crt arquivo, execute o seguinte comando:

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

    No PowerShell, você pode concluir a mesma tarefa com o seguinte comando:

    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. Muitos servidores OPC UA suportam apenas certificados no formato DER. Se necessário, use o seguinte comando para converter o certificado opcuabroker.crt em opcuabroker.der:

    openssl x509 -outform der -in opcuabroker.crt -out opcuabroker.der
    
  3. Consulte a documentação do seu servidor OPC UA para saber como adicionar o opcuabroker.crt arquivo de certificado ou opcuabroker.der à lista de certificados confiáveis do servidor.

Configurar um certificado de instância de aplicativo de nível empresarial

Para ambientes de produção, você pode configurar o OPC UA Broker para usar um certificado de instância de aplicativo de nível empresarial. Normalmente, uma autoridade de certificação (CA) corporativa emite esse certificado e você precisa do certificado da autoridade de certificação para sua configuração. Muitas vezes, há uma hierarquia de CAs e você precisa adicionar a cadeia de validação completa de CAs à sua configuração.

O exemplo a seguir faz referência aos seguintes itens:

Item Description
opcuabroker-certificate.der Arquivo que contém a chave pública do certificado de instância do aplicativo de nível empresarial.
opcuabroker-certificate.pem Arquivo que contém a chave privada do certificado de instância do aplicativo de nível empresarial.
subjectName A cadeia de caracteres do nome da entidade incorporada no certificado da instância do aplicativo.
applicationUri O URI da instância do aplicativo incorporado na instância do aplicativo.
classe empresarial-ca-1.der Arquivo que contém a chave pública do certificado de autoridade de certificação de nível empresarial.
Classe Empresarial-CA-1.CRL O arquivo de lista de revogação de certificados (CRL) da autoridade de certificação.

Como os exemplos anteriores, você usa o Azure Key Vault para armazenar os certificados e CRLs. Em seguida, configure os SecretProviderClass recursos personalizados no cluster conectado para projetar os certificados e CRLs nos pods do OPC UA Broker. Para configurar o certificado de instância de aplicativo de nível empresarial, conclua as seguintes etapas:

  1. Salve os certificados e a CRL no Cofre da Chave do Azure como segredos usando os seguintes comandos:

     # 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. Configure o aio-opc-ua-broker-client-certificate recurso personalizado no cluster. Use um cliente Kubernetes como kubectl para configurar os segredos e opcuabroker-certificate-pem na SecretProviderClass matriz de opcuabroker-certificate-der objetos no cluster.

    O exemplo a seguir mostra um recurso personalizado completo SecretProviderClass depois de adicionar as configurações secretas:

    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 você usar a autoridade de certificação para emitir certificados para seus servidores OPC UA, configure aio-opc-ua-broker-issuer-list o recurso personalizado no cluster. Use um cliente Kubernetes como kubectl para configurar os segredos e enterprise-grade-ca-1-crl na SecretProviderClass matriz de enterprise-grade-ca-1-der objetos no cluster.

    O exemplo a seguir mostra um recurso personalizado completo SecretProviderClass depois de adicionar as configurações secretas:

    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. Atualize a implantação do OPC UA Broker para usar a nova SecretProviderClass fonte para certificados de instância de aplicativo usando o seguinte comando:

    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>
    

Agora que o OPC UA Broker usa o certificado enterprise, não se esqueça de adicionar a chave pública do novo certificado às listas de certificados confiáveis de todos os servidores OPC UA aos quais ele precisa se conectar.