Управление сертификатами для внутренних операций Интернета вещей Azure
Все обмен данными в операциях Интернета вещей Azure шифруются с помощью TLS. Чтобы приступить к работе, операции Интернета вещей Azure развертываются с корневым ЦС по умолчанию и издателем для сертификатов сервера TLS. Вы можете использовать настройку по умолчанию для целей разработки и тестирования. Для рабочего развертывания рекомендуется использовать собственный издатель ЦС и корпоративное решение PKI.
Самозаверяющий издатель и корневой сертификат ЦС по умолчанию для сертификатов сервера TLS
Чтобы приступить к работе, операции Интернета вещей Azure развертываются с помощью самозаверяющего издателя по умолчанию и корневого сертификата ЦС для сертификатов сервера TLS. Этот издатель можно использовать для разработки и тестирования. Операции Интернета вещей Azure используют cert-manager для управления сертификатами TLS и диспетчером доверия для распространения пакетов доверия компонентам.
Сертификат ЦС самозаверяется и не доверяется каким-либо клиентам за пределами операций Интернета вещей Azure. Тема сертификата ЦС .
CN=Azure IoT Operations Quickstart Root CA - Not for Production
Сертификат ЦС автоматически поворачивается диспетчером сертификатов.Сертификат корневого ЦС хранится в секрете Kubernetes, вызываемом
azure-iot-operations-aio-ca-certificate
cert-manager
в пространстве имен.Общедоступная часть корневого сертификата ЦС хранится в ConfigMap, вызываемой
azure-iot-operations-aio-ca-trust-bundle
под пространствомazure-iot-operations
имен. Вы можете получить сертификат ЦС из ConfigMap и проверить его с помощью kubectl и opensl. ConfigMap обновляется диспетчером доверия при смене сертификата ЦС диспетчером сертификатов.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]
По умолчанию в вызываемом
azure-iot-operations namespace
вызовеazure-iot-operations-aio-certificate-issuer
уже настроен издатель. Он используется в качестве общего издателя для всех сертификатов сервера TLS для операций Интернета вещей. Брокер MQTT использует издателя, созданный из того же сертификата ЦС, который подписан самозаверяющей издателем для выдачи сертификатов сервера TLS для прослушивателя TLS по умолчанию через порт 18883. Вы можете проверить издателя с помощью следующей команды: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
Создание собственного издателя
Для рабочих развертываний рекомендуется настроить операции Интернета вещей Azure с корпоративным PKI для управления сертификатами и предоставить собственный издатель, который работает с корпоративным PKI вместо использования самозаверяющего издателя по умолчанию для выдачи сертификатов TLS для внутреннего взаимодействия.
Чтобы настроить операции Интернета вещей Azure с собственным издателем, выполните следующие действия перед развертыванием экземпляра в кластере:
Выполните действия, описанные в разделе "Подготовка кластера к настройке кластера".
Установите cert-manager. Cert-manager управляет сертификатами TLS.
Установите диспетчер доверия. При установке диспетчера доверия задайте
trust namespace
значение cert-manager. Например:helm upgrade trust-manager jetstack/trust-manager --install --namespace cert-manager --set app.trust.namespace=cert-manager --wait
Диспетчер доверия используется для распространения пакета доверия к компонентам.
Создайте пространство имен операций Интернета вещей Azure.
kubectl create namespace azure-iot-operations
Разверните издателя, который работает с cert-manager. Список всех поддерживаемых издателей см. в разделе издателей cert-manager.
Издатель может быть типом
ClusterIssuer
илиIssuer
. При использованииIssuer
ресурс издателя должен быть создан в пространстве имен Операций Интернета вещей Azure.Настройте пакет доверия в пространстве имен Операций Интернета вещей Azure.
Чтобы настроить пакет доверия, создайте ConfigMap в пространстве имен Операций Интернета вещей Azure. Поместите часть сертификата ЦС в карту конфигурации с выбранным именем ключа.
Получите часть сертификата ЦС с открытым ключом. Действия по получению открытого ключа зависят от выбранного издателя.
Создайте ConfigMap. Например:
kubectl create configmap -n azure-iot-operations <YOUR_CONFIGMAP_NAME> --from-file=<CA_CERTIFICATE_FILENAME_PEM_OR_DER>
Выполните действия, описанные в статье "Развертывание операций Интернета вещей Azure для развертывания" с несколькими изменениями.
Добавьте параметр при подготовке
--user-trust
кластера. Например:az iot ops init --subscription <SUBSCRIPTION_ID> --cluster <CLUSTER_NAME> -g <RESOURCE_GROUP> --user-trust
Добавьте параметр с необходимыми
--trust-settings
сведениями при развертывании операций Интернета вещей Azure. Например:
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>