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í:
Získání názvu domény
Získání digitálního certifikátu
Nasazení nebo aktualizace webové služby s povoleným protokolem TLS
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-ml
rozšíř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 ml
rozšíř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ě:
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.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.
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ě:
K obnovení certifikátu použijte dokumentaci, kterou poskytuje certifikační autorita. Tento proces vytvoří nové soubory certifikátů.
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: