Gerenciamento de certificados para comunicação interna das Operações do Azure IoT
Toda a comunicação dentro das Operações IoT do Azure é criptografada usando TLS. Para ajudá-lo a começar, o Azure IoT Operations é 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 Azure IoT Operations é 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 Azure IoT Operations usa o cert-manager para gerenciar certificados TLS e o trust-manager para distribuir pacotes de confiança aos componentes.
O certificado da autoridade de certificação é autoassinado e não é confiável por nenhum cliente fora das Operações do Azure IoT. O assunto do certificado da autoridade de certificação é
CN=Azure IoT Operations Quickstart Root CA - Not for Production
. O certificado da autoridade de certificação é alternado automaticamente pelo cert-manager.O certificado de autoridade de certificação raiz é armazenado em um segredo do Kubernetes chamado
azure-iot-operations-aio-ca-certificate
sob ocert-manager
namespace.A parte pública do certificado de autoridade de certificação raiz é armazenada em um ConfigMap chamado
azure-iot-operations-aio-ca-trust-bundle
sob oazure-iot-operations
namespace. Você pode recuperar o certificado da autoridade de certificação do ConfigMap e inspecioná-lo com kubectl e openssl. O ConfigMap é mantido atualizado pelo trust-manager quando o certificado da autoridade de certificação é girado pelo cert-manager.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
chamadoazure-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 usa um emissor criado a partir do mesmo certificado de CA que é 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 o seu próprio emissor
Para implantações de produção, recomendamos que você configure as Operações do Azure IoT 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 em seu cluster:
Siga as etapas em Preparar o cluster para configurá-lo.
Instale o cert-manager. O Cert-manager gerencia certificados TLS.
Instale o gerenciador 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.
Crie o namespace Azure IoT Operations.
kubectl create namespace azure-iot-operations
Implante um emissor que trabalhe com o cert-manager. Para obter uma lista de todos os emissores suportados, consulte emissores cert-manager.
O emitente pode ser do tipo
ClusterIssuer
ouIssuer
. Se estiver usandoIssuer
o , o recurso do emissor deverá ser criado no namespace Azure IoT Operations.Configure o pacote de confiança no namespace Azure IoT Operations.
Para configurar o pacote de confiança, crie um ConfigMap no namespace Azure IoT Operations. 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.
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.
Crie o ConfigMap. Por exemplo:
kubectl create configmap -n azure-iot-operations <YOUR_CONFIGMAP_NAME> --from-file=<CA_CERTIFICATE_FILENAME_PEM_OR_DER>
Siga as etapas em Implantar Operações IoT do Azure para implantar, com algumas alterações.
Adicione o parâmetro durante a preparação do
--user-trust
cluster. Por exemplo:az iot ops init --subscription <SUBSCRIPTION_ID> --cluster <CLUSTER_NAME> -g <RESOURCE_GROUP> --user-trust
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>