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 Machine Learning.

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.

Tips

Azure Machine Learning 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 känd term.

Mer specifikt stöder webbtjänster som distribueras via Azure Machine Learning TLS version 1.2 för AKS och ACI. Om du använder ä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 Machine Learning – AKS-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 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:

  1. Skaffa ett domännamn.

  2. Skaffa ett digitalt certifikat.

  3. Distribuera eller uppdatera webbtjänsten med TLS aktiverat.

  4. 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 ett 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-mltillägget , eller v1, för Azure Machine Learning. 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 mltillä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 mellan registratorer. Registratorn tillhandahåller verktyg för att hantera domännamnet. Du använder dessa verktyg för att mappa ett fullständigt kvalificerat 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). Den adress 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.

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.

Aktivera TLS och distribuera

För AKS-distribution kan du aktivera TLS-avslutning när du skapar eller kopplar ett AKS-kluster i Azure Machine Learning-arbetsytan. Vid distributionstiden för AKS-modellen kan du inaktivera TLS-avslutning med distributionskonfigurationsobjektet, annars har all AKS-modelldistribution som standard TLS-avslutning aktiverad när AKS-klustret skapar eller ansluter tid.

För ACI-distribution kan du aktivera TLS-avslutning vid modelldistributionstillfället med distributionskonfigurationsobjektet.

Distribuera på Azure Kubernetes Service

Anteckning

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 läser du Vad är Azure Machine Learning SDK för Python?.

När du skapar eller kopplar ett AKS-kluster i Azure Machine Learning-arbetsytan kan du aktivera TLS-avslutning med konfigurationsobjekt för 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. Till exempel skapar värdet "contoso" 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 lösenordsfrasskydd 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:

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

  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 bedömningsslutpunkten.

    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 av kommandot nslookup custom-domain-name . Om DNS-posten uppdateras korrekt pekar det anpassade domännamnet på IP-adressen för bedömningsslutpunkten.

    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 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 leaf_domain_label används 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 ursprungliga leaf_domain_label värdet. Ta inte med de 6 siffrorna 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ägg 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:

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

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