Compartir a través de


Administración de certificados para la implementación de operaciones de Azure IoT

Azure IoT Operations usa TLS para cifrar la comunicación entre todos los componentes. En este artículo se describe cómo administrar certificados para comunicaciones internas y externas y cómo traer su propio emisor de entidad de certificación (CA) para las comunicaciones internas en una implementación de producción.

Prerrequisitos

  • Para administrar certificados para comunicaciones externas, necesita una instancia de Azure IoT Operations implementada con la configuración segura. Si ha implementado Operaciones de Azure IoT con la configuración de prueba, primero debe habilitar la configuración segura.

Administración de certificados para comunicaciones internas

Todas las comunicaciones de Azure IoT Operations se cifran 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 CA 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 de entidad de certificación 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 de entidad de certificación del ConfigMap e inspeccionarlo con kubectl y openssl. El administrador de confianza mantiene el valor de ConfigMap actualizado 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 de entidad de certificación 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

En el caso de las implementaciones de producción, se recomienda configurar Azure IoT Operations con una PKI empresarial para administrar certificados y que traiga su propio emisor de CA que funcione con la PKI empresarial, en lugar de usar el emisor autofirmado predeterminado para emitir certificados TLS para las comunicaciones internas.

Para configurar Azure IoT Operations con su propio emisor para las comunicaciones internas, 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 el 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>
    

Administración de certificados para comunicaciones externas

La experiencia de administración de certificados para las comunicaciones externas usa Azure Key Vault como solución de almacén administrado en la nube. Los certificados se agregan al almacén de claves como secretos y se sincronizan con el perímetro como secretos de Kubernetes a través de la extensión de almacén de secretos de Azure Key Vault.

Por ejemplo, el conector para OPC UA usa la experiencia de administración de certificados para configurar la autenticación de aplicaciones cliente de OPC UA en un servidor OPC UA externo. Azure IoT Operations administra dos almacenes de certificados distintos para el conector para OPC UA: uno para la lista Confianza y otro para la lista emisor. Para obtener más información sobre cómo el conector de OPC UA usa certificados para establecer una confianza mutua con un servidor OPC UA, consulte Infraestructura de certificados de OPC UA para el conector para OPC UA.

Al implementar operaciones de Azure IoT con una configuración segura, puede empezar a agregar certificados a Azure Key Vault y sincronizarlos con el clúster de Kubernetes que se usará en los almacenes lista de confianza y lista de emisores para las conexiones de OPC UA:

Captura de pantalla que muestra las opciones de Cargar certificado y Agregar desde Azure Key Vault cuando se añade un nuevo certificado a la página de puntos finales de activos.

  • Cargar certificado: carga un certificado que, a continuación, se agrega como secreto a Azure Key Vault y se sincroniza automáticamente con el clúster mediante la extensión Secret Store.

    Sugerencia

    • Vea los detalles del certificado una vez cargados para asegurarse de que tiene el certificado correcto antes de agregarlo a Azure Key Vault y sincronizarlo con el clúster.
    • Utilice un nombre intuitivo para que pueda reconocer cuál de los secretos representa su secreto en el futuro.

    Nota:

    Simplemente cargar el certificado no agregará el secreto a Azure Key Vault ni lo sincronizará con el clúster. Debe seleccionar Aplicar para que se apliquen los cambios.

  • Agregar desde Azure Key Vault: agregue un secreto existente desde Azure Key Vault para que se sincronice con el clúster.

    Nota:

    Asegúrese de seleccionar el secreto que contiene el certificado que desea sincronizar con el clúster. Al seleccionar un secreto que no es el certificado correcto, se producirá un error en la conexión.

Con la vista de lista puede administrar los certificados sincronizados. Puede ver todos los certificados sincronizados y el almacén de certificados al que está sincronizado:

Captura de pantalla que muestra la lista de certificados en la página de puntos de conexión de activos y cómo filtrar por Lista de Confianza y Lista de Emisores.

También puede eliminar certificados sincronizados. Al eliminar un certificado sincronizado, solo elimina el certificado sincronizado del clúster de Kubernetes y no elimina la referencia secreta independiente de Azure Key Vault. Debe eliminar manualmente el secreto de certificado del almacén de claves.