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:

  1. Skaffa ett domännamn.

  2. Skaffa ett digitalt certifikat.

  3. Konfigurera TLS/SSL i Azure Machine Learning-tillägget.

  4. Uppdatera din DNS med ett fullständigt domännamn (FQDN) så att den pekar på onlineslutpunkten.

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 och slKeyPemFile 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 sslSecretmå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 och sslKeyPemFIle använder konfigurationsskyddade parametrar. De konfigurerar sslSecret inte och sslCertPemFile/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-fefinns i Hanterad Azure Mašinsko učenje slutsatsdragningsrouter.

Så här uppdaterar du DNS-posten för ditt anpassade domännamn:

  1. 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änst azureml-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änsten azureml-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 .

    Skärmbild av att lägga till ett nytt tillägg till Det Azure Arc-aktiverade Kubernetes-klustret från Azure-portalen.

    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 parametern LoadBalancer Ingress i utdata.

    Kommentar

    För Kubernetes-kluster som använder antingen nodePort eller clusterIP som inferensroutertjänst måste du konfigurera en egen belastningsutjämningslösning och TLS/SSL-avslutning för azureml-fe. Du måste också hämta IP-adressen azureml-fe för tjänsten i klusteromfånget.

  2. 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.

  3. 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):

  1. Använd dokumentationen från certifikatutfärdare för att förnya certifikatet. Den här processen skapar nya certifikatfiler.

  2. 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:

  1. Uppdatera Azure Mašinsko učenje-tillägget med allowInsercureconnection inställt på True.

  2. Ta bort konfigurationsinställningen sslCname tillsammans med konfigurationsinställningarna sslSecret eller sslPem .

  3. 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: