Använda TLS för att skydda en webbtjänst via Azure Machine Learning
GÄLLER FÖR: Python SDK azureml v1
Den här artikeln visar hur du skyddar en webbtjänst som distribueras via Azure Mašinsko učenje.
Du använder HTTPS för att begränsa åtkomsten till webbtjänster och skydda de data som klienter skickar. HTTPS hjälper till att skydda kommunikationen mellan en klient och en webbtjänst genom att kryptera kommunikationen mellan de två. Kryptering använder TLS (Transport Layer Security). TLS kallas ibland fortfarande secure sockets layer (SSL), som var föregångaren till TLS.
Dricks
Azure Mašinsko učenje SDK använder termen "SSL" för egenskaper som är relaterade till säker kommunikation. Det betyder inte att webbtjänsten inte använder TLS. SSL är bara en mer allmänt erkänd term.
Mer specifikt stöder webbtjänster som distribueras via Azure Mašinsko učenje TLS version 1.2 för AKS och ACI. Om du använder en äldre TLS-version för ACI-distributioner rekommenderar vi att du distribuerar om för att hämta den senaste TLS-versionen.
TLS version 1.3 för Azure Mašinsko učenje – AKS-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 Infrastruktur för offentliga nycklar.
Varning
Om du inte använder HTTPS för webbtjänsten 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 .
Det här är den allmänna processen för att skydda en webbtjänst:
Skaffa ett domännamn.
Skaffa ett digitalt certifikat.
Distribuera eller uppdatera webbtjänsten med TLS aktiverat.
Uppdatera din DNS så att den pekar på webbtjänsten.
Viktigt!
Om du distribuerar till Azure Kubernetes Service (AKS) kan du köpa ett eget certifikat eller använda ett certifikat som tillhandahålls av Microsoft. Om du använder ett certifikat från Microsoft behöver du inte hämta något domännamn eller TLS/SSL-certifikat. Mer information finns i avsnittet Aktivera TLS och distribuera i den här artikeln.
Det finns små skillnader när du skyddar mellan distributionsmål.
Viktigt!
Några av Azure CLI-kommandona i den här artikeln använder azure-cli-ml
tillägget , eller v1, för Azure Mašinsko učenje. Stödet för v1-tillägget upphör den 30 september 2025. Du kommer att kunna installera och använda v1-tillägget fram till det datumet.
Vi rekommenderar att du övergår till ml
tillägget , eller v2, före den 30 september 2025. Mer information om v2-tillägget finns i Azure ML CLI-tillägget och Python SDK v2.
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 fullständigt domännamn (FQDN) (till exempel www.contoso.com) till DEN IP-adress som är värd för webbtjänsten.
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 (CA). Oavsett var du får certifikatet behöver du följande filer:
- Ett certifikat. Certifikatet måste innehålla den fullständiga certifikatkedjan och måste vara "PEM-kodad".
- En nyckel. Nyckeln måste också vara PEM-kodad.
När du begär ett certifikat måste du ange FQDN för den adress som du planerar att använda för webbtjänsten (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 webbtjänstens identitet. Om dessa adresser inte matchar får klienten ett felmeddelande.
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.
Aktivera TLS och distribuera
För AKS-distribution kan du aktivera TLS-avslutning när du skapar eller kopplar ett AKS-kluster i Azure Mašinsko učenje arbetsyta. Vid distributionstiden för AKS-modellen kan du inaktivera TLS-avslutning med distributionskonfigurationsobjektet, annars har all AKS-modelldistribution som standard TLS-avslutning aktiverad vid AKS-klusters skapande eller anslutningstid.
För ACI-distribution kan du aktivera TLS-avslutning vid modelldistributionstillfället med distributionskonfigurationsobjektet.
Distribuera i Azure Kubernetes Service
Kommentar
Informationen i det här avsnittet gäller även när du distribuerar en säker webbtjänst för designern. Om du inte är bekant med att använda Python SDK kan du läsa Vad är Azure Mašinsko učenje SDK för Python?.
När du skapar eller kopplar ett AKS-kluster i Azure Mašinsko učenje-arbetsytan kan du aktivera TLS-avslutning med konfigurationsobjekten AksCompute.provisioning_configuration() och AksCompute.attach_configuration(). Båda metoderna returnerar ett konfigurationsobjekt som har en enable_ssl-metod , och du kan använda enable_ssl metod för att aktivera TLS.
Du kan aktivera TLS antingen med Microsoft-certifikat eller ett anpassat certifikat som köpts från CA.
När du använder ett certifikat från Microsoft måste du använda parametern leaf_domain_label . Den här parametern genererar DNS-namnet för tjänsten. Ett värde för "contoso" skapar till exempel ett domännamn med "contoso<six-random-characters>".<azureregion.cloudapp.azure.com>", där <azureregion> är den region som innehåller tjänsten. Du kan också använda parametern overwrite_existing_domain för att skriva över den befintliga leaf_domain_label. I följande exempel visas hur du skapar en konfiguration som aktiverar en TLS med Microsoft-certifikat:
from azureml.core.compute import AksCompute # Config used to create a new AKS cluster and enable TLS provisioning_config = AksCompute.provisioning_configuration() # Leaf domain label generates a name using the formula # "<leaf-domain-label>######.<azure-region>.cloudapp.azure.com" # where "######" is a random series of characters provisioning_config.enable_ssl(leaf_domain_label = "contoso") # Config used to attach an existing AKS cluster to your workspace and enable TLS attach_config = AksCompute.attach_configuration(resource_group = resource_group, cluster_name = cluster_name) # Leaf domain label generates a name using the formula # "<leaf-domain-label>######.<azure-region>.cloudapp.azure.com" # where "######" is a random series of characters attach_config.enable_ssl(leaf_domain_label = "contoso")
Viktigt!
När du använder ett certifikat från Microsoft behöver du inte köpa ett eget certifikat eller domännamn.
När du använder ett anpassat certifikat som du har köpt använder du parametrarna ssl_cert_pem_file, ssl_key_pem_file och ssl_cname . PEM-filen med passfrasskydd stöds inte. I följande exempel visas hur du använder .pem-filer för att skapa en konfiguration som använder ett TLS/SSL-certifikat som du har köpt:
from azureml.core.compute import AksCompute # Config used to create a new AKS cluster and enable TLS provisioning_config = AksCompute.provisioning_configuration() provisioning_config.enable_ssl(ssl_cert_pem_file="cert.pem", ssl_key_pem_file="key.pem", ssl_cname="www.contoso.com") # Config used to attach an existing AKS cluster to your workspace and enable SSL attach_config = AksCompute.attach_configuration(resource_group = resource_group, cluster_name = cluster_name) attach_config.enable_ssl(ssl_cert_pem_file="cert.pem", ssl_key_pem_file="key.pem", ssl_cname="www.contoso.com")
Mer information om enable_ssl finns i AksProvisioningConfiguration.enable_ssl() och AksAttachConfiguration.enable_ssl().
Distribuera på Azure Container Instances
När du distribuerar till Azure Container Instances anger du värden för TLS-relaterade parametrar, som följande kodfragment visar:
from azureml.core.webservice import AciWebservice
aci_config = AciWebservice.deploy_configuration(
ssl_enabled=True, ssl_cert_pem_file="cert.pem", ssl_key_pem_file="key.pem", ssl_cname="www.contoso.com")
Mer information finns i AciWebservice.deploy_configuration().
Uppdatera din DNS
För antingen AKS-distribution med anpassat certifikat eller ACI-distribution måste du uppdatera DNS-posten så att den pekar på IP-adressen för bedömningsslutpunkten.
Viktigt!
När du använder ett certifikat från Microsoft för AKS-distribution behöver du inte uppdatera DNS-värdet för klustret manuellt. Värdet ska anges automatiskt.
Du kan följa följande steg för att uppdatera DNS-posten för ditt anpassade domännamn:
Hämta slutpunkts-IP-adress för poängsättning från slutpunkts-URI, vilket 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.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 bedömningsslutpunkten.
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 av kommandot nslookup custom-domain-name . Om DNS-posten uppdateras korrekt pekar det anpassade domännamnet på IP-adressen för poängslutpunkten.
Det kan finnas en fördröjning på minuter eller timmar innan klienter kan matcha domännamnet, beroende på registratorn och den "time to live" (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 avsnitt för att uppdatera och förnya certifikatet för modeller som distribuerats till Azure Kubernetes Service:
Uppdatera ett Microsoft-genererat certifikat
Om certifikatet ursprungligen genererades av Microsoft (när du använder leaf_domain_label för att skapa tjänsten) förnyas det automatiskt när det behövs. Om du vill förnya det manuellt använder du något av följande exempel för att uppdatera certifikatet:
Viktigt!
- Om det befintliga certifikatet fortfarande är giltigt använder du
renew=True
(SDK) eller--ssl-renew
(CLI) för att tvinga konfigurationen att förnya det. Den här åtgärden tar cirka 5 timmar att börja gälla. - När tjänsten ursprungligen distribuerades används den
leaf_domain_label
för att skapa ett DNS-namn med hjälp av mönstret<leaf-domain-label>######.<azure-region>.cloudapp.azure.com
. Om du vill behålla det befintliga namnet (inklusive de 6 siffror som ursprungligen genererades) använder du det ursprungligaleaf_domain_label
värdet. Ta inte med de 6 siffror som genererades.
Använda SDK
from azureml.core.compute import AksCompute
from azureml.core.compute.aks import AksUpdateConfiguration
from azureml.core.compute.aks import SslConfiguration
# Get the existing cluster
aks_target = AksCompute(ws, clustername)
# Update the existing certificate by referencing the leaf domain label
ssl_configuration = SslConfiguration(leaf_domain_label="myaks", overwrite_existing_domain=True, renew=True)
update_config = AksUpdateConfiguration(ssl_configuration)
aks_target.update(update_config)
Använda CLI
GÄLLER FÖR: Azure CLI ml-tillägget v1
az ml computetarget update aks -g "myresourcegroup" -w "myresourceworkspace" -n "myaks" --ssl-leaf-domain-label "myaks" --ssl-overwrite-domain True --ssl-renew
Mer information finns i följande referensdokument:
Uppdatera anpassat certifikat
Om certifikatet ursprungligen genererades av en certifikatutfärdare använder du följande steg:
Använd dokumentationen från certifikatutfärdare för att förnya certifikatet. Den här processen skapar nya certifikatfiler.
Använd antingen SDK eller CLI för att uppdatera tjänsten med det nya certifikatet:
Använda SDK
from azureml.core.compute import AksCompute from azureml.core.compute.aks import AksUpdateConfiguration from azureml.core.compute.aks import SslConfiguration # Read the certificate file def get_content(file_name): with open(file_name, 'r') as f: return f.read() # Get the existing cluster aks_target = AksCompute(ws, clustername) # Update cluster with custom certificate ssl_configuration = SslConfiguration(cname="myaks", cert=get_content('cert.pem'), key=get_content('key.pem')) update_config = AksUpdateConfiguration(ssl_configuration) aks_target.update(update_config)
Använda CLI
GÄLLER FÖR: Azure CLI ml-tillägget v1
az ml computetarget update aks -g "myresourcegroup" -w "myresourceworkspace" -n "myaks" --ssl-cname "myaks"--ssl-cert-file "cert.pem" --ssl-key-file "key.pem"
Mer information finns i följande referensdokument:
Inaktivera TLS
Om du vill inaktivera TLS för en modell som distribuerats till Azure Kubernetes Service skapar du en SslConfiguration
med status="Disabled"
och utför sedan en uppdatering:
from azureml.core.compute import AksCompute
from azureml.core.compute.aks import AksUpdateConfiguration
from azureml.core.compute.aks import SslConfiguration
# Get the existing cluster
aks_target = AksCompute(ws, clustername)
# Disable TLS
ssl_configuration = SslConfiguration(status="Disabled")
update_config = AksUpdateConfiguration(ssl_configuration)
aks_target.update(update_config)
Nästa steg
Lär dig att: