Настройка безопасной сетевой конечной точки с помощью 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 также позволяет клиенту проверять подлинность сервера, к которому он подключается. Эта функция защищает клиентов от атак типа "злоумышленник в середине".
Ниже в общих чертах описан процесс защиты сетевой конечной точки.
Настройте TLS или SSL в расширении Машинного обучения Azure.
Обновите 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 для имени личного домена, выполните следующие действия.
Получите 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-адреса .
Кроме того, можно запустить команду
kubectl describe svc azureml-fe -n azureml
Kubernetes в кластере, чтобы получить IP-адрес изLoadBalancer Ingress
параметра в выходных данных.Примечание.
Для кластеров Kubernetes, использующих либо
nodePort
clusterIP
в качестве службы маршрутизатора вывода, необходимо настроить собственное решение балансировки нагрузки и завершениеazureml-fe
TLS/SSL. Кроме того, необходимо получить IP-адресazureml-fe
службы в области кластера.Используйте инструменты, предоставленные вашим регистратором доменных имен, чтобы обновить запись DNS для доменного имени. Запись сопоставляет полное доменное имя (например,
www.contoso.com
) с IP-адресом. Запись должна указывать на IP-адрес веб-конечной точки.Совет
Корпорация Майкрософт не несет ответственности за обновление DNS для пользовательского DNS-имени или сертификата. Вы должны сами обновить его у регистратора доменных имен.
После обновления записи DNS можно проверить разрешение DNS с помощью
nslookup custom-domain-name
команды. Если запись DNS правильно обновлена, имя личного домена будет указывать на IP-адрес веб-конечной точки.Может быть задержка в минутах или часах, прежде чем клиенты смогут разрешить доменное имя, в зависимости от регистратора и времени жизни (TTL), настроенного для доменного имени.
Дополнительные сведения о разрешении DNS с помощью Машинного обучения Azure см. в статье Использование рабочей области с пользовательским DNS-сервером.
Обновление TLS/SSL-сертификата
Срок действия TLS/SSL-сертификатов истекает, и их необходимо обновлять. Как правило, это происходит каждый год. Используйте сведения, описанные в следующих шагах, чтобы обновить и обновить сертификат для моделей, развернутых в Kubernetes (AKS и Kubernetes с поддержкой Azure Arc):
Используйте документацию из центра сертификации для продления сертификата. Этот процесс создает новые файлы сертификатов.
Обновите расширение Машинное обучение 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, выполните приведенные действия.
Обновите расширение Машинное обучение Azure с заданным
allowInsercureconnection
значениемTrue
.sslCname
Удалите параметр конфигурации вместе сsslSecret
параметрами конфигурации илиsslPem
параметрами конфигурации.Выполните следующую команду 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.
Следующие шаги
Вы узнаете, как выполнять следующие задачи: