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 namespacecert-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 namespaceazure-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
chamadoazure-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:
Siga as etapas em Preparar seu cluster para configurá-lo.
Instalar cert-manager. O Cert-manager gerencia certificados TLS.
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.
Crie o namespace do Azure IoT Operations.
kubectl create namespace azure-iot-operations
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
ouIssuer
. Se usarIssuer
, o recurso do emissor deverá ser criado no namespace do Azure IoT Operations.Configure o pacote de confiança no namespace do Azure IoT Operations.
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.
Obtenha a parte da chave pública do seu certificado CA. 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 do Azure IoT para implantar, com algumas alterações.
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
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>