Konfigurera en säker onlineslutpunkt med TLS/SSL

Den här artikeln visar hur du skyddar en Kubernetes-onlineslutpunkt som skapas via Azure Machine Learning.

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.

Tips

  • 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 Machine Learning Kubernetes-slutsatsdragning stöds inte.

Både TLS och SSL förlitar sig på digitala certifikat, som 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 ett TLS/SSL-certifikat och sedan konfigurera dem i Azure Machine Learning-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 mellan registratorer. 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 IP-adressen 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

Anteckning

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). Den adress 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.

Tips

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 slutsatsdragnings-HTTPS för säkra anslutningar kan du aktivera TLS-avslutning med konfigurationsinställningar för distribution när du distribuerar Azure Machine Learning-tillägget i ett Kubernetes-kluster.

Vid distributionstiden för Azure Machine Learning-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 ange allowInsecureConnections=True stöd för HTTP och inaktivera TLS-avslutning.

Anteckning

För att stöda HTTPS-onlineslutpunkten allowInsecureConnections måste vara inställt på False.

Om du vill aktivera en HTTPS-slutpunkt för realtidsinferens 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 Machine Learning-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-kodade TLS/SSL-nyckelfilen.

I följande exempel visas hur du använder Azure CLI för att ange PEM-filer till Azure Machine Learning-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

Anteckning

  • 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 DNS med ett FQDN

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 Machine Learning-inferensroutertjänsten (azureml-fe) tillhandahåller den här IP-adressen. Mer information om azureml-fefinns i Hanterad Azure Machine Learning-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 Portal. Gå till din AKS-resurssida, gå till Tjänst och ingresser och leta sedan upp azureml-fe-tjänsten under azuerml-namnområdet . Sedan hittar du IP-adressen i kolumnen Extern IP .

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

    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.

    Anteckning

    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.

    Tips

    Microsoft ansvarar inte för att uppdatera DNS för ditt anpassade DNS-namn eller certifikat. Du måste uppdatera den med domännamnsregistratorn.

  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 klienterna kan matcha domännamnet, beroende på registratorn och TTL-värdet (Time To Live) som har konfigurerats för domännamnet.

Mer information om DNS-matchning med Azure Machine Learning 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 ditt certifikat 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 Machine Learning-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 distributionskommandot för tillägget 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 Machine Learning-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 Machine Learning-tillägget konfigurationsinställningar för HTTPS-stöd. Vi rekommenderar HTTP-stöd endast i utvecklings- eller testningssyfte. Konfigurationsinställningen allowInsecureConnections=True ger HTTP-stöd.

Nästa steg

Lär dig att: