Zabezpečení webové služby prostřednictvím služby Azure Machine Learning s využitím protokolu TLS
PLATÍ PRO:Sada 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.
Protokol HTTPS můžete použít k omezení přístupu k webovým službám a zabezpečení dat, která klienti odesílají. HTTPS pomáhá zabezpečit komunikaci mezi klientem a webovou službou tím, že šifruje komunikaci 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í. Neznamená to, že vaše webová služba nepoužívá protokol TLS. SSL je jen běžnější pojem.
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 pro nasazení ACI provést opětovné nasazení, abyste získali nejnovější verzi protokolu TLS.
Tls verze 1.3 pro Azure Machine Learning – Odvozování AKS se nepodporuje.
Protokoly TLS i SSL se spoléhají na digitální certifikáty, které pomáhají s šifrováním a ověřováním identity. Další informace o tom, jak digitální certifikáty fungují, najdete v tématu Infrastruktura veřejných klíčů na Wikipedii.
Upozornění
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 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 Azure Kubernetes Service (AKS), můžete si koupit vlastní certifikát nebo použít certifikát, který vám poskytne 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í v tomto článku.
Při zabezpečení napříč cíli nasazení existují drobné 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 do 30. září 2025. Další informace o rozšíření v2 najdete v tématech Rozšíření Azure ML CLI a Python SDK v2.
Získání názvu domény
Pokud ještě název domény nevlastníte, kupte si ho u registrátora názvů domén. Postup 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 zakoupení od certifikační autority (CA). Bez ohledu na to, kde certifikát získáte, budete potřebovat 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ý PEM.
Při žádosti o 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 v certifikátu vyražená, a adresa, kterou klienti používají, se porovnávají k ověření identity webové služby. Pokud se tyto adresy neshodují, zobrazí se klientovi chybová zpráva.
Tip
Pokud certifikační autorita nemůže poskytnout certifikát a klíč jako soubory s kódováním PEM, můžete formát změnit pomocí nástroje, jako je OpenSSL .
Upozornění
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é vaše klientská aplikace používá.
Povolení protokolu TLS a nasazení
V případě nasazení AKS můžete při vytváření nebo připojování clusteru AKS v pracovním prostoru Azure Machine Learning povolit ukončení protokolu TLS. V době nasazení modelu AKS můžete ukončení protokolu TLS zakázat s objektem konfigurace nasazení, jinak bude mít při vytvoření nebo připojení clusteru AKS ve výchozím nastavení povolené ukončení protokolu TLS.
V případě nasazení ACI můžete v době nasazení modelu povolit ukončení protokolu TLS pomocí objektu konfigurace nasazení.
Nasazení v 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 nejste obeznámeni s používáním sady Python SDK, přečtěte si téma Co je sada Azure Machine Learning SDK pro Python.
Když v pracovním prostoru Azure Machine Learning vytvoříte nebo připojíte cluster AKS, 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 s vlastním certifikátem zakoupeným od certifikační autority.
Pokud používáte certifikát od Microsoftu, musíte použít parametr leaf_domain_label . 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 k přepsání existující leaf_domain_label použít parametr overwrite_existing_domain. Následující příklad ukazuje, jak vytvořit konfiguraci, která povolí protokol 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é
Když 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 pro přístupové fráze není podporován. Následující příklad ukazuje použití souborů .pem k vytvoření konfigurace, která používá zakoupený certifikát TLS/SSL:
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
Při nasazení do Azure Container Instances zadáte hodnoty parametrů souvisejících 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
V případě nasazení AKS s vlastním certifikátem nebo nasazení ACI musíte aktualizovat záznam DNS tak, aby ukazoval na IP adresu bodujícího koncového bodu.
Důležité
Když k nasazení AKS použijete certifikát od Microsoftu, nemusíte hodnotu DNS pro cluster 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 bodujícího koncového bodu z identifikátoru URI bodujícího koncového
http://104.214.29.152:80/api/v1/service/<service-name>/score
bodu, který je obvykle ve formátu . V tomto příkladu je IP adresa 104.214.29.152.K aktualizaci záznamu DNS pro váš název domény použijte nástroje od vašeho registrátora názvů domén. 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
Microsoft nezodppovídá za aktualizaci DNS pro váš vlastní název DNS nebo certifikát. Musíte ho aktualizovat u svého registrátora názvu domény.
Po aktualizaci záznamu DNS můžete překlad DNS ověřit pomocí příkazu nslookup custom-domain-name . Pokud se záznam DNS správně aktualizuje, bude název vlastní domény odkazovat na IP adresu bodujícího koncového bodu.
Než klienti přeloží název domény, může trvat několik minut nebo hodin v závislosti na registrátorovi a hodnotě TTL (Time to Live) 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é do Azure Kubernetes Service:
Aktualizace certifikátu vygenerovaného Microsoftem
Pokud certifikát původně vygeneroval Microsoft (při použití leaf_domain_label k vytvoření služby), v případě potřeby se automaticky prodlouží . Pokud ho chcete obnovit ručně, aktualizujte certifikát pomocí jednoho 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 se projeví přibližně po 5 hodinách. - 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ě původně vygenerovaných 6 číslic), použijte původníleaf_domain_label
hodnotu. Nezahrnujte 6 vygenerovaných číslic.
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ě vygenerovala certifikační autorita, postupujte následovně:
K obnovení certifikátu použijte dokumentaci od certifikační autority. Tento proces vytvoří nové soubory certifikátů.
K aktualizaci služby pomocí nového certifikátu použijte sadu SDK nebo rozhraní příkazového řádku:
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 Azure Kubernetes Service, vytvořte SslConfiguration
pomocí 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: