Поделиться через


Управление сертификатами для внутренних операций Интернета вещей 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 с собственным издателем, выполните следующие действия перед развертыванием экземпляра в кластере:

  1. Выполните действия, описанные в разделе "Подготовка кластера к настройке кластера".

  2. Установите cert-manager. Cert-manager управляет сертификатами TLS.

  3. Установите диспетчер доверия. При установке диспетчера доверия задайте trust namespace значение cert-manager. Например:

    helm upgrade trust-manager jetstack/trust-manager --install --namespace cert-manager --set app.trust.namespace=cert-manager --wait
    

    Диспетчер доверия используется для распространения пакета доверия к компонентам.

  4. Создайте пространство имен операций Интернета вещей Azure.

    kubectl create namespace azure-iot-operations
    
  5. Разверните издателя, который работает с cert-manager. Список всех поддерживаемых издателей см. в разделе издателей cert-manager.

    Издатель может быть типом ClusterIssuer или Issuer. При использовании Issuerресурс издателя должен быть создан в пространстве имен Операций Интернета вещей Azure.

  6. Настройте пакет доверия в пространстве имен Операций Интернета вещей Azure.

    1. Чтобы настроить пакет доверия, создайте ConfigMap в пространстве имен Операций Интернета вещей Azure. Поместите часть сертификата ЦС в карту конфигурации с выбранным именем ключа.

    2. Получите часть сертификата ЦС с открытым ключом. Действия по получению открытого ключа зависят от выбранного издателя.

    3. Создайте ConfigMap. Например:

      kubectl create configmap -n azure-iot-operations <YOUR_CONFIGMAP_NAME> --from-file=<CA_CERTIFICATE_FILENAME_PEM_OR_DER>
      
  7. Выполните действия, описанные в статье "Развертывание операций Интернета вещей Azure для развертывания" с несколькими изменениями.

    1. Добавьте параметр при подготовке --user-trust кластера. Например:

      az iot ops init --subscription <SUBSCRIPTION_ID> --cluster <CLUSTER_NAME>  -g <RESOURCE_GROUP> --user-trust
      
    2. Добавьте параметр с необходимыми --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>