Share via


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 voorloper 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 gebruik maakt van TLS. SSL is gewoon een veelgebruikte term.

Webservices die zijn geïmplementeerd via Azure Machine Learning ondersteunen TLS versie 1.2 voor AKS en ACI. Voor ACI-implementaties raden we u aan 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 de werking van digitale certificaten.

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.

HTTPS stelt de client ook in staat om de echtheid te verifiëren van de server waarmee deze verbinding maakt. Deze functie beschermt clients tegen man-in-the-middle-aanvallen .

Dit is het algemene proces voor het beveiligen van een webservice:

  1. Een domeinnaam ophalen.

  2. Een digitaal certificaat ophalen.

  3. De webservice implementeren of bijwerken met SSL ingeschakeld.

  4. 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 van dit artikel voor meer informatie.

Er zijn kleine verschillen wanneer u verschillende implementatiedoelen beveiligt.

Belangrijk

Sommige Azure CLI-opdrachten in dit artikel maken gebruik van de azure-cli-mlextensie , 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.

Het is raadzaam om vóór 30 september 2025 over te stappen naar de mlextensie , of v2. Zie 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 per registrar. 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) te verkrijgen. De meest voorkomende is om er een aan te schaffen bij een certificeringsinstantie (CA). U hebt de volgende bestanden nodig, ongeacht waar u het certificaat krijgt:

  • Een certificaat. Het certificaat moet de volledige certificaatketen bevatten en moet 'PEM-gecodeerd' zijn.
  • Een sleutel. De sleutel moet ook MET PEM zijn gecodeerd.

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 om de identiteit van de webservice te verifiëren. Als deze adressen niet overeenkomen, krijgt de client een foutbericht.

Tip

Als de certificeringsinstantie het certificaat en de sleutel niet kan opgeven als met 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 uw clienttoepassing 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 een Azure Machine Learning-werkruimte. Tijdens de implementatie van het AKS-model kunt u TLS-beëindiging met het configuratieobject voor implementatie uitschakelen. Anders wordt tls-beëindiging standaard ingeschakeld bij het maken of koppelen van een AKS-cluster voor alle AKS-modelimplementaties.

Voor ACI-implementatie kunt u TLS-beëindiging tijdens de modelimplementatie inschakelen met het implementatieconfiguratieobject.

Implementeren op Azure Kubernetes Service

Notitie

De informatie in deze sectie is ook van toepassing wanneer u een beveiligde webservice voor de ontwerper 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 een 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. Een waarde van 'contoso' maakt bijvoorbeeld een domeinnaam van 'contoso<zes-willekeurig-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 aangeschaft:

    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 gebruikt voor AKS-implementatie, 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:

  1. Haal het IP-adres van het score-eindpunt op uit de score-eindpunt-URI, 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.

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

  3. Nadat de DNS-record is bijgewerkt, kunt u de DNS-omzetting valideren met de opdracht nslookup custom-domain-name . Als de DNS-record correct is bijgewerkt, verwijst de aangepaste domeinnaam naar het IP-adres van het score-eindpunt.

    Er kan een vertraging van minuten of uren zijn 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 voor 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 geldig is, gebruikt renew=True u (SDK) of --ssl-renew (CLI) om af te dwingen dat de configuratie wordt vernieuwd. Het duurt ongeveer 5 uur voordat deze bewerking van kracht wordt.
  • Wanneer de service oorspronkelijk is geïmplementeerd, wordt de leaf_domain_label gebruikt om een DNS-naam te maken met behulp van het patroon <leaf-domain-label>######.<azure-region>.cloudapp.azure.com. Als u de bestaande naam wilt behouden (inclusief de 6 cijfers die oorspronkelijk zijn gegenereerd), gebruikt u de oorspronkelijke leaf_domain_label waarde. 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, gebruikt u de volgende stappen:

  1. Gebruik de documentatie van de certificeringsinstantie om het certificaat te vernieuwen. Met dit proces worden nieuwe certificaatbestanden gemaakt.

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