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 nombrescert-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 nombresazure-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
denominadoazure-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:
Siga los pasos descritos en Preparación del clúster para configurar el clúster.
Instalar cert-manager. Cert-manager administra los certificados TLS.
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.
Cree el espacio de nombres de Operaciones de IoT de Azure.
kubectl create namespace azure-iot-operations
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
oIssuer
. Si usaIssuer
, el recurso del emisor debe crearse en el espacio de nombres de Operaciones de IoT de Azure.Configure el conjunto de confianza en el espacio de nombres de Operaciones de IoT de Azure.
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.
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.
Cree configMap. Por ejemplo:
kubectl create configmap -n azure-iot-operations <YOUR_CONFIGMAP_NAME> --from-file=<CA_CERTIFICATE_FILENAME_PEM_OR_DER>
Siga los pasos descritos en Implementación de Operaciones de IoT de Azure para implementar, con algunos cambios.
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
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>