Compartilhar via


Gerenciamento de certificados para a comunicação interna das Operações do Azure IoT

Toda a comunicação dentro das Operações do Azure IoT é criptografada via TLS. Para ajudar você a começar, o recurso Operações do Azure IoT é implantado com uma autoridade de certificação 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 usar seu próprio emissor de autoridade de certificação e uma solução PKI corporativa.

Certificado de autoridade de certificação raiz e emissor autoassinado padrão para certificados de servidor TLS

Para ajudar você a começar, as Operações do Azure IoT são implantadas com um emissor autoassinado padrão e um certificado de Autoridade de Certificação raiz para certificados de servidor TLS. Você pode usar esse emissor para desenvolvimento e testes. As Operações do Azure IoT usam o cert-manager para gerenciar certificados TLS e o trust-manager para distribuir pacotes de confiança para componentes.

  • O certificado de AC é autoassinado e não é considerado confiável por nenhum cliente fora do recurso Operações do Azure IoT. A entidade do certificado de autoridade de certificação é CN=Azure IoT Operations Quickstart Root CA - Not for Production. O certificado de autoridade de certificação é girado automaticamente pelo gerenciador de certificados.

  • O certificado de autoridade de certificação raiz é armazenado em um segredo do Kubernetes chamado azure-iot-operations-aio-ca-certificate no namespace cert-manager.

  • A porção pública do certificado de autoridade de certificação raiz é armazenada em um ConfigMap chamado azure-iot-operations-aio-ca-trust-bundle no namespace azure-iot-operations. Você pode recuperar o certificado de AC a partir do ConfigMap e inspecioná-lo com o kubectl e o openssl. O ConfigMap é mantido atualizado pelo gerenciador de confiança quando o certificado de autoridade de certificação é girado pelo gerenciador de certificados.

    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á existe um emissor de autoridade de certificação configurado no azure-iot-operations namespace chamado azure-iot-operations-aio-certificate-issuer. É usado como o emissor de AC comum para todos os certificados de servidor TLS para as Operações de IoT. O agente do MQTT usa um emissor criado com base no mesmo certificado de AC assinado pelo emissor autoassinado para emitir certificados de servidor TLS para o ouvinte 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 seu próprio emissor

Para implantações de produção, recomendamos que você configure o Azure IoT Operations com uma PKI corporativa para gerenciar certificados e que traga seu próprio emissor que funcione com sua PKI corporativa em vez de usar o emissor autoassinado padrão para emitir certificados TLS para comunicação interna.

Para configurar o Azure IoT Operations com seu próprio emissor, use as seguintes etapas antes de implantar uma instância no seu cluster:

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

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

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

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

    O Trust-manager é usado para distribuir um pacote de confiança aos componentes.

  4. Crie o namespace do Azure IoT Operations.

    kubectl create namespace azure-iot-operations
    
  5. Implante um emissor que funcione com o cert-manager. Para obter uma lista de todos os emissores suportados, veja emissores cert-manager.

    O emissor pode ser do tipo ClusterIssuer ou Issuer. Se usar Issuer, o recurso do emissor deverá ser criado no namespace do Azure IoT Operations.

  6. Configure o pacote de confiança no namespace do Azure IoT Operations.

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

    2. Obtenha a parte da chave pública do seu certificado CA. 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 as etapas em Implantar operações do Azure IoT para implantar, 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 parâmetro --trust-settings com as informações necessárias ao implantar o Azure IoT Operations. 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>