Konfigurera en säker onlineslutpunkt med TLS/SSL
Den här artikeln visar hur du skyddar en Kubernetes-slutpunkt online som skapas via Azure Mašinsko učenje.
Du använder HTTPS för att begränsa åtkomsten till onlineslutpunkter och skydda de data som klienter skickar. HTTPS krypterar kommunikationen mellan en klient och en onlineslutpunkt med hjälp av Transport Layer Security (TLS). TLS kallas ibland fortfarande Secure Sockets Layer (SSL) som var föregångaren till TLS.
Dricks
- Mer specifikt stöder Kubernetes onlineslutpunkter TLS version 1.2 för Azure Kubernetes Service (AKS) och Azure Arc-aktiverade Kubernetes.
- TLS version 1.3 för Azure Mašinsko učenje Kubernetes-slutsatsdragning stöds inte.
Både TLS och SSL förlitar sig på digitala certifikat, vilket hjälper till med kryptering och identitetsverifiering. Mer information om hur digitala certifikat fungerar finns i Wikipedia-ämnet public_key_infrastructure.
Varning
Om du inte använder HTTPS för dina onlineslutpunkter kan data som skickas till och från tjänsten vara synliga för andra på Internet.
HTTPS gör det också möjligt för klienten att verifiera äktheten hos den server som den ansluter till. Den här funktionen skyddar klienter mot man-in-the-middle-attacker .
Följande är den allmänna processen för att skydda en onlineslutpunkt:
Viktigt!
Du måste köpa ett eget certifikat för att hämta ett domännamn eller TLS/SSL-certifikat och sedan konfigurera dem i Azure Mašinsko učenje-tillägget. Mer detaljerad information finns i följande avsnitt i den här artikeln.
Skaffa ett domännamn
Om du inte redan äger ett domännamn köper du ett från en domännamnsregistrator. Processen och priset skiljer sig åt mellan registratorerna. Registratorn tillhandahåller verktyg för att hantera domännamnet. Du använder dessa verktyg för att mappa ett FQDN (till exempel www.contoso.com
) till DEN IP-adress som är värd för din onlineslutpunkt.
Mer information om hur du hämtar IP-adressen för dina onlineslutpunkter finns i avsnittet Uppdatera DNS med ett FQDN i den här artikeln.
Hämta ett TLS/SSL-certifikat
Det finns många sätt att hämta ett TLS/SSL-certifikat (digitalt certifikat). Det vanligaste är att köpa en från en certifikatutfärdare. Oavsett var du får certifikatet behöver du följande filer:
- Ett certifikat som innehåller hela certifikatkedjan och är PEM-kodat
- En nyckel som är PEM-kodad
Kommentar
En SSL-nyckel i en PEM-fil med lösenfrasskydd stöds inte.
När du begär ett certifikat måste du ange FQDN för den adress som du planerar att använda för onlineslutpunkten (till exempel www.contoso.com
). Adressen som är stämplad i certifikatet och adressen som klienterna använder jämförs för att verifiera identiteten för onlineslutpunkten. Om dessa adresser inte matchar får klienten ett felmeddelande.
Mer information om hur du konfigurerar IP-banding med ett FQDN finns i avsnittet Uppdatera DNS med ett FQDN i den här artikeln.
Dricks
Om certifikatutfärdaren inte kan ange certifikatet och nyckeln som PEM-kodade filer kan du använda ett verktyg som OpenSSL för att ändra formatet.
Varning
Använd endast självsignerade certifikat för utveckling. Använd dem inte i produktionsmiljöer. Självsignerade certifikat kan orsaka problem i dina klientprogram. Mer information finns i dokumentationen för de nätverksbibliotek som klientprogrammet använder.
Konfigurera TLS/SSL i Azure Machine Learning-tillägget
För en Kubernetes-onlineslutpunkt som är inställd på att använda slutsatsdragning HTTPS för säkra anslutningar kan du aktivera TLS-avslutning med konfigurationsinställningar för distribution när du distribuerar Azure Mašinsko učenje-tillägget i ett Kubernetes-kluster.
Vid distributionstiden för Azure Mašinsko učenje-tillägget är False
konfigurationsinställningen allowInsecureConnections
som standard. För att säkerställa en lyckad tilläggsdistribution måste du ange antingen konfigurationsinställningen sslSecret
eller en kombination av sslKeyPemFile
och sslCertPemFile
konfigurationsskyddade inställningar. Annars kan du ställa in allowInsecureConnections=True
för att stödja HTTP och inaktivera TLS-avslutning.
Kommentar
Om du vill ha stöd för HTTPS-onlineslutpunkten allowInsecureConnections
måste du vara inställd på False
.
Om du vill aktivera en HTTPS-slutpunkt för slutsatsdragning i realtid måste du ange ett PEM-kodat TLS/SSL-certifikat och en nyckel. Det finns två sätt att ange certifikatet och nyckeln vid distributionstillfället för Azure Mašinsko učenje-tillägget:
- Ange konfigurationsinställningen
sslSecret
. - Ange en kombination av
sslCertPemFile
ochslKeyPemFile
konfigurationsskyddade inställningar.
Konfigurera sslSecret
Det bästa sättet är att spara certifikatet och nyckeln i en Kubernetes-hemlighet i azureml
namnområdet.
För att konfigurera sslSecret
måste du spara en Kubernetes-hemlighet i kubernetes-klustret i azureml
namnområdet för att lagra cert.pem (PEM-kodat TLS/SSL-certifikat) och key.pem (PEM-kodad TLS/SSL-nyckel).
Följande kod är en YAML-exempeldefinition av en TLS/SSL-hemlighet:
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
När du har sparat hemligheten i klustret kan du använda följande Azure CLI-kommando för att ange sslSecret
som namnet på den här Kubernetes-hemligheten. (Det här kommandot fungerar bara om du använder 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
Konfigurera sslCertPemFile och sslKeyPemFile
Du kan ange att konfigurationsinställningen sslCertPemFile
ska vara sökvägen till DEN PEM-kodade TLS/SSL-certifikatfilen och konfigurationsinställningen sslKeyPemFile
som sökväg till PEM-kodad TLS/SSL-nyckelfil.
I följande exempel visas hur du använder Azure CLI för att ange PEM-filer till Azure Mašinsko učenje-tillägget som använder ett TLS/SSL-certifikat som du har köpt. Exemplet förutsätter att du använder 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
Kommentar
- En PEM-fil med lösenfrasskydd stöds inte.
- Både
sslCertPemFIle
ochsslKeyPemFIle
använder konfigurationsskyddade parametrar. De konfigurerarsslSecret
inte ochsslCertPemFile
/sslKeyPemFile
på samma gång.
Uppdatera din DNS med ett fullständigt domännamn
För modelldistribution på en Kubernetes-onlineslutpunkt med ett anpassat certifikat måste du uppdatera DNS-posten så att den pekar på IP-adressen för onlineslutpunkten. Azure Mašinsko učenje-inferensroutertjänsten (azureml-fe
) tillhandahåller den här IP-adressen. Mer information om azureml-fe
finns i Hanterad Azure Mašinsko učenje slutsatsdragningsrouter.
Så här uppdaterar du DNS-posten för ditt anpassade domännamn:
Hämta onlineslutpunktens IP-adress från bedömnings-URI:n, som vanligtvis är i formatet
http://104.214.29.152:80/api/v1/service/<service-name>/score
. I det här exemplet är IP-adressen 104.214.29.152.När du har konfigurerat ditt anpassade domännamn ersätts IP-adressen i bedömnings-URI:n. För Kubernetes-kluster som använder
LoadBalancer
som inferensroutertjänstazureml-fe
exponeras externt via en molnleverantörs lastbalanserare och TLS/SSL-avslutning. IP-adressen för Kubernetes onlineslutpunkt är den externa IP-adressen för tjänstenazureml-fe
som distribueras i klustret.Om du använder AKS kan du hämta IP-adressen från Azure-portalen. Gå till din AKS-resurssida, gå till Tjänst och ingresser och leta sedan upp azureml-fe-tjänsten under namnområdet azuerml . Sedan hittar du IP-adressen i den externa IP-kolumnen .
Dessutom kan du köra Kubernetes-kommandot
kubectl describe svc azureml-fe -n azureml
i klustret för att hämta IP-adressen från parameternLoadBalancer Ingress
i utdata.Kommentar
För Kubernetes-kluster som använder antingen
nodePort
ellerclusterIP
som inferensroutertjänst måste du konfigurera en egen belastningsutjämningslösning och TLS/SSL-avslutning förazureml-fe
. Du måste också hämta IP-adressenazureml-fe
för tjänsten i klusteromfånget.Använd verktygen från domännamnsregistratorn för att uppdatera DNS-posten för ditt domännamn. Posten mappar FQDN (till exempel
www.contoso.com
) till IP-adressen. Posten måste peka på IP-adressen för onlineslutpunkten.Dricks
Microsoft ansvarar inte för att uppdatera DNS för ditt anpassade DNS-namn eller certifikat. Du måste uppdatera den med din domännamnsregistrator.
Efter DNS-postuppdateringen kan du verifiera DNS-matchning med hjälp
nslookup custom-domain-name
av kommandot . Om DNS-posten uppdateras korrekt pekar det anpassade domännamnet på IP-adressen för onlineslutpunkten.Det kan uppstå en fördröjning på minuter eller timmar innan klienter kan matcha domännamnet, beroende på registratorn och tiden att leva (TTL) som har konfigurerats för domännamnet.
Mer information om DNS-matchning med Azure Mašinsko učenje finns i Använda din arbetsyta med en anpassad DNS-server.
Uppdatera TLS/SSL-certifikatet
TLS-/SSL-certifikat upphör att gälla och måste förnyas. Detta sker vanligtvis varje år. Använd informationen i följande steg för att uppdatera och förnya certifikatet för modeller som distribuerats till Kubernetes (AKS och Azure Arc-aktiverade Kubernetes):
Använd dokumentationen från certifikatutfärdare för att förnya certifikatet. Den här processen skapar nya certifikatfiler.
Uppdatera azure-Mašinsko učenje-tillägget och ange de nya certifikatfilerna
az k8s-extension update
med hjälp av kommandot .Om du använde en Kubernetes-hemlighet för att konfigurera TLS/SSL tidigare måste du först uppdatera Kubernetes-hemligheten med den nya cert.pem - och key.pem-konfigurationen i Kubernetes-klustret. Kör sedan kommandot för tilläggsuppdatering för att uppdatera certifikatet:
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
Om du konfigurerade PEM-filerna direkt i kommandot för tilläggsdistributionen tidigare måste du köra kommandot för tilläggsuppdatering och ange den nya PEM-filens sökväg:
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
Inaktivera TLS
Så här inaktiverar du TLS för en modell som distribuerats till Kubernetes:
Uppdatera Azure Mašinsko učenje-tillägget med
allowInsercureconnection
inställt påTrue
.Ta bort konfigurationsinställningen
sslCname
tillsammans med konfigurationsinställningarnasslSecret
ellersslPem
.Kör följande Azure CLI-kommando i kubernetes-klustret och utför sedan en uppdatering. Det här kommandot förutsätter att du använder 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
Varning
Som standard förväntar sig distributionen av Azure Mašinsko učenje-tillägget konfigurationsinställningar för HTTPS-stöd. Vi rekommenderar HTTP-stöd endast för utvecklings- eller testningsändamål. Konfigurationsinställningen allowInsecureConnections=True
ger HTTP-stöd.
Nästa steg
Lär dig att: