TLS gebruiken om een webservice te beveiligen via Azure Machine Learning
VAN TOEPASSING OP: Python SDK azureml v1
In dit artikel wordt beschreven hoe u een webservice beveiligt die is geïmplementeerd via Azure Machine Learning.
U gebruikt HTTPS om de toegang tot webservices te beperken en de gegevens te beveiligen die clients verzenden. HTTPS helpt de communicatie tussen een client en een webservice te beveiligen door de communicatie tussen de twee te versleutelen. Versleuteling maakt gebruik van Tls (Transport Layer Security). TLS wordt soms nog steeds aangeduid als Secure Sockets Layer (SSL), de voorganger van TLS.
Tip
De Azure Machine Learning SDK gebruikt de term SSL voor eigenschappen die betrekking hebben op beveiligde communicatie. Dit betekent niet dat uw webservice geen tls gebruikt. SSL is slechts een meer gangbare term.
Webservices die zijn geïmplementeerd via Azure Machine Learning ondersteunen TLS-versie 1.2 voor AKS en ACI. Voor ACI-implementaties is het raadzaam om, als u een oudere TLS-versie gebruikt, opnieuw te implementeren om de nieuwste TLS-versie op te halen.
TLS-versie 1.3 voor Azure Machine Learning: AKS-deductie wordt niet ondersteund.
TLS en SSL zijn beide afhankelijk van digitale certificaten, die helpen bij versleuteling en identiteitsverificatie. Zie het Wikipedia-onderwerp Openbare sleutelinfrastructuur voor meer informatie over hoe digitale certificaten werken.
Waarschuwing
Als u https niet gebruikt voor uw webservice, zijn gegevens die naar en van de service worden verzonden mogelijk zichtbaar voor anderen op internet.
Met HTTPS kan de client ook de echtheid controleren van de server waarmee deze verbinding maakt. Met deze functie worden clients beschermd tegen man-in-the-middle-aanvallen .
Dit is het algemene proces voor het beveiligen van een webservice:
Een domeinnaam ophalen.
Een digitaal certificaat ophalen.
De webservice implementeren of bijwerken met SSL ingeschakeld.
Uw DNS bijwerken zodat deze verwijst naar de webservice.
Belangrijk
Als u implementeert in Azure Kubernetes Service (AKS), kunt u uw eigen certificaat kopen of een certificaat gebruiken dat wordt geleverd door Microsoft. Als u een certificaat van Microsoft gebruikt, hoeft u geen domeinnaam of TLS/SSL-certificaat op te halen. Zie de sectie TLS inschakelen en implementeren in dit artikel voor meer informatie.
Er zijn kleine verschillen wanneer u de implementatiedoelen beveiligt.
Belangrijk
Sommige Azure CLI-opdrachten in dit artikel gebruiken de azure-cli-ml
extensie (of v1) voor Azure Machine Learning. Ondersteuning voor de v1-extensie eindigt op 30 september 2025. U kunt de v1-extensie tot die datum installeren en gebruiken.
U wordt aangeraden vóór 30 september 2025 over te stappen op de ml
extensie of v2. Zie de Azure ML CLI-extensie en Python SDK v2 voor meer informatie over de v2-extensie.
Een domeinnaam ophalen
Als u nog geen domeinnaam hebt, koopt u er een bij een domeinnaamregistrar. Het proces en de prijs verschillen tussen registrars. De registrar biedt hulpprogramma's voor het beheren van de domeinnaam. U gebruikt deze hulpprogramma's om een FQDN (Fully Qualified Domain Name) (zoals www.contoso.com) toe te wijzen aan het IP-adres dat als host fungeert voor uw webservice.
Een TLS/SSL-certificaat ophalen
Er zijn veel manieren om een TLS/SSL-certificaat (digitaal certificaat) op te halen. Het meest voorkomende is om er een te kopen bij een certificeringsinstantie (CA). Ongeacht waar u het certificaat krijgt, hebt u de volgende bestanden nodig:
- Een certificaat. Het certificaat moet de volledige certificaatketen bevatten en moet 'PEM-gecodeerd' zijn.
- Een sleutel. De sleutel moet ook PEM-gecodeerd zijn.
Wanneer u een certificaat aanvraagt, moet u de FQDN opgeven van het adres dat u wilt gebruiken voor de webservice (bijvoorbeeld www.contoso.com). Het adres dat in het certificaat is gestempeld en het adres dat de clients gebruiken, worden vergeleken met het verifiëren van de identiteit van de webservice. Als deze adressen niet overeenkomen, krijgt de client een foutbericht.
Tip
Als de certificeringsinstantie het certificaat en de sleutel niet kan opgeven als PEM-gecodeerde bestanden, kunt u een hulpprogramma zoals OpenSSL gebruiken om de indeling te wijzigen.
Waarschuwing
Gebruik zelfondertekende certificaten alleen voor ontwikkeling. Gebruik ze niet in productieomgevingen. Zelfondertekende certificaten kunnen problemen veroorzaken in uw clienttoepassingen. Zie de documentatie voor de netwerkbibliotheken die door uw clienttoepassing worden gebruikt voor meer informatie.
TLS inschakelen en implementeren
Voor AKS-implementatie kunt u TLS-beëindiging inschakelen wanneer u een AKS-cluster maakt of koppelt in de Azure Machine Learning-werkruimte. Tijdens de implementatietijd van het AKS-model kunt u TLS-beëindiging uitschakelen met het implementatieconfiguratieobject, anders wordt voor alle implementaties van het AKS-model standaard TLS-beëindiging ingeschakeld bij het maken of koppelen van het AKS-cluster.
Voor ACI-implementatie kunt u TLS-beëindiging inschakelen tijdens de implementatie van het model met het implementatieconfiguratieobject.
Implementeren in Azure Kubernetes Service
Notitie
De informatie in deze sectie is ook van toepassing wanneer u een beveiligde webservice voor de ontwerpfunctie implementeert. Als u niet bekend bent met het gebruik van de Python SDK, raadpleegt u Wat is de Azure Machine Learning SDK voor Python?
Wanneer u een AKS-cluster maakt of koppelt in de Azure Machine Learning-werkruimte, kunt u TLS-beëindiging inschakelen met AksCompute.provisioning_configuration() en AksCompute.attach_configuration() configuratieobjecten. Beide methoden retourneren een configuratieobject met een enable_ssl methode en u kunt enable_ssl methode gebruiken om TLS in te schakelen.
U kunt TLS inschakelen met een Microsoft-certificaat of een aangepast certificaat dat is gekocht bij de CA.
Wanneer u een certificaat van Microsoft gebruikt, moet u de parameter leaf_domain_label gebruiken. Met deze parameter wordt de DNS-naam voor de service gegenereerd. Met een waarde van 'contoso' wordt bijvoorbeeld een domeinnaam gemaakt van 'contoso<zes willekeurige tekens>'.<azureregion.cloudapp.azure.com>', waarbij <azureregio> de regio is die de service bevat. U kunt eventueel de parameter overwrite_existing_domain gebruiken om de bestaande leaf_domain_label te overschrijven. In het volgende voorbeeld ziet u hoe u een configuratie maakt waarmee een TLS met Microsoft-certificaat wordt ingeschakeld:
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")
Belangrijk
Wanneer u een certificaat van Microsoft gebruikt, hoeft u geen eigen certificaat of domeinnaam aan te schaffen.
Wanneer u een aangepast certificaat gebruikt dat u hebt gekocht, gebruikt u de parameters ssl_cert_pem_file, ssl_key_pem_file en ssl_cname . Het PEM-bestand met wachtwoordzinbeveiliging wordt niet ondersteund. In het volgende voorbeeld ziet u hoe u PEM-bestanden gebruikt om een configuratie te maken die gebruikmaakt van een TLS/SSL-certificaat dat u hebt gekocht:
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")
Zie AksProvisioningConfiguration.enable_ssl() en AksAttachConfiguration.enable_ssl() voor meer informatie over enable_ssl.
Implementeren in Azure Container Instances
Wanneer u implementeert in Azure Container Instances, geeft u waarden op voor TLS-gerelateerde parameters, zoals in het volgende codefragment wordt weergegeven:
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")
Zie AciWebservice.deploy_configuration()voor meer informatie.
Uw DNS bijwerken
Voor een AKS-implementatie met aangepast certificaat of ACI-implementatie moet u uw DNS-record bijwerken zodat deze verwijst naar het IP-adres van het score-eindpunt.
Belangrijk
Wanneer u een certificaat van Microsoft voor AKS-implementatie gebruikt, hoeft u de DNS-waarde voor het cluster niet handmatig bij te werken. De waarde moet automatisch worden ingesteld.
U kunt de volgende stappen volgen om de DNS-record voor uw aangepaste domeinnaam bij te werken:
Haal het IP-adres van het score-eindpunt op uit de eindpunt-URI voor scoren, die meestal de indeling heeft
http://104.214.29.152:80/api/v1/service/<service-name>/score
. In dit voorbeeld is het IP-adres 104.214.29.152.Gebruik de hulpprogramma's van uw domeinnaamregistrar om de DNS-record voor uw domeinnaam bij te werken. De record wijst de FQDN (bijvoorbeeld www.contoso.com) toe aan het IP-adres. De record moet verwijzen naar het IP-adres van het score-eindpunt.
Tip
Microsoft is niet verantwoordelijk voor het bijwerken van de DNS voor uw aangepaste DNS-naam of -certificaat. U moet deze bijwerken met uw domeinnaamregistrar.
Nadat de DNS-record is bijgewerkt, kunt u DNS-omzetting valideren met behulp van de opdracht custom-domain-name van nslookup. Als de DNS-record correct is bijgewerkt, verwijst de aangepaste domeinnaam naar het IP-adres van het score-eindpunt.
Er kan een vertraging zijn van minuten of uren voordat clients de domeinnaam kunnen omzetten, afhankelijk van de registrar en de 'time to live' (TTL) die is geconfigureerd voor de domeinnaam.
Zie Uw werkruimte gebruiken met een aangepaste DNS-server voor meer informatie over DNS-omzetting met Azure Machine Learning.
Het TLS/SSL-certificaat bijwerken
TLS/SSL-certificaten verlopen en moeten worden vernieuwd. Dit gebeurt doorgaans elk jaar. Gebruik de informatie in de volgende secties om uw certificaat bij te werken en te vernieuwen voor modellen die zijn geïmplementeerd in Azure Kubernetes Service:
Een door Microsoft gegenereerd certificaat bijwerken
Als het certificaat oorspronkelijk is gegenereerd door Microsoft (wanneer u de leaf_domain_label gebruikt om de service te maken), wordt het certificaat automatisch vernieuwd wanneer dat nodig is. Als u het certificaat handmatig wilt vernieuwen, gebruikt u een van de volgende voorbeelden om het certificaat bij te werken:
Belangrijk
- Als het bestaande certificaat nog steeds geldig is, gebruikt
renew=True
u (SDK) of--ssl-renew
(CLI) om te forceren dat de configuratie wordt vernieuwd. Het duurt ongeveer 5 uur voordat deze bewerking van kracht wordt. - Wanneer de service oorspronkelijk is geïmplementeerd, wordt deze
leaf_domain_label
gebruikt om een DNS-naam te maken met behulp van het patroon<leaf-domain-label>######.<azure-region>.cloudapp.azure.com
. Gebruik de oorspronkelijkeleaf_domain_label
waarde om de bestaande naam (inclusief de 6 cijfers die oorspronkelijk zijn gegenereerd) te behouden. Neem niet de 6 cijfers op die zijn gegenereerd.
De SDK gebruiken
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)
De CLI gebruiken
VAN TOEPASSING OP: Azure CLI ml-extensie v1
az ml computetarget update aks -g "myresourcegroup" -w "myresourceworkspace" -n "myaks" --ssl-leaf-domain-label "myaks" --ssl-overwrite-domain True --ssl-renew
Zie de volgende referentiedocumenten voor meer informatie:
Aangepast certificaat bijwerken
Als het certificaat oorspronkelijk is gegenereerd door een certificeringsinstantie, voert u de volgende stappen uit:
Gebruik de documentatie van de certificeringsinstantie om het certificaat te vernieuwen. Met dit proces worden nieuwe certificaatbestanden gemaakt.
Gebruik de SDK of CLI om de service bij te werken met het nieuwe certificaat:
De SDK gebruiken
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)
De CLI gebruiken
VAN TOEPASSING OP: Azure CLI ml-extensie 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"
Zie de volgende referentiedocumenten voor meer informatie:
TLS uitschakelen
Als u TLS wilt uitschakelen voor een model dat is geïmplementeerd in Azure Kubernetes Service, maakt u een SslConfiguration
met status="Disabled"
en voert u vervolgens een update uit:
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)
Volgende stappen
Leer hoe u het volgende doet: