Gerenciar certificados para sua implantação do Operações IoT do Azure

O Operações IoT do Azure usa TLS para criptografar a comunicação entre todos os componentes. Este artigo descreve como gerenciar certificados para comunicações internas e externas e como trazer seu próprio emissor de autoridade de certificação (CA) para comunicações internas em uma implantação de produção.

Pré-requisitos

Para gerenciar certificados para comunicações externas, você precisa de uma instância de Operações IoT do Azure implantada com configurações seguras. Se você implantou o Operações IoT do Azure com configurações de teste, primeiro precisará habilitar as configurações seguras.

Gerenciar certificados para comunicações internas

Todas as comunicações dentro das Operações IoT do Azure são criptografadas usando TLS. Para ajudá-lo a começar, o Operações IoT do Azure é implantado com uma CA raiz padrão e um emissor para certificados de servidor TLS. Você pode usar a configuração padrão para fins de desenvolvimento e teste. Para uma implantação de produção, recomendamos o uso de seu próprio emissor de CA e uma solução PKI corporativa.

Emissor autoassinado padrão e certificado de CA raiz para certificados de servidor TLS

Para ajudá-lo a começar, o Operações IoT do Azure é implantado com um emissor autoassinado padrão e um certificado de CA raiz para certificados de servidor TLS. Você pode usar esse emissor para desenvolvimento e testes. O Operações IoT do Azure usa o cert-manager para gerenciar certificados TLS e o trust-manager para distribuir pacotes de confiança aos componentes.

  • O certificado da CA é auto-assinado e nenhum cliente fora do Operações IoT do Azure confia nele. O assunto do certificado da autoridade de certificação é CN=Operações IoT do Azure Quickstart Root CA - Not for Production. O Cert-manager roda automaticamente o certificado da CA.

  • O certificado da CA de raiz está armazenado num segredo do Kubernetes chamado azure-iot-operations-aio-ca-certificate no espaço de nomes cert-manager.

  • Um ConfigMap chamado azure-iot-operations-aio-ca-trust-bundle no azure-iot-operations namespace armazena a parte pública do certificado raiz da CA. Você pode recuperar o certificado da autoridade de certificação do ConfigMap e inspecioná-lo com kubectl e openssl. O Trust-manager mantém o ConfigMap atualizado quando o cert-manager roda o certificado da CA.

    kubectl get configmap azure-iot-operations-aio-ca-trust-bundle -n azure-iot-operations -o "jsonpath={.data['ca\.crt']}" | openssl x509 -text -noout
    
    Certificate: 
        Data: 
            Version: 3 (0x2) 
            Serial Number: 
                <SERIAL-NUMBER> 
            Signature Algorithm: sha256WithRSAEncryption 
            Issuer: O=Microsoft, CN=Azure IoT Operations Quickstart Root CA - Not for Production 
            Validity 
                Not Before: Sep 18 20:42:19 2024 GMT 
                Not After : Sep 18 20:42:19 2025 GMT 
            Subject: O=Microsoft, CN=Azure IoT Operations Quickstart Root CA - Not for Production 
            Subject Public Key Info: 
                Public Key Algorithm: rsaEncryption 
                    Public-Key: (2048 bit) 
                    Modulus: <MODULUS> 
                                        Exponent: 65537 (0x10001) 
            X509v3 extensions: 
                X509v3 Key Usage: critical 
                    Certificate Sign, CRL Sign 
                X509v3 Basic Constraints: critical 
                    CA:TRUE 
                X509v3 Subject Key Identifier: 
                    <SUBJECT-KEY-IDENTIFIER> 
        Signature Algorithm: sha256WithRSAEncryption 
    [Signature] 
    
  • Por padrão, já há um emissor configurado no azure-iot-operations namespace chamado azure-iot-operations-aio-certificate-issuer. Ele é usado como o emissor comum para todos os certificados de servidor TLS para operações IoT. O broker MQTT utiliza um emissor criado a partir do mesmo certificado CA, que é assinado pelo emissor auto-assinado para emitir certificados de servidor TLS para o listener TLS padrão na porta 18883. Você pode inspecionar o emissor com o seguinte comando:

    kubectl get clusterissuer azure-iot-operations-aio-certificate-issuer -o yaml
    
    apiVersion: cert-manager.io/v1 
    kind: ClusterIssuer 
    metadata: 
      creationTimestamp: "2024-09-18T20:42:17Z" 
      generation: 1 
      name: azure-iot-operations-aio-certificate-issuer 
      resourceVersion: "36665" 
      uid: 592700a6-95e0-4788-99e4-ea93934bd330 
    spec: 
      ca: 
        secretName: azure-iot-operations-aio-ca-certificate 
    status: 
      conditions: 
      - lastTransitionTime: "2024-09-18T20:42:22Z" 
        message: Signing CA verified 
        observedGeneration: 1 
        reason: KeyPairVerified 
        status: "True" 
        type: Ready 
    

Traga o seu próprio emissor

Para implementações em produção, recomendamos que configure o Operações IoT do Azure com uma PKI empresarial para gerir os certificados, e que traga o seu próprio emissor CA que trabalhe com a sua PKI empresarial, em vez de usar o emissor auto-assinado por defeito para emitir certificados TLS para comunicações internas.

Para configurar as Operações do Azure IoT com seu próprio emissor para comunicações internas, use as seguintes etapas antes de implantar uma instância em seu cluster:

  1. Siga as etapas em Preparar o cluster para configurá-lo.

  2. Instale cert-manager. O Cert-manager gerencia certificados TLS.

  3. Instale gestor de confiança. Ao instalar o gerenciador de confiança, defina o trust namespace como cert-manager. Por exemplo:

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

    O gerenciador de confiança é usado para distribuir um pacote de confiança aos componentes.

  4. Crie o espaço de nomes do Operações IoT do Azure.

    kubectl create namespace azure-iot-operations
    
  5. Implante um emissor que trabalhe com o cert-manager. Para ver uma lista de todos os emissores suportados, consulte cert-manager issuers.

    O emitente pode ser do tipo ClusterIssuer ou Issuer. Se estiver a utilizar Issuer, o recurso do emissor tem de ser criado no espaço de nomes do Operações IoT do Azure.

  6. Configure o pacote de confiança no namespace Operações IoT do Azure.

    1. Para configurar o pacote de confiança, crie um ConfigMap no namespace Operações IoT do Azure. Coloque a parte de chave pública do seu certificado de CA no mapa de configuração com um nome de chave de sua escolha.

    2. Obtenha a parte de chave pública do seu certificado de autoridade de certificação. As etapas para adquirir a chave pública dependem do emissor escolhido.

    3. Crie o ConfigMap. Por exemplo:

      kubectl create configmap -n azure-iot-operations <YOUR_CONFIGMAP_NAME> --from-file=<CA_CERTIFICATE_FILENAME_PEM_OR_DER>
      
  7. Siga os passos em Implementar o Operações IoT do Azure para realizar a implementação, com algumas alterações.

    1. Adicione o parâmetro --user-trust ao preparar o cluster. Por exemplo:

      az iot ops init --subscription <SUBSCRIPTION_ID> --cluster <CLUSTER_NAME>  -g <RESOURCE_GROUP> --user-trust
      
    2. Adicione o --trust-settings parâmetro com as informações necessárias durante a implantação das Operações IoT do Azure. Por exemplo:

      az iot ops create --subscription <SUBSCRIPTION_ID> -g <RESOURCE_GROUP> --cluster <CLUSTER_NAME> --custom-location <CUSTOM_LOCATION> -n <INSTANCE_NAME> --sr-resource-id <SCHEMAREGISTRY_RESOURCE_ID> --trust-settings configMapName=<CONFIGMAP_NAME> configMapKey=<CONFIGMAP_KEY_WITH_PUBLICKEY_VALUE> issuerKind=<CLUSTERISSUER_OR_ISSUER> issuerName=<ISSUER_NAME>
      

    Observação

    O nome do local personalizado tem um comprimento máximo de 63 caracteres.

Gerenciar certificados para comunicações externas

O Operações IoT do Azure utiliza o Azure Key Vault como solução gerida de cofre na cloud e utiliza a extensão Azure Key Vault secret store para Kubernetes para sincronizar os segredos da cloud e armazená-los na extremidade como segredos do Kubernetes.

Importante

Embora o Operações IoT do Azure utilize certificados para proteger comunicações externas, estes certificados são armazenados como segredos no Azure Key Vault. Quando adicionares um certificado ao Azure Key Vault, certifica-te de o incluir como um segredo, não como um recurso de certificação.

Configurar permissões do Azure Key Vault

Para usar a experiência operacional para criar segredos no cofre de chaves, o utilizador necessita de permissões do Oficial de Segredos do Cofre de Chaves ao nível dos recursos no Azure.

Num ambiente de teste ou desenvolvimento, utilize os seguintes passos para atribuir o papel de Key Vault Secrets Officer ao seu utilizador ao nível do grupo de recursos onde as instâncias Operações IoT do Azure e Azure Key Vault são implementadas:

  1. Para encontrar o nome do grupo de recursos, vá à interface web da experiência operacional , vá à página Instâncias e encontre a sua instância Operações IoT do Azure. O nome do grupo de recursos é mostrado no campo do grupo de recursos .

  2. Vai ao portal Azure e depois ao grupo de recursos onde a tua instância Operações IoT do Azure e Azure Key Vault estão implementadas.

    Sugestão

    Use a caixa de pesquisa no topo do portal Azure para encontrar rapidamente o grupo de recursos ao escrever o nome.

  3. Selecione controlo de acesso (IAM) no menu esquerdo. Depois selecciona + Adicionar > Adicionar atribuição de função.

  4. No separador Funções , selecione Oficial de Segredos do Cofre de Chaves da lista de funções e depois selecione Próximo.

  5. No separador de Membros , selecione Utilizador, grupo ou principal de serviço, selecione Selecionar membros, selecione o utilizador a quem quer atribuir a função de Oficial de Segredos do Cofre de Chaves e, de seguida, selecione Próximo.

  6. Selecione Rever + atribuir para concluir a atribuição de função.

Num ambiente de produção, siga as melhores práticas para proteger o Azure Key Vault que utiliza com o Operações IoT do Azure. Para mais informações, consulte Melhores práticas para utilizar o Azure Key Vault.

Adicionar e usar certificados

Os conectores utilizam a experiência de gestão de certificados para configurar a autenticação de aplicações em servidores externos. Por exemplo, o conector para OPC UA utiliza certificados na lista de confiança para autenticar a identidade do servidor OPC UA a que se liga.

Ao implantar as Operações do Azure IoT com configurações seguras, você pode começar a adicionar certificados ao Cofre de Chaves do Azure e sincronizá-los com o cluster do Kubernetes a ser usado na lista de Confiança e nos armazenamentos de lista de Emissores para conexões externas. Cada conector tem a sua própria lista de confiança para armazenar os certificados dos servidores externos em que confia e a que se liga.

Pode gerir certificados para comunicações externas usando a interface web da experiência de operações ou a interface do CLI do Azure:

Para gerenciar certificados para comunicações externas, siga estas etapas:

  1. Vá para a experiência do Operações IoT do Azure e escolha seu site e a instância do Operações IoT do Azure.

  2. No painel de navegação esquerdo, selecione Dispositivos.

  3. Selecione Gerir certificados e segredos.

    Captura de ecrã que mostra a opção Gerir certificados e segredos no painel de navegação esquerdo.

  4. Na página de Certificados e Segredos, selecione Adicionar novo certificado.

    Captura de ecrã que mostra o botão Adicionar novo certificado na página de dispositivos.

  5. Você pode adicionar um novo certificado de duas maneiras:

    • Certificado de Upload: Carrega um certificado para adicionar como segredo ao Azure Key Vault e sincroniza automaticamente com o cluster usando a extensão secret store.

      • Exiba os detalhes do certificado depois de carregado, para garantir que você tenha o certificado correto antes de adicionar ao Cofre de Chaves do Azure e sincronizar com o cluster.
      • Use um nome intuitivo para que você possa reconhecer qual segredo representa seu segredo no futuro.
      • Selecione o armazenamento de certificados apropriado para o conector que usa o certificado. Por exemplo, a lista de confiança OPC UA.

      Captura de ecrã que mostra a opção Carregar certificado ao adicionar um novo certificado à página de dispositivos.

      Observação

      Simplesmente carregar o certificado não adiciona o segredo ao Azure Key Vault nem sincroniza com o cluster; tens de selecionar Aplicar para que as alterações sejam aplicadas.

    • Adicionar do Cofre de Chaves do Azure: adicionar um segredo existente do Cofre de Chaves do Azure para ser sincronizado no cluster.

      Captura de tela que mostra a opção Adicionar do Cofre da Chave do Azure ao adicionar um novo certificado à página de dispositivos.

      Observação

      Certifique-se de selecionar o segredo que contém o certificado que você deseja sincronizar com o cluster. Selecionar um segredo que não seja o certificado correto faz com que a ligação falhe.

  6. Usando o modo de exibição de lista, você pode gerenciar os certificados sincronizados. Você pode exibir todos os certificados sincronizados e com qual armazenamento de certificados ele está sincronizado:

    Captura de ecrã que mostra a lista de certificados na página de dispositivos e como filtrar por Lista de Confiança e Lista de Emissores.

Você também pode excluir certificados sincronizados. Quando você exclui um certificado sincronizado, ele exclui apenas o certificado sincronizado do cluster do Kubernetes e não exclui a referência secreta contida do Cofre de Chaves do Azure. Você deve excluir o segredo do certificado manualmente do cofre de chaves.

Adicionar certificados como segredos ao Azure Key Vault

Se usar a experiência operacional para selecionar certificados existentes que foram previamente adicionados ao Azure Key Vault, certifique-se de que os segredos estão num formato e codificação suportados pelo Operações IoT do Azure.

Para adicionar um segredo de certificado PEM ao Azure Key Vault, pode usar um comando como o seguinte exemplo:

az keyvault secret set \
  --vault-name <your-key-vault-name> \
  --name my-cert-pem \
  --file ./my-cert.pem \
  --encoding hex \
  --content-type 'application/x-pem-file'

Para adicionar um segredo binário de certificado DER ao Azure Key Vault, pode usar um comando como o seguinte exemplo:

az keyvault secret set \
  --vault-name <your-key-vault-name> \
  --name my-cert-der \
  --file ./my-cert.der \
  --encoding hex \
  --content-type 'application/pkix-cert'