Configurer un point de terminaison en ligne sécurisé avec TLS/SSL
Cet article vous explique comment sécuriser un point de terminaison en ligne sécurisé Kubernetes crée par le biais d’Azure Machine Learning.
Vous utilisez HTTPS pour restreindre l’accès aux points de terminaison en ligne et sécuriser les données soumises par les clients. HTTPS chiffre les communications entre un client et un point de terminaison en ligne à l’aide du protocole TLS. TLS est encore parfois appelé SSL (Secure Sockets Layer), qui était son prédécesseur.
Conseil
- Plus précisément, les points de terminaison en ligne Kubernetes prennent en charge la version 1.2 de TLS pour AKS (Azure Kubernetes Service) et Kubernetes avec Azure Arc.
- La version 1.3 de TLS pour l’inférence Kubernetes d’Azure Machine Learning n’est pas prise en charge.
TLS et SSL s'appuient tous deux sur des certificats numériques qui facilitent le chiffrement et la vérification d'identité. Pour plus d’informations sur le fonctionnement des certificats numériques, consultez l'article Wikipédia Infrastructure_à_clé_publique.
Avertissement
Si vous n’utilisez pas HTTPS pour vos points de terminaison en ligne, les données envoyées vers et depuis le service peuvent être visibles par d'autres personnes sur Internet.
HTTPS permet également au client de vérifier l’authenticité du serveur auquel il se connecte. Cette fonctionnalité protège les clients des attaques de l'intercepteur.
L’élément suivant est le processus général de sécurisation d’un point de terminaison en ligne :
Important
Vous devez acheter votre propre certificat pour obtenir un nom de domaine ou un certificat TLS/SSL, puis les configurer dans l’extension Azure Machine Learning. Pour plus d’informations, consultez les sections suivantes de cet article.
Obtenir un nom de domaine
Si vous ne possédez pas de nom de domaine, achetez-en-un auprès d’un bureau d’enregistrement de noms de domaine. Le processus et le prix varient selon les bureaux d’enregistrement. Le bureau d’enregistrement propose des outils pour gérer le nom de domaine. Vous utilisez ces outils pour mapper un FQDN (par exemple, www.contoso.com
) à l’adresse IP qui héberge votre point de terminaison en ligne.
Pour plus d’informations sur la manière d’obtenir l’adresse IP de vos points de terminaison en ligne, consultez la section Mettre à jour votre DNS avec un nom de domaine complet de cet article.
Obtenir un certificat TLS/SSL
Il existe de nombreuses façons d’obtenir un certificat TLS/SSL (certificat numérique). Le moyen le plus courant consiste à en acheter un auprès d’une autorité de certification. Quel que soit l’endroit où vous obtenez le certificat, vous avez besoin des fichiers suivants :
- Un certificat contenant la chaîne de certificats complète, codé en PEM
- Une clé codée en PEM
Notes
Une clé SSL dans un fichier PEM avec une protection par phrase secrète n’est pas prise en charge.
Lorsque vous demandez un certificat, vous devez fournir le nom de domaine complet (FQDN) de l’adresse que vous envisagez d’utiliser pour le point de terminaison en ligne (par exemple, www.contoso.com
). L’adresse estampillée sur le certificat et l’adresse utilisée par les clients sont comparées pour vérifier l’identité du point de terminaison. Si ces adresses ne correspondent pas, le client reçoit un message d’erreur.
Pour plus d’informations sur la manière de configurer la bande IP avec un nom de domaine complet, consultez la section Mettre à jour votre DNS avec un nom de domaine complet de cet article.
Conseil
Si l’autorité de certification ne peut pas fournir le certificat et la clé sous forme de fichiers PEM, vous pouvez utiliser un outil tel qu’OpenSSL pour modifier le format.
Avertissement
Utilisez les certificats auto-signés uniquement pour le développement. Ne les utilisez pas dans des environnements de production. Les certificats autosignés peuvent entraîner des problèmes dans vos applications clientes. Pour plus d’informations, consultez la documentation relative aux bibliothèques réseau que votre application cliente utilise.
Configurer TLS/SSL dans l’extension Azure Machine Learning
Pour un point de terminaison en ligne Kubernetes qui est configuré pour utiliser le protocole HTTPS d’inférence pour les connexions sécurisées, vous pouvez activer la terminaison TLS avec les paramètres de configuration de déploiement quand vous déployez l’extension Azure Machine Learning dans un cluster Kubernetes.
Au moment du déploiement de l’extension Azure Machine Learning, le paramètre de configuration allowInsecureConnections
est False
par défaut. Pour réussir le déploiement de l’extension, vous devez spécifier le paramètre de configuration sslSecret
ou une combinaison des paramètres protégés par la configuration sslKeyPemFile
et sslCertPemFile
. Vous pouvez également définir allowInsecureConnections=True
pour prendre en charge HTTP et désactiver la terminaison TLS.
Notes
Pour prendre en charge le point de terminaison en ligne HTTPS, allowInsecureConnections
doit être défini sur False
.
Pour activer un point de terminaison HTTPS pour l’inférence en temps réel, vous devez fournir un certificat TLS/SSL codé en PEM et une clé. Il existe deux façons de spécifier le certificat et la clé au moment du déploiement de l’extension Azure Machine Learning :
- Spécifiez le paramètre de configuration
sslSecret
. - Spécifiez une combinaison des paramètres protégés par la configuration
sslCertPemFile
etslKeyPemFile
.
Configurez sslSecret
La bonne pratique consiste à enregistrer le certificat et la clé dans un secret Kubernetes dans l’espace de noms azureml
.
Pour configurer sslSecret
, vous devez enregistrer un secret Kubernetes dans votre cluster Kubernetes dans l’espace de noms azureml
pour stocker cert.pem (certificat TLS /SSL codé en PEM) et key.pem (clé TLS/SSL codée en PEM).
Le code suivant est un exemple de définition YAML d’un secret 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
Après avoir enregistré le secret dans votre cluster, vous pouvez utiliser la commande Azure CLI suivante pour spécifier sslSecret
comme nom de ce secret Kubernetes. (Cette commande fonctionne uniquement si vous utilisez 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
Configurez sslCertPemFile et sslKeyPemFile
Vous pouvez spécifier le paramètre de configuration sslCertPemFile
comme chemin du fichier de certificat TLS/SSL codé en PEM et le paramètre de configuration sslKeyPemFile
comme chemin du fichier de clé TLS/SSL codée en PEM.
L’exemple suivant montre comment utiliser Azure CLI pour spécifier des fichiers .PEM pour l’extension Azure Machine Learning, qui utilise un certificat TLS/SSL que vous avez acheté. L’exemple suppose que vous utilisez 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
Notes
- Un fichier PEM avec protection par phrase secrète n’est pas pris en charge.
sslCertPemFIle
etsslKeyPemFIle
utilisent des paramètres protégés par la configuration. Ils ne configurent passslSecret
etsslCertPemFile
/sslKeyPemFile
en même temps.
Mettre à jour votre DNS avec un nom de domaine complet
Pour le déploiement de modèle sur un point de terminaison en ligne Kubernetes avec un certificat personnalisé, vous devez mettre à jour votre enregistrement DNS pour qu’il pointe vers l’adresse IP du point de terminaison en ligne. Le service de routeur d’inférence Azure Machine Learning (azureml-fe
) fournit cette adresse IP. Pour plus d’informations sur azureml-fe
, consultez Routeur d’inférence Azure Machine Learning managé.
Pour mettre à jour l’enregistrement DNS pour votre nom de domaine personnalisé :
Obtenez l’adresse IP du point de terminaison en ligne à partir de l’URI de scoring, qui est généralement au format
http://104.214.29.152:80/api/v1/service/<service-name>/score
. Dans cet exemple, l’adresse IP est 104.214.29.152.Quand vous avez configuré votre nom de domaine personnalisé, celui-ci remplace l’adresse IP dans l’URI de scoring. Pour les clusters Kubernetes qui utilisent
LoadBalancer
comme service de routeur d’inférence,azureml-fe
est exposé en externe par le biais de la terminaison TLS/SSL et de l’équilibreur de charge d’un fournisseur de cloud. L’adresse IP du point de terminaison en ligne Kubernetes est l’adresse IP externe du serviceazureml-fe
déployé dans le cluster.Si vous utilisez AKS, vous pouvez obtenir l’adresse IP à partir du portail Azure. Rendez-vous sur la page de votre ressource AKS, accédez aux services et entrées, puis recherchez le service azureml-fe sous l’espace de noms azuerml. Vous trouverez alors l’adresse IP dans la colonne Adresse IP externe.
En outre, vous pouvez exécuter la commande Kubernetes
kubectl describe svc azureml-fe -n azureml
dans votre cluster pour obtenir l’adresse IP à partir du paramètreLoadBalancer Ingress
dans la sortie.Notes
Pour les clusters Kubernetes qui utilisent
nodePort
ouclusterIP
comme service de routeur d’inférence, vous devez configurer votre propre solution d’équilibrage de charge et votre propre terminaison TLS/SSL pourazureml-fe
. Vous devez également obtenir l’adresse IP du serviceazureml-fe
dans l’étendue du cluster.Utilisez les outils de votre bureau d’enregistrement de noms de domaine pour mettre à jour l’enregistrement DNS pour votre nom de domaine. L’enregistrement mappe le nom de domaine complet (par exemple,
www.contoso.com
) à l’adresse IP. L’enregistrement doit pointer vers l’adresse IP du point de terminaison en ligne.Conseil
Microsoft n’est pas responsable de la mise à jour du DNS pour votre certificat ou nom DNS personnalisé. Vous devez le mettre à jour avec votre bureau d’enregistrement de noms de domaine.
Après la mise à jour de l’enregistrement DNS, vous pouvez valider la résolution DNS à l’aide de la commande
nslookup custom-domain-name
. Si l’enregistrement DNS est correctement mis à jour, le nom de domaine personnalisé pointe alors vers l’adresse IP du point de terminaison en ligne.Selon le bureau d’enregistrement et la durée de vie (TTL) configurée pour le nom de domaine, les clients peuvent avoir à patienter quelques minutes voire plusieurs heures avant de pouvoir résoudre le nom de domaine.
Pour plus d’informations sur la résolution DNS avec Azure Machine Learning, consultez Utilisation de votre espace de travail avec un serveur DNS personnalisé.
Mettre à jour le certificat TLS/SSL
Les certificats TLS/SSL expirent et doivent être renouvelés. En général, cela se produit chaque année. Utilisez les informations fournies dans les étapes suivantes pour mettre à jour et renouveler votre certificat pour les modèles déployés sur Kubernetes (AKS et Kubernetes avec Azure Arc) :
Utilisez la documentation de l’autorité de certification pour renouveler le certificat. Ce processus crée de nouveaux fichiers de certificat.
Mettez à jour votre extension Azure Machine Learning et spécifiez les nouveaux fichiers de certificat à l’aide de la commande
az k8s-extension update
.Si vous aviez déjà utilisé un secret Kubernetes pour configurer TLS/SSL, vous devez d’abord mettre à jour le secret Kubernetes avec la nouvelle configuration de cert.pem et key.pem dans votre cluster Kubernetes. Exécutez ensuite la commande de mise à jour de l’extension pour mettre à jour le certificat :
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
Si vous aviez déjà configuré directement les fichiers PEM dans la commande de déploiement d’extension, vous devez exécuter la commande de mise à jour de l’extension et spécifier le nouveau chemin des fichiers 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
Désactiver le protocole TLS
Pour désactiver TLS pour un modèle déployé sur Kubernetes :
Mettez à jour l’extension Azure Machine Learning avec
allowInsercureconnection
défini surTrue
.Supprimez le paramètre de configuration
sslCname
et le paramètre de configurationsslSecret
ousslPem
.Exécutez la commande Azure CLI suivante dans votre cluster Kubernetes, puis effectuez une mise à jour. Cette commande suppose que vous utilisez 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
Avertissement
Par défaut, le déploiement de l’extension Azure Machine Learning attend des paramètres de configuration pour la prise en charge de HTTPS. Nous recommandons la prise en charge de HTTP uniquement à des fins de développement ou de test. Le paramètre de configuration allowInsecureConnections=True
permet la prise en charge de HTTP.
Étapes suivantes
Découvrez comment :