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


Настройка безопасной сетевой конечной точки с помощью TLS/SSL

В этой статье показано, как защитить конечную точку Kubernetes online, созданную с помощью Машинное обучение Azure.

HttpS используется для ограничения доступа к сетевым конечным точкам и защиты данных, которые клиенты передают. HTTPS шифрует обмен данными между клиентом и конечной точкой в Интернете с помощью протокола TLS. ПРОТОКОЛ TLS иногда по-прежнему называется протоколом SSL, который был предшественником TLS.

Совет

  • В частности, конечные точки Kubernetes в Интернете поддерживают TLS версии 1.2 для Служба Azure Kubernetes (AKS) и Kubernetes с поддержкой Azure Arc.
  • Tls версии 1.3 для Машинное обучение Azure вывод Kubernetes не поддерживается.

Протоколы TLS и SSL используют цифровые сертификаты, которые помогают в шифровании и проверке личности. Дополнительные сведения о работе цифровых сертификатов см. в разделе Википедии public_key_infrastructure.

Предупреждение

Если вы не используете HTTPS для ваших конечных точек в Интернете, данные, отправленные в службу и из нее, могут быть видимы для других пользователей в Интернете.

HTTPS также позволяет клиенту проверять подлинность сервера, к которому он подключается. Эта функция защищает клиентов от атак типа "злоумышленник в середине".

Ниже в общих чертах описан процесс защиты сетевой конечной точки.

  1. Получите доменное имя.

  2. Получите цифровой сертификат.

  3. Настройте TLS или SSL в расширении Машинного обучения Azure.

  4. Обновите DNS с помощью полного доменного имени (FQDN), чтобы указать на конечную точку в сети.

Внимание

Чтобы получить доменное имя или SSL-сертификат, необходимо приобрести собственный сертификат, а затем настроить его в расширении Машинное обучение Azure. Дополнительные сведения см. в следующих разделах этой статьи.

Получение доменного имени

Если у вас еще нет доменного имени, то его можно приобрести у регистратора доменных имен. Процесс и цена отличаются в зависимости от регистратора. Регистратор предоставляет средства для управления доменным именем. Эти средства позволяют сопоставить полное доменное имя (например www.contoso.com) с IP-адресом, на котором размещена конечная точка в Сети.

Дополнительные сведения о том, как получить IP-адрес веб-конечных точек, см. в разделе "Обновление DNS с полным доменным именем" этой статьи.

Получение сертификата TLS/SSL

Существует множество способов получения TLS/SSL-сертификата (цифрового сертификата). Наиболее распространенным является приобретение одного из центров сертификации. Независимо от того, где вы получаете сертификат, вам нужны следующие файлы:

  • Сертификат, содержащий полную цепочку сертификатов и закодированный PEM
  • Ключ, закодированный PEM

Примечание.

SSL-ключ в PEM-файле с защитой парольной фразы не поддерживается.

При запросе сертификата необходимо указать полное доменное имя адреса, который планируется использовать для сетевой конечной точки (например, www.contoso.com). Адрес, запечатанный в сертификат, и адрес, используемый клиентами, сравнивается с удостоверением сетевой конечной точки. Если эти адреса не совпадают, клиент получает сообщение об ошибке.

Дополнительные сведения о настройке полос ip-адресов с полным доменным именем см. в разделе "Обновление DNS" с помощью полного доменного имени этой статьи.

Совет

Если центр сертификации не может предоставить сертификат и ключ в виде файлов в кодировке PEM, можно использовать средство, например OpenSSL , чтобы изменить формат.

Предупреждение

Используйте самозаверяющие сертификаты только для разработки. Не используйте их в рабочих средах. Самозаверяющие сертификаты могут вызвать проблемы в клиентских приложениях. Дополнительные сведения см. в документации для сетевых библиотек, используемых в клиентском приложении.

Настройка TLS или SSL в расширении Машинного обучения Azure

Для сетевой конечной точки Kubernetes, которая использует протокол HTTPS вывода для безопасных подключений, можно включить завершение TLS с параметрами конфигурации развертывания при развертывании расширения Машинное обучение Azure в кластере Kubernetes.

Во время развертывания для расширения allowInsecureConnections Машинное обучение Azure параметр конфигурации по False умолчанию. Чтобы обеспечить успешное развертывание расширения, необходимо указать sslSecret параметр конфигурации или сочетание sslKeyPemFile параметров, sslCertPemFile защищенных конфигурацией. В противном случае можно настроить allowInsecureConnections=True поддержку HTTP и отключить завершение TLS.

Примечание.

Чтобы поддерживать конечную точку HTTPS в Интернете, allowInsecureConnections необходимо задать значение False.

Чтобы включить конечную точку HTTPS для вывода в режиме реального времени, необходимо указать сертификат TLS/SSL в кодировке PEM и ключ. Существует два способа указать сертификат и ключ во время развертывания для расширения Машинное обучение Azure:

  • sslSecret Укажите параметр конфигурации.
  • Укажите сочетание параметров, slKeyPemFile защищенных sslCertPemFile конфигурацией.

Настройка sslSecret

Мы рекомендуем сохранить сертификат и ключ в секрете Kubernetes в пространстве имен azureml.

Чтобы настроить sslSecret, необходимо сохранить секрет Kubernetes в кластере Kubernetes в azureml пространстве имен, чтобы сохранить сертификат cert.pem (СЕРТИФИКАТ TLS/SSL в кодировке PEM ) и key.pem (TLS/SSL-ключ с кодировкой PEM ).

Следующий код представляет собой пример определения YAML секрета TLS/SSL:

apiVersion: v1
data:
  cert.pem: <PEM-encoded SSL certificate> 
  key.pem: <PEM-encoded SSL key>
kind: Secret
metadata:
  name: <secret name>
  namespace: azureml
type: Opaque

После сохранения секрета в кластере можно использовать следующую команду Azure CLI, чтобы указать sslSecret имя этого секрета Kubernetes. (Эта команда будет работать только в том случае, если вы используете AKS.)

   az k8s-extension create --name <extension-name> --extension-type Microsoft.AzureML.Kubernetes --config inferenceRouterServiceType=LoadBalancer sslSecret=<Kubernetes secret name> sslCname=<ssl cname> --cluster-type managedClusters --cluster-name <your-AKS-cluster-name> --resource-group <your-RG-name> --scope cluster

Настройка sslCertPemFile и sslKeyPemFile

Можно указать sslCertPemFile параметр конфигурации, который должен быть путем к файлу SSL-сертификата в кодировке PEM, а sslKeyPemFile параметр конфигурации — путь к файлу ключа TLS/SSL в кодировке PEM.

В следующем примере показано, как использовать Azure CLI для указания PEM-файлов в расширение Машинное обучение Azure, использующее приобретенный сертификат TLS/SSL. В примере предполагается, что вы используете AKS.

   az k8s-extension create --name <extension-name> --extension-type Microsoft.AzureML.Kubernetes --config enableInference=True inferenceRouterServiceType=LoadBalancer sslCname=<ssl cname> --config-protected sslCertPemFile=<file-path-to-cert-PEM> sslKeyPemFile=<file-path-to-cert-KEY> --cluster-type managedClusters --cluster-name <your-AKS-cluster-name> --resource-group <your-RG-name> --scope cluster

Примечание.

  • PEM-файл, защищенный парольной фразой, не поддерживается.
  • Оба sslCertPemFIle параметра и sslKeyPemFIle использование параметров, защищенных конфигурацией. Они не настраивают sslSecret и sslCertPemFile/sslKeyPemFile одновременно.

Обновление DNS с помощью полного доменного имени

Для развертывания модели в подключенной конечной точке Kubernetes с настраиваемым сертификатом вам нужно обновить запись DNS, чтобы она указывала на IP-адрес подключенной конечной точки. Служба маршрутизатораazureml-fe вывода Машинное обучение Azure предоставляет этот IP-адрес. Дополнительные сведения см. в azureml-feразделе "Управляемые Машинное обучение Azure маршрутизатор вывода".

Чтобы обновить запись DNS для имени личного домена, выполните следующие действия.

  1. Получите IP-адрес конечной точки в сети из URI оценки, который обычно находится в формате http://104.214.29.152:80/api/v1/service/<service-name>/score. В этом примере это IP-адрес 104.214.29.152.

    После настройки имени личного домена он заменяет IP-адрес в URI оценки. Для кластеров Kubernetes, которые используются LoadBalancer в качестве службы маршрутизатора вывода, azureml-fe предоставляются внешним образом через подсистему балансировки нагрузки поставщика облачных служб и завершение TLS/SSL. IP-адрес веб-конечной точки Kubernetes — это внешний IP-адрес azureml-fe службы, развернутой в кластере.

    При использовании AKS можно получить IP-адрес из портал Azure. Перейдите на страницу ресурсов AKS, перейдите в службу и входящий трафик, а затем найдите службу azureml-fe в пространстве имен azuerml . Затем можно найти IP-адрес в столбце внешнего IP-адреса .

    Снимок экрана: добавление нового расширения в кластер Kubernetes с поддержкой Azure Arc из портал Azure.

    Кроме того, можно запустить команду kubectl describe svc azureml-fe -n azureml Kubernetes в кластере, чтобы получить IP-адрес из LoadBalancer Ingress параметра в выходных данных.

    Примечание.

    Для кластеров Kubernetes, использующих либо nodePortclusterIP в качестве службы маршрутизатора вывода, необходимо настроить собственное решение балансировки нагрузки и завершение azureml-feTLS/SSL. Кроме того, необходимо получить IP-адрес azureml-fe службы в области кластера.

  2. Используйте инструменты, предоставленные вашим регистратором доменных имен, чтобы обновить запись DNS для доменного имени. Запись сопоставляет полное доменное имя (например, www.contoso.com) с IP-адресом. Запись должна указывать на IP-адрес веб-конечной точки.

    Совет

    Корпорация Майкрософт не несет ответственности за обновление DNS для пользовательского DNS-имени или сертификата. Вы должны сами обновить его у регистратора доменных имен.

  3. После обновления записи DNS можно проверить разрешение DNS с помощью nslookup custom-domain-name команды. Если запись DNS правильно обновлена, имя личного домена будет указывать на IP-адрес веб-конечной точки.

    Может быть задержка в минутах или часах, прежде чем клиенты смогут разрешить доменное имя, в зависимости от регистратора и времени жизни (TTL), настроенного для доменного имени.

Дополнительные сведения о разрешении DNS с помощью Машинного обучения Azure см. в статье Использование рабочей области с пользовательским DNS-сервером.

Обновление TLS/SSL-сертификата

Срок действия TLS/SSL-сертификатов истекает, и их необходимо обновлять. Как правило, это происходит каждый год. Используйте сведения, описанные в следующих шагах, чтобы обновить и обновить сертификат для моделей, развернутых в Kubernetes (AKS и Kubernetes с поддержкой Azure Arc):

  1. Используйте документацию из центра сертификации для продления сертификата. Этот процесс создает новые файлы сертификатов.

  2. Обновите расширение Машинное обучение Azure и укажите новые файлы сертификатов с помощью az k8s-extension update команды.

    Если вы использовали секрет Kubernetes для настройки TLS/SSL, необходимо сначала обновить секрет Kubernetes с помощью новой конфигурации cert.pem и key.pem в кластере Kubernetes. Затем выполните команду обновления расширения, чтобы обновить сертификат:

       az k8s-extension update --name <extension-name> --extension-type Microsoft.AzureML.Kubernetes --config inferenceRouterServiceType=LoadBalancer sslSecret=<Kubernetes secret name> sslCname=<ssl cname> --cluster-type managedClusters --cluster-name <your-AKS-cluster-name> --resource-group <your-RG-name> --scope cluster
    

    Если вы непосредственно настроили PEM-файлы в команде развертывания расширения, необходимо выполнить команду обновления расширения и указать путь нового PEM-файла:

       az k8s-extension update --name <extension-name> --extension-type Microsoft.AzureML.Kubernetes --config sslCname=<ssl cname> --config-protected sslCertPemFile=<file-path-to-cert-PEM> sslKeyPemFile=<file-path-to-cert-KEY> --cluster-type managedClusters --cluster-name <your-AKS-cluster-name> --resource-group <your-RG-name> --scope cluster
    

Отключение протокола TLS

Чтобы отключить TLS для модели, развернутой в Kubernetes, выполните приведенные действия.

  1. Обновите расширение Машинное обучение Azure с заданным allowInsercureconnection значением True.

  2. sslCname Удалите параметр конфигурации вместе с sslSecret параметрами конфигурации или sslPem параметрами конфигурации.

  3. Выполните следующую команду Azure CLI в кластере Kubernetes и выполните обновление. Эта команда предполагает, что вы используете AKS.

       az k8s-extension update --name <extension-name> --extension-type Microsoft.AzureML.Kubernetes --config enableInference=True inferenceRouterServiceType=LoadBalancer allowInsercureconnection=True --cluster-type managedClusters --cluster-name <your-AKS-cluster-name> --resource-group <your-RG-name> --scope cluster
    

Предупреждение

По умолчанию развертывание расширения Машинное обучение Azure ожидает параметры конфигурации для поддержки HTTPS. Мы рекомендуем поддержку HTTP только для целей разработки или тестирования. Параметр allowInsecureConnections=True конфигурации обеспечивает поддержку HTTP.

Следующие шаги

Вы узнаете, как выполнять следующие задачи: