Share via


Configurar a infraestrutura de certificados OPC UA para a versão prévia do Agente OPC UA da Internet das Coisas do Azure

Importante

O recurso Pré-visualização de Operações do Azure IoT — habilitado pelo Azure Arc — está atualmente em VERSÃO PRÉVIA. Você não deve usar esse software em versão prévia em ambientes de produção.

Veja os Termos de Uso Complementares para Versões Prévias do Microsoft Azure para obter termos legais que se aplicam aos recursos do Azure que estão em versão beta, versão prévia ou que, de outra forma, ainda não foram lançados em disponibilidade geral.

Neste artigo, você aprenderá a configurar a infraestrutura de Certificados OPC UA para o Agente OPC UA do Azure IoT. Essa infraestrutura fornece controle sobre quais servidores OPC UA no campo são confiáveis para estabelecer uma sessão com segurança e coletar telemetria para sua solução. De acordo com a especificação OPC UA, o Agente OPC UA atua como um aplicativo UA único quando estabelece uma comunicação segura com os servidores OPC UA. O Agente OPC UA do Azure IoT usa o mesmo certificado de instância de aplicativo para todos os canais seguros entre si e os servidores OPC UA aos quais ele se conecta.

Pré-requisitos

Versão Prévia das Operações do Azure IoT instalada. Para obter mais informações, confira Início rápido: Implantar Operações do Azure IoT – em um cluster do Kubernetes habilitado para Arc.

Recursos com suporte

A tabela a seguir mostra o nível de suporte de recursos para autenticação na versão atual do Agente OPC UA:

Recursos Significado Símbolo
Configuração do certificado de instância de aplicativo autoassinado do OPC UA Com suporte
Manipulação da lista de certificados confiáveis do OPC UA Com suporte
Manipulação da listas de certificados confiáveis do emissor OPC UA Com suporte
Configuração do certificado de instância de aplicativo de grau empresarial do OPC UA Com suporte
Manipulação de certificados não confiáveis do OPC UA Sem suporte
Tratamento do GDS (Serviço de Descoberta Global) do OPC UA Sem suporte

Configuração de um certificado de instância de aplicativo OPC UA autoassinado

A implantação padrão do Agente OPC UA instala todos os recursos necessários para o cert-manager do Kubernetes criar um certificado autoassinado compatível com OPC UA. Esse certificado é armazenado no segredo do kubernetes aio-opc-opcuabroker-default-application-cert. Esse segredo é mapeado em todos os pods kubernetes do conector OPC UA e atua como o certificado da instância do aplicativo cliente OPC UA. A renovação do certificado da instância de aplicativo é feita automaticamente pelo gerenciador de certificados do Kubernetes.

Essa configuração normalmente é boa o suficiente para garantir uma comunicação compatível e segura entre seu ativo compatível com OPC UA e o Agente OPC UA para fins de demonstração e teste. Para fins de produção, você deve usar certificados de instância de aplicativo de nível empresarial em sua implantação.

Como lidar com a lista de certificados confiáveis do OPC UA

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

  1. Obtenha o certificado de instância do aplicativo de servidor OPC UA (somente chave pública) no formato de arquivo *.der ou *.crt.

    Normalmente, os servidores OPC UA têm uma interface que permite a exportação de seu certificado de instância de aplicativo. Essa interface não é padronizada. Para servidores como PTC KepWareEx, uma interface do usuário de configuração baseada no Windows está disponível para gerenciamento de certificados. Alguns outros servidores têm uma interface da Web, enquanto outros usam determinadas pastas no sistema operacional para armazenar os certificados. Consulte o manual do usuário do servidor para descobrir como exportar o certificado da instância do aplicativo. Depois de ter o certificado como um arquivo, verifique se ele está no formato de arquivo *.der ou *.crt (PEM). Se o certificado não estiver em um desses formatos, use ferramentas como openssl para transformar o certificado no formato de arquivo *.der ou *.crt necessário.

  2. Envie por push o certificado da instância de aplicativo do servidor OPC UA no Azure Key Vault como um segredo.

    Para o arquivo do certificado de formato de arquivo *.der./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 <azure-key-vault-name> \
      --file ./my-server.der \
      --encoding hex \
      --content-type application/pkix-cert
    

    Para o arquivo do certificado (PEM) de formato de arquivo *.crt./my-server.crt 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-crt" \
      --vault-name <azure-key-vault-name> \
      --file ./my-server.crt \
      --encoding hex \
      --content-type application/x-pem-file
    
  3. Configure a SPC (Classe de provedor de segredos) aio-opc-ua-broker-trust-list no recurso personalizado CR no cluster conectado. Use um cliente K8s como o kubectl para configurar os segredos (my-server-der ou my-server-crt no exemplo a seguir) na matriz de objetos do SPC no cluster conectado.

    O exemplo a seguir mostra um SPC CR completo que contém o certificado de servidor OPC UA confiável em configuração de formato de arquivo *.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: <azure-key-vault-name>
        tenantId: <azure-tenant-id>
        objects: |
          array:
            - |
              objectName: my-server-der
              objectType: secret
              objectAlias: my-server.der
              objectEncoding: hex
    

    O exemplo a seguir mostra um SPC CR completo que contém o certificado de servidor OPC UA confiável em configuração de formato de arquivo *.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: <azure-key-vault-name>
        tenantId: <azure-tenant-id>
        objects: |
          array:
            - |
              objectName: my-server-crt
              objectType: secret
              objectAlias: my-server.crt
              objectEncoding: hex
    

    A projeção dos segredos e certificados do Azure Key Vault para o cluster leva algum tempo, dependendo do intervalo de pesquisa configurado.

Se o servidor OPC UA usar um certificado emitido por uma AC (Autoridade de Certificação), você poderá confiar na AC adicionando seu certificado de chave pública à lista de certificados confiáveis do OPC UA Broker. Dessa forma, sua instância do OPC UA Broker confia automaticamente em todos os servidores que usam um certificado válido emitido pela AC. Nesse caso, 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 AC, use as seguintes etapas de configuração:

  1. Obtenha a chave pública do certificado de autoridade de certificação no formato de arquivo *.der ou *.crt. Obtenha a CRL (lista de certificados revogados) da AC no formato de arquivo *.crl. Consulte a documentação do servidor OPC UA para localizar os detalhes específicos.

  2. Envie por push o certificado de AUTORIDADE de Certificação e a CRL no Azure Key Vault como segredos.

    Para o arquivo do certificado de formato de arquivo *.der./my-server-ca.der execute o seguinte comando:

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

    Para o arquivo do certificado (PEM) de formato de arquivo *.crt./my-server-ca.crt execute o seguinte comando:

    # Upload CA certificate as secret to Azure Key Vault
    az keyvault secret set \
      --name "my-server-ca-crt" \
      --vault-name <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 <azure-key-vault-name> \
      --file ./my-server-ca.crl \
      --encoding hex \
      --content-type application/pkix-crl
    
  3. Configure a SPC (Classe de provedor de segredos) aio-opc-ua-broker-trust-list no recurso personalizado CR no cluster conectado. Use um cliente K8s como o kubectl para configurar os segredos (my-server-ca-der ou my-server-ca-crt no exemplo a seguir) na matriz de objetos do SPC no cluster conectado.

    O exemplo a seguir mostra um SPC CR completo que contém o certificado de servidor OPC UA confiável em configuração de formato de arquivo *.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: <azure-key-vault-name>
        tenantId: <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 SPC CR completo que contém o certificado de servidor OPC UA confiável em configuração de formato de arquivo *.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: <azure-key-vault-name>
        tenantId: <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
    

    A projeção dos segredos e certificados do Azure Key Vault para o cluster leva algum tempo, dependendo do intervalo de pesquisa configurado.

Como lidar com a Lista de certificados do emissor do OPC UA

Se o servidor OPC UA usar um certificado emitido por uma AC (Autoridade de Certificação), mas não quiser confiar na AC, conclua as seguintes etapas:

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

  2. Além do próprio certificado, o Agente de OPC UA precisa do certificado de AC para validar corretamente a cadeia de emissor do certificado do servidor OPC UA. Adicione o certificado de AC e seu arquivo CRL a uma lista separada chamada aio-opc-ua-broker-issuer-list.

    Envie por push o certificado de AC no Azure Key Vault como um segredo.

    Para o arquivo do certificado de formato de arquivo *.der./my-server-ca.der execute o seguinte comando:

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

    Para o arquivo do certificado (PEM) de formato de arquivo *.crt./my-server-ca.crt execute o seguinte comando:

    # Upload CA certificate as secret to Azure Key Vault
    az keyvault secret set \
      --name "my-server-ca-crt" \
      --vault-name <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 <azure-key-vault-name> \
      --file ./my-server-ca.crl \
      --encoding hex \
      --content-type application/pkix-crl
    
  3. Configure a SPC (Classe de provedor de segredos) aio-opc-ua-broker-issuer-list no recurso personalizado CR no cluster conectado. Use um cliente K8s como o kubectl para configurar os segredos (my-server-ca-der ou my-server-ca-crt no exemplo a seguir) na matriz de objetos do SPC no cluster conectado.

    O exemplo a seguir mostra um SPC CR completo que contém o certificado de servidor OPC UA confiável em configuração de formato de arquivo *.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: <azure-key-vault-name>
        tenantId: <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 SPC CR completo que contém o certificado de servidor OPC UA confiável em configuração de formato de arquivo *.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: <azure-key-vault-name>
        tenantId: <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
    

    A projeção dos segredos e certificados do Azure Key Vault para o cluster leva algum tempo, dependendo do intervalo de pesquisa configurado.

Exportar o certificado de instância de aplicativo do Agente OPC UA e estabelecer confiança mútua com o servidor OPC UA

Depois de confiar no certificado do servidor OPC UA, você extrai o certificado do Agente OPC UA do segredo do kubernetes e o adicionará à lista de certificados confiáveis do servidor OPC UA.

  1. Extraia o certificado do Agente OPC UA em um arquivo opcuabroker.crt:

    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 dão suporte apenas a certificados no formato de arquivo *.der. Se necessário, use o seguinte comando para converter um certificado extraído opcuabroker.crt em opcuabroker.der:

    openssl x509 -outform der -in opcuabroker.crt -out opcuabroker.der
    
  3. Consulte a documentação do servidor OPC UA e adicione o arquivo opcuabroker.crt ou opcuabroker.der aos certificados confiáveis.

Configurar o certificado de instância de aplicativo de grau empresarial do OPC UA

Para ambientes de produção, você pode configurar o Agente OPC UA para usar um certificado de instância de aplicativo de nível empresarial. Normalmente, uma AC (autoridade de certificação) corporativa emite esse certificado, portanto, você precisa do certificado de AC em sua configuração. Muitas vezes, uma hierarquia de ACs está envolvida. Você precisa da cadeia de validação completa de ACs para sua configuração.

Os exemplos de código a seguir fazem referência aos seguintes itens:

  • opcuabroker-certificate.der – o certificado de chave pública do arquivo de certificado da instância de aplicativo de nível empresarial
  • opcuabroker-certificate.pem – o certificado de chave privada do arquivo de certificado da instância de aplicativo de nível empresarial
  • subjectName – o nome da entidade inserido no certificado da instância do aplicativo no formato de cadeia de caracteres. O valor padrão é: "CN=aio-opc-opcuabroker". O ideal é que o certificado de nível empresarial já seja gerado com o nome da entidade padrão
  • applicationUri – o uri da instância do aplicativo inserido no certificado da instância do aplicativo. O valor padrão é: "urn:microsoft.com:aio:opc:opcuabroker". O ideal é que o certificado de nível empresarial já seja gerado com o uri padrão padrão.
  • enterprise-grade-ca-1.der – o certificado de chave pública do arquivo de AC de nível empresarial
  • enterprise-grade-ca-1.crl – o arquivo CRL (lista de certificados revogados) da AC

Para a configuração do certificado de instância de aplicativo de nível empresarial, o mecanismo Azure Key Vault e CSI/classe de provedor de segredos (CSP) é usado para projetar os certificados no cluster kubernetes.

Para configurar o certificado da instância do aplicativo de nível empresarial, conclua as etapas a seguir.

  1. Envie todos os certificados para o Azure Key Vault 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 <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 <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 <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 <azure-key-vault-name> \
       --file ./enterprise-grade-ca-1.crl \
       --encoding hex \
       --content-type application/pkix-crl
    
  2. Configure a classe de provedor de segredos aio-opc-ua-broker-client-certificate no recurso personalizado CR no cluster conectado. Use um cliente K8s como o kubectl para configurar os segredos opcuabroker-certificate-der e opcuabroker-certificate-pem na matriz de objetos SPC no cluster conectado.

    O exemplo a seguir mostra um CR de SPC completo após adicionar as configurações do segredo:

    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: <azure-key-vault-name>
        tenantId: <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ê usa AC, configure a classe de provedor de segredos aio-opc-ua-broker-issuer-list no recurso personalizado (CR) no cluster conectado. Use um cliente K8s como o kubectl para configurar os segredos enterprise-grade-ca-1-der e enterprise-grade-ca-1-crl na matriz de objetos SPC no cluster conectado.

    O exemplo a seguir mostra um CR de SPC completo após adicionar as configurações do segredo:

    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: <azure-key-vault-name>
        tenantId: <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 Agente OPC UA para usar a nova origem do CPS 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 certificado empresarial é usado pelo Agente OPC UA, não se esqueça de adicionar a chave pública do novo certificado nas listas de certificados confiáveis de todos os servidores OPC UA aos quais você precisa se conectar.