Sdílet prostřednictvím


Zabezpečení webové služby prostřednictvím služby Azure Machine Learning s využitím protokolu TLS

PLATÍ PRO: Python SDK azureml v1

V tomto článku se dozvíte, jak zabezpečit webovou službu nasazenou prostřednictvím služby Azure Machine Learning.

Pomocí protokolu HTTPS omezíte přístup k webovým službám a zabezpečíte data, která klienti odesílali. HTTPS pomáhá zabezpečit komunikaci mezi klientem a webovou službou šifrováním komunikace mezi těmito dvěma službami. Šifrování používá protokol TLS (Transport Layer Security). Protokol TLS se někdy stále označuje jako SSL (Secure Sockets Layer), který byl předchůdcem protokolu TLS.

Tip

Sada Azure Machine Learning SDK používá termín SSL pro vlastnosti, které souvisejí se zabezpečenou komunikací. To neznamená, že vaše webová služba nepoužívá protokol TLS. PROTOKOL SSL je jen běžně rozpoznaný termín.

Konkrétně webové služby nasazené prostřednictvím služby Azure Machine Learning podporují protokol TLS verze 1.2 pro AKS a ACI. Pokud používáte starší verzi protokolu TLS, doporučujeme v případě nasazení ACI znovu získat nejnovější verzi protokolu TLS.

Protokol TLS verze 1.3 pro Azure Machine Learning – Odvozování AKS se nepodporuje.

Protokol TLS i SSL využívají digitální certifikáty, které pomáhají s ověřováním šifrování a identit. Další informace o tom, jak digitální certifikáty fungují, najdete v tématu Wikipedie o infrastruktuře veřejného klíče.

Upozorňující

Pokud pro webovou službu nepoužíváte HTTPS, můžou být data odesílaná do a ze služby viditelná ostatním uživatelům na internetu.

HTTPS také umožňuje klientovi ověřit pravost serveru, ke kterému se připojuje. Tato funkce chrání klienty před útoky typu man-in-the-middle .

Obecný postup zabezpečení webové služby je následující:

  1. Získání názvu domény

  2. Získání digitálního certifikátu

  3. Nasazení nebo aktualizace webové služby s povoleným protokolem TLS

  4. Aktualizace záznamu DNS, aby odkazoval na webovou službu

Důležité

Pokud nasazujete do služby Azure Kubernetes Service (AKS), můžete si koupit vlastní certifikát nebo použít certifikát, který poskytuje Microsoft. Pokud používáte certifikát od Microsoftu, nemusíte získat název domény ani certifikát TLS/SSL. Další informace najdete v části Povolení protokolu TLS a nasazení tohoto článku.

Při zabezpečení napříč cíli nasazení existují mírné rozdíly.

Důležité

Některé příkazy Azure CLI v tomto článku používají azure-cli-mlrozšíření (nebo v1) pro Azure Machine Learning. Podpora rozšíření v1 skončí 30. září 2025. Do tohoto data budete moct nainstalovat a používat rozšíření v1.

Doporučujeme přejít na mlrozšíření (nebo v2) před 30. zářím 2025. Další informace o rozšíření v2 najdete v tématu Rozšíření Azure ML CLI a Python SDK v2.

Získání názvu domény

Pokud ještě nemáte název domény, kupte si ho od registrátora názvu domény. Proces a cena se u registrátorů liší. Registrátor poskytuje nástroje pro správu názvu domény. Pomocí těchto nástrojů můžete namapovat plně kvalifikovaný název domény (FQDN) (například www.contoso.com) na IP adresu, která hostuje vaši webovou službu.

Získání certifikátu TLS/SSL

Existuje mnoho způsobů, jak získat certifikát TLS/SSL (digitální certifikát). Nejběžnější je nákup od certifikační autority (CA). Bez ohledu na to, kde certifikát získáte, potřebujete následující soubory:

  • Certifikát. Certifikát musí obsahovat úplný řetěz certifikátů a musí být zakódovaný PEM.
  • Klíč. Klíč musí být také kódovaný pomocí PEM.

Když požadujete certifikát, musíte zadat plně kvalifikovaný název domény adresy, kterou chcete použít pro webovou službu (například www.contoso.com). Adresa, která je kolkována do certifikátu, a adresu, kterou klienti používají, se porovnává s ověřením identity webové služby. Pokud se tyto adresy neshodují, klient obdrží chybovou zprávu.

Tip

Pokud certifikační autorita nemůže jako soubory s kódováním PEM poskytnout certifikát a klíč, můžete změnit formát pomocí nástroje, jako je OpenSSL .

Upozorňující

Certifikáty podepsané svým držitelem používejte jenom pro vývoj. Nepoužívejte je v provozních prostředích. Certifikáty podepsané svým držitelem můžou způsobit problémy v klientských aplikacích. Další informace najdete v dokumentaci k síťovým knihovnám, které klientská aplikace používá.

Povolení protokolu TLS a nasazení

Pro nasazení AKS můžete povolit ukončení protokolu TLS při vytváření nebo připojování clusteru AKS v pracovním prostoru Azure Machine Learning. V době nasazení modelu AKS můžete zakázat ukončení protokolu TLS s objektem konfigurace nasazení, jinak ve výchozím nastavení bude mít ukončení protokolu TLS povolené při vytvoření nebo připojení clusteru AKS.

Pro nasazení ACI můžete povolit ukončení protokolu TLS v době nasazení modelu pomocí objektu konfigurace nasazení.

Nasazení ve službě Azure Kubernetes Service

Poznámka:

Informace v této části platí také při nasazení zabezpečené webové služby pro návrháře. Pokud nevíte, jak používat sadu Python SDK, přečtěte si téma Co je sada Azure Machine Learning SDK pro Python?

Při vytváření nebo připojování clusteru AKS v pracovním prostoru Azure Machine Learning můžete povolit ukončení protokolu TLS s objekty konfigurace AksCompute.provisioning_configuration() a AksCompute.attach_configuration(). Obě metody vrací objekt konfigurace, který má metodu enable_ssl , a k povolení protokolu TLS můžete použít metodu enable_ssl.

Protokol TLS můžete povolit buď s certifikátem Microsoftu, nebo vlastním certifikátem zakoupeným od certifikační autority.

  • Pokud používáte certifikát od Microsoftu, musíte použít leaf_domain_label parametr. Tento parametr vygeneruje název DNS pro službu. Například hodnota "contoso" vytvoří název domény "contoso<six-random-characters>".<azureregion.cloudapp.azure.com", kde <azureregion>> je oblast, která obsahuje službu. Volitelně můžete použít parametr overwrite_existing_domain k přepsání existujícího leaf_domain_label. Následující příklad ukazuje, jak vytvořit konfiguraci, která umožňuje tls s certifikátem Microsoftu:

    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")
    

    Důležité

    Pokud používáte certifikát od Microsoftu, nemusíte si kupovat vlastní certifikát ani název domény.

  • Při použití vlastního certifikátu, který jste zakoupili, použijete parametry ssl_cert_pem_file, ssl_key_pem_file a ssl_cname . Soubor PEM s ochranou pass phrase se nepodporuje. Následující příklad ukazuje, jak pomocí souborů .pem vytvořit konfiguraci, která používá certifikát TLS/SSL, který jste zakoupili:

    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")
    

Další informace o enable_ssl najdete v tématech AksProvisioningConfiguration.enable_ssl() a AksAttachConfiguration.enable_ssl().

Nasazení v Azure Container Instances

Když nasadíte do služby Azure Container Instances, zadáte hodnoty pro parametry související s protokolem TLS, jak ukazuje následující fragment kódu:

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")

Další informace najdete v tématu AciWebservice.deploy_configuration().

Aktualizace DNS

Pro nasazení AKS s vlastním certifikátem nebo nasazeníM ACI musíte aktualizovat záznam DNS tak, aby odkazoval na IP adresu bodujícího koncového bodu.

Důležité

Pokud používáte certifikát od Microsoftu pro nasazení AKS, nemusíte hodnotu DNS clusteru aktualizovat ručně. Hodnota by se měla nastavit automaticky.

Pokud chcete aktualizovat záznam DNS pro vlastní název domény, postupujte následovně:

  1. Získejte IP adresu koncového bodu bodování z identifikátoru URI bodového bodu, který je obvykle ve formátu http://104.214.29.152:80/api/v1/service/<service-name>/score. V tomto příkladu je IP adresa 104.214.29.152.

  2. Pomocí nástrojů od registrátora názvu domény aktualizujte záznam DNS pro název vaší domény. Záznam mapuje plně kvalifikovaný název domény (například www.contoso.com) na IP adresu. Záznam musí odkazovat na IP adresu bodujícího koncového bodu.

    Tip

    Společnost Microsoft neodpovídá za aktualizaci DNS pro vlastní název NEBO certifikát DNS. Musíte ho aktualizovat u svého registrátora názvu domény.

  3. Po aktualizaci záznamu DNS můžete pomocí příkazu nslookup custom-domain-name ověřit překlad DNS. Pokud je záznam DNS správně aktualizovaný, název vlastní domény bude odkazovat na IP adresu bodujícího koncového bodu.

    Než klienti budou moct přeložit název domény, může to mít zpoždění minut nebo hodin v závislosti na registrátorovi a hodnotě TTL (Time to Live), která je nakonfigurovaná pro název domény.

Další informace o překladu DNS ve službě Azure Machine Learning najdete v tématu Použití pracovního prostoru s vlastním serverem DNS.

Aktualizace certifikátu TLS/SSL

Platnost certifikátů TLS nebo SSL vyprší a je potřeba ji prodloužit. Obvykle k tomu dochází každý rok. Informace v následujících částech slouží k aktualizaci a obnovení certifikátu pro modely nasazené ve službě Azure Kubernetes Service:

Aktualizace vygenerovaného certifikátu Microsoftu

Pokud certifikát původně vygeneroval Microsoft (při použití leaf_domain_label k vytvoření služby), automaticky se v případě potřeby obnoví . Pokud ho chcete obnovit ručně, aktualizujte certifikát jedním z následujících příkladů:

Důležité

  • Pokud je stávající certifikát stále platný, použijte renew=True (SDK) nebo --ssl-renew (CLI) k vynucení obnovení konfigurace. Tato operace bude trvat přibližně 5 hodin.
  • Při původním nasazení leaf_domain_label služby se použije k vytvoření názvu DNS pomocí vzoru <leaf-domain-label>######.<azure-region>.cloudapp.azure.com. Chcete-li zachovat existující název (včetně 6 číslic původně vygenerovaných), použijte původní leaf_domain_label hodnotu. Nezahrnujte 6 číslic, které byly vygenerovány.

Použití sady 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)

Použití rozhraní příkazového řádku

PLATÍ PRO: Rozšíření Azure CLI ml v1

az ml computetarget update aks -g "myresourcegroup" -w "myresourceworkspace" -n "myaks" --ssl-leaf-domain-label "myaks" --ssl-overwrite-domain True --ssl-renew

Další informace najdete v následujících referenčních dokumentech:

Aktualizace vlastního certifikátu

Pokud certifikát původně vygeneroval certifikační autorita, postupujte následovně:

  1. K obnovení certifikátu použijte dokumentaci, kterou poskytuje certifikační autorita. Tento proces vytvoří nové soubory certifikátů.

  2. Pomocí sady SDK nebo rozhraní příkazového řádku aktualizujte službu novým certifikátem:

    Použití sady 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)
    

    Použití rozhraní příkazového řádku

    PLATÍ PRO: Rozšíření Azure CLI ml 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"
    

Další informace najdete v následujících referenčních dokumentech:

Zakázání protokolu TLS

Pokud chcete zakázat protokol TLS pro model nasazený do služby Azure Kubernetes Service, vytvořte pomocí SslConfiguration status="Disabled"a pak proveďte aktualizaci:

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)

Další kroky

Naučte se: