Compartir vía


Administración de certificados para la comunicación interna de Operaciones de IoT de Azure

Toda la comunicación dentro de Operaciones de IoT de Azure se cifra mediante TLS. Para ayudarle a empezar, las operaciones de Azure IoT se implementan con una entidad de certificación raíz predeterminada y un emisor para los certificados de servidor TLS. Puede usar la configuración predeterminada para fines de desarrollo y pruebas. Para una implementación de producción, se recomienda usar su propio emisor de entidad de certificación y una solución PKI empresarial.

Emisor autofirmado predeterminado y certificado de entidad de certificación raíz para certificados de servidor TLS

Para ayudarle a empezar, Operaciones de IoT de Azure se implementa con un emisor autofirmado predeterminado y un certificado CA raíz para los certificados de servidor TLS. Puede usar este emisor para desarrollo y pruebas. Operaciones de IoT de Azure usa cert-manager para administrar certificados TLS y trust-manager para distribuir conjuntos de confianza a componentes.

  • El certificado CA está autofirmado y no es de confianza para ningún cliente ajeno a las Operaciones de IoT de Azure. El asunto del certificado de entidad de certificación es CN=Azure IoT Operations Quickstart Root CA - Not for Production. Cert-Manager rota automáticamente el certificado de entidad de certificación.

  • El certificado de entidad de certificación raíz se almacena en un secreto de Kubernetes denominado azure-iot-operations-aio-ca-certificate en el espacio de nombres cert-manager.

  • La parte pública del certificado de entidad de certificación raíz se almacena en un objeto ConfigMap denominado azure-iot-operations-aio-ca-trust-bundle en el espacio de nombres azure-iot-operations. Puede recuperar el certificado CA del ConfigMap e inspeccionarlo con kubectl y openssl. El administrador de confianza mantiene el valor de ConfigMap cuando cert-manager rota el certificado de la entidad de certificación.

    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] 
    
  • De forma predeterminada, ya hay un emisor configurado en el azure-iot-operations namespace denominado azure-iot-operations-aio-certificate-issuer. Se usa como emisor común para todos los certificados de servidor TLS para operaciones de IoT. El corredor MQTT usa un emisor creado a partir del mismo certificado CA que está firmado por el emisor autofirmado para emitir certificados de servidor TLS para el agente de escucha TLS predeterminado en el puerto 18883. Puede inspeccionar el emisor con el siguiente 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 
    

Traiga su propio emisor

Para implementaciones de producción, recomendamos que configure las Operaciones de IoT de Azure con una PKI empresarial para administrar certificados y que traiga su propio emisor que funcione con su PKI empresarial en lugar de utilizar el emisor autofirmado predeterminado para emitir certificados TLS para la comunicación interna.

Para configurar Operaciones de IoT de Azure con su propio emisor, siga estos pasos antes de implementar una instancia en el clúster:

  1. Siga los pasos descritos en Preparación del clúster para configurar el clúster.

  2. Instalar cert-manager. Cert-manager administra los certificados TLS.

  3. Instale trust-manager. Al instalar el administrador de confianza, establezca trust namespace en cert-manager. Por ejemplo:

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

    Trust-manager se usa para distribuir un paquete de confianza a los componentes.

  4. Cree el espacio de nombres de Operaciones de IoT de Azure.

    kubectl create namespace azure-iot-operations
    
  5. Implemente un emisor que funcione con cert-manager. Para obtener una lista de todos los emisores admitidos, consulte emisores de cert-manager.

    El emisor puede ser de tipo ClusterIssuer o Issuer. Si usa Issuer, el recurso del emisor debe crearse en el espacio de nombres de Operaciones de IoT de Azure.

  6. Configure el conjunto de confianza en el espacio de nombres de Operaciones de IoT de Azure.

    1. Para configurar el paquete de confianza, cree un ConfigMap en el espacio de nombres Operaciones de IoT de Azure. Coloque la parte de clave pública de su certificado de firma en el mapa de configuración con un nombre de clave de su elección.

    2. Obtenga la parte de clave pública del certificado de entidad de certificación. Los pasos para adquirir la clave pública dependen del emisor que elija.

    3. Cree configMap. Por ejemplo:

      kubectl create configmap -n azure-iot-operations <YOUR_CONFIGMAP_NAME> --from-file=<CA_CERTIFICATE_FILENAME_PEM_OR_DER>
      
  7. Siga los pasos descritos en Implementación de Operaciones de IoT de Azure para implementar, con algunos cambios.

    1. Agregue el parámetro --user-trust al preparar el clúster. Por ejemplo:

      az iot ops init --subscription <SUBSCRIPTION_ID> --cluster <CLUSTER_NAME>  -g <RESOURCE_GROUP> --user-trust
      
    2. Agregue el parámetro --trust-settings con la información necesaria durante la implementación de Operaciones de IoT de Azure. Por ejemplo:

    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>