Verwenden von TLS zum Absichern eines Webdiensts mit Azure Machine Learning

GILT FÜR:Python SDK azureml v1

In diesem Artikel erfahren Sie, wie Sie einen über Azure Machine Learning bereitgestellten Webdienst schützen.

Verwenden Sie HTTPS, um den Zugriff auf Webdienste zu beschränken und Daten zu sichern, die Clients übermitteln. Mit HTTPS wird die Kommunikation zwischen einem Client und einem Webdienst geschützt, indem sie verschlüsselt wird. Die Verschlüsselung verwendet Transport Layer Security (TLS). In einigen Fällen wird TLS immer noch als Secure Sockets Layer (SSL) bezeichnet, der Vorgänger von TLS.

Tipp

Im Azure Machine Learning SDK wird der Begriff „SSL“ für Eigenschaften im Zusammenhang mit sicherer Kommunikation verwendet. Dies bedeutet nicht, dass Ihr Webdienst TLS nicht verwendet. SSL ist nur ein gebräuchlicherer Begriff.

Insbesondere unterstützen über Azure Machine Learning bereitgestellte Webdienste die TLS-Version 1.2 für AKS und ACI. Wenn Sie mit ACI-Bereitstellungen arbeiten oder eine ältere TLS-Version verwenden, empfiehlt sich eine erneute Bereitstellung, um die neueste TLS-Version zu erhalten.

Die TLS-Version 1.3 für AKS-Rückschlüsse über Azure Machine Learning werden nicht unterstützt.

Sowohl TLS als auch SSL beruhen auf digitalen Zertifikaten, die zur Verschlüsselung und Identitätsüberprüfung verwendet werden. Weitere Informationen zur Funktionsweise digitaler Zertifikate finden Sie im Wikipedia-Thema Public key infrastructure (Public-Key-Infrastruktur).

Warnung

Wenn Sie HTTPS nicht für Ihren Webdienst verwenden, sind vom Dienst an andere Benutzer und zurück gesendete Daten möglicherweise im Internet sichtbar.

HTTPS ermöglicht dem Client auch, die Authentizität des Servers, mit dem eine Verbindung hergestellt wird, zu überprüfen. Dieses Feature schützt Clients vor Man-in-the-Middle-Angriffen.

Dies ist der allgemeine Prozess zum Sichern eines Webdiensts:

  1. Rufen Sie einen Domänennamen ab.

  2. Rufen Sie ein digitales Zertifikat ab.

  3. Stellen Sie den Webdienst mit aktiviertem TLS bereit oder aktualisieren Sie ihn.

  4. Aktualisieren Sie Ihren DNS, so dass er auf den Dienst verweist.

Wichtig

Wenn Sie für Azure Kubernetes Service (AKS) bereitstellen, können Sie Ihr eigenes Zertifikat erwerben oder ein von Microsoft bereitgestelltes Zertifikat verwenden. Wenn Sie ein Zertifikat von Microsoft verwenden, müssen Sie weder einen Domänennamen noch ein TLS/SSL-Zertifikat abrufen. Weitere Informationen finden Sie im Abschnitt Aktivieren und Bereitstellen von TLS dieses Artikels.

Es bestehen bei den verschiedenen Bereitstellungszielen geringfügige Unterschiede beim Schützen.

Wichtig

Einige Azure CLI-Befehle in diesem Artikel verwenden die Erweiterung azure-cli-ml oder v1 für Azure Machine Learning. Der Support für die v1-Erweiterung endet am 30. September 2025. Sie können die v1-Erweiterung bis zu diesem Datum installieren und verwenden.

Es wird empfohlen, vor dem 30. September 2025 zur ml- oder v2-Erweiterung zu wechseln. Weitere Informationen zur v2-Erweiterung finden Sie unter Was sind die Azure Machine Learning CLI und das Python SDK v2?.

Abrufen eines Domänennamens

Wenn Sie nicht bereits über einen Domänennamen verfügen, können Sie einen solchen von einer Domänennamen-Registrierungsstelle erwerben. Die Prozesse und Preise der Registrierungsstellen sind unterschiedlich. Die Registrierungsstelle bietet Tools zum Verwalten des Domänennamens. Sie verwenden diese Tools zum Zuordnen eines vollqualifizierten Domänennamens (Fully Qualified Domain Name, FQDN) – z. B. www.contoso.com – zu der IP-Adresse, die Ihren Webdienst hostet.

Abrufen eines TLS/SSL-Zertifikats

Es gibt viele Möglichkeiten, ein TLS/SSL-Zertifikat (digitales Zertifikat) zu erhalten. Die verbreitetste Methode ist der Erwerb eines Zertifikats von einer Zertifizierungsstelle (Certificate Authority, CA). Unabhängig davon, wo Sie das Zertifikat abrufen, benötigen Sie die folgenden Dateien:

  • Ein Zertifikat. Das Zertifikat muss die vollständige Zertifikatkette enthalten und „PEM-codiert“ sein.
  • Einen Schlüssel. Der Schlüssel muss auch PEM-codiert sein.

Wenn Sie ein Zertifikat anfordern, müssen Sie den FQDN der Adresse angeben, die Sie für den Webdienst verwenden möchten (z. B. www.contoso.com). Die in das Zertifikat gestempelte Adresse und die von den Clients verwendete Adresse werden verglichen, um die Identität des Webdiensts zu überprüfen. Wenn diese Adressen nicht übereinstimmen, erhält der Client eine Fehlermeldung.

Tipp

Wenn die Zertifizierungsstelle das Zertifikat und den Schlüssel nicht als PEM-codierte Dateien bereitstellen kann, können Sie ein Hilfsprogramm wie OpenSSL zum Ändern des Formats verwenden.

Warnung

Verwenden Sie selbstsignierte Zertifikate nur für die Entwicklung. Verwenden Sie sie nicht in Produktionsumgebungen. Selbstsignierte Zertifikate können Probleme in Ihren Clientanwendungen verursachen. Weitere Informationen finden Sie in der Dokumentation für die Netzwerkbibliotheken, die Ihre Clientanwendung verwendet.

Aktivieren und Bereitstellen von TLS

Sie können bei einer AKS-Bereitstellung den TLS-Abschluss aktivieren, wenn Sie im Azure Machine Learning-Arbeitsbereich einen AKS-Cluster erstellen oder anfügen. Zum Zeitpunkt der AKS-Modellimplementierung können Sie den TLS-Abschluss mit dem Konfigurationsobjekt der Bereitstellung deaktivieren. Andernfalls wird der TLS-Abschluss bei allen AKS-Modellimplementierungen standardmäßig beim Erstellen oder Anfügen des AKS-Clusters aktiviert.

Für die ACI-Bereitstellung können Sie den TLS-Abschluss bei der Modellimplementierung mit dem Konfigurationsobjekt der Bereitstellung aktivieren.

Bereitstellen auf Azure Kubernetes Service

Hinweis

Die Informationen in diesem Abschnitt gelten auch, wenn ein sicherer Webdienst für den Designer bereitgestellt wird. Wenn Sie das Python SDK bisher noch nicht verwendet haben, sollten Sie Was ist das Azure Machine Learning-SDK für Python? lesen.

Wenn Sie in einem Azure Machine Learning-Arbeitsbereich einen AKS-Cluster erstellen oder anfügen, können Sie den TLS-Abschluss mit den Konfigurationsobjekten AksCompute.provisioning_configuration() und AksCompute.attach_configuration() aktivieren. Bei beiden Methoden wird ein Konfigurationsobjekt zurückgegeben, das über eine enable_ssl-Methode verfügt. Mit dieser enable_ssl-Methode können Sie TLS aktivieren.

Sie können TLS mit einem Microsoft-Zertifikat oder einem von der Zertifizierungsstelle erworbenen benutzerdefinierten Zertifikat aktivieren.

  • Wenn Sie ein Zertifikat von Microsoft verwenden, müssen Sie den leaf_domain_label-Parameter verwenden. Dieser Parameter generiert den DNS-Namen für den Dienst. Der Wert „contoso“ erstellt z. B. den Domänennamen „contoso<sechs zufällige Zeichen>.<azureregion>.cloudapp.azure.com“, wobei <azureregion> die Region ist, die den Dienst enthält. Optional können Sie den overwrite_existing_domain-Parameter zum Überschreiben des vorhandenen leaf_domain_label verwenden. Im folgenden Beispiel wird das Erstellen einer Konfiguration veranschaulicht, die TLS mit einem Zertifikat von Microsoft aktiviert:

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

    Wichtig

    Wenn Sie ein Zertifikat von Microsoft verwenden, müssen Sie nicht Ihr eigenes Zertifikat oder Ihren eigenen Domänennamen erwerben.

  • Wenn Sie ein benutzerdefiniertes Zertifikat verwenden, das Sie erworben haben, verwenden Sie die Parameter ssl_cert_pem_file, ssl_key_pem_file und ssl_cname. Die PEM-Datei mit Passphrase-Schutz wird nicht unterstützt. Im folgenden Beispiel wird veranschaulicht, wie PEM-Dateien zum Erstellen einer Konfiguration verwendet werden, die ein von Ihnen erworbenes TLS/SSL-Zertifikat verwendet:

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

Weitere Informationen zu enable_ssl finden Sie unter AksProvisioningConfiguration.enable_ssl() und AksAttachConfiguration.enable_ssl().

Bereitstellen in Azure Container Instances

Wenn Sie in Azure Container Instances bereitstellen möchten, geben Sie Werte für die TLS-Parameter an, wie im folgenden Codeausschnitt gezeigt:

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

Weitere Informationen finden Sie unter AciWebservice.deploy_configuration().

Aktualisieren Ihres DNS

Bei einer AKS-Bereitstellung mit einem benutzerdefinierten Zertifikat oder bei einer ACI-Bereitstellung müssen Sie Ihren DNS-Eintrag so aktualisieren, dass er auf die IP-Adresse des Bewertungsendpunkts verweist.

Wichtig

Wenn Sie ein Zertifikat von Microsoft für die AKS-Bereitstellung verwenden, müssen Sie den DNS-Wert für den Cluster nicht manuell aktualisieren. Der Wert sollte automatisch festgelegt werden.

Sie können die folgenden Schritte ausführen, um den DNS-Eintrag für Ihren benutzerdefinierten Domänennamen zu aktualisieren:

  1. Sie finden die IP-Adresse des Bewertungsendpunkts im Bewertungsendpunkt-URI, der normalerweise das Format http://104.214.29.152:80/api/v1/service/<service-name>/score aufweist. In diesem Beispiel lautet die IP-Adresse 104.214.29.152.

  2. Verwenden Sie die Tools von Ihrer Domänennamen-Registrierungsstelle, um den DNS-Eintrag für Ihren Domänennamen zu aktualisieren. Der Datensatz ordnet den FQDN (z. B. www.contoso.com) der IP-Adresse zu. Der Eintrag muss auf die IP-Adresse des Bewertungsendpunkts verweisen.

    Tipp

    Microsoft ist nicht für die Aktualisierung des DNS für Ihren benutzerdefinierten DNS-Namen oder Ihr Zertifikat verantwortlich. Sie müssen es mit Ihrer Domänennamenregistrierungsstelle aktualisieren.

  3. Nach dem Aktualisieren des DNS-Eintrags können Sie die DNS-Auflösung mit dem Befehl nslookup custom-domain-name überprüfen. Wenn der DNS-Eintrag ordnungsgemäß aktualisiert wurde, verweist der benutzerdefinierte Domänenname auf die IP-Adresse des Bewertungsendpunkts.

    Abhängig von der Registrierungsstelle und dem TTL-Wert (Time-to-Live), der für den Domänennamen konfiguriert ist, kann es einige Minuten bis mehrere Stunden dauern, bevor Clients den Domänennamen auflösen können.

Weitere Informationen zur DNS-Auflösung mit Azure Machine Learning finden Sie unter Verwenden Ihres Arbeitsbereichs mit einem benutzerdefinierten DNS-Server.

Aktualisieren des TSL/SSL-Zertifikats

TLS/SSL-Zertifikate laufen ab und müssen erneuert werden. In der Regel erfolgt dies jedes Jahr. Verwenden Sie die Informationen in den folgenden Abschnitten, um das Zertifikat für in Azure Kubernetes Service bereitgestellte Modelle zu aktualisieren und zu erneuern:

Aktualisieren eines von Microsoft generierten Zertifikats

Wenn das Zertifikat ursprünglich von Microsoft generiert wurde (bei Verwendung von leaf_domain_label zum Erstellen des Diensts), wird es bei Bedarf automatisch verlängert. Wenn Sie die Datei manuell verlängern möchten, verwenden Sie eines der folgenden Beispiele, um das Zertifikat zu aktualisieren:

Wichtig

  • Wenn das vorhandene Zertifikat noch gültig ist, verwenden Sie renew=True (SDK) oder --ssl-renew (CLI), um die Konfiguration für die Erneuerung zu erzwingen. Es dauert etwa 5 Stunden, bis dieser Vorgang wirksam wird.
  • Bei der ursprünglichen Bereitstellung des Diensts wurde leaf_domain_label zum Erstellen eines DNS-Namens nach dem Muster <leaf-domain-label>######.<azure-region>.cloudapp.azure.com verwendet. Verwenden Sie den ursprünglichen Wert für leaf_domain_label, um den vorhandenen Namen (einschließlich der ursprünglich generierten 6 Ziffern) beizubehalten. Geben Sie die generierten 6 Ziffern nicht an.

Verwenden des 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)

Verwenden der Befehlszeilenschnittstelle

GILT FÜR:Azure CLI-ML-Erweiterung v1

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

Weitere Informationen finden Sie in den folgenden Referenzen:

Aktualisieren eines benutzerdefinierten Zertifikats

Wenn das Zertifikat ursprünglich von einer Zertifizierungsstelle generiert wurde, gehen Sie wie folgt vor:

  1. Verwenden Sie die von der Zertifizierungsstelle bereitgestellte Dokumentation, um das Zertifikat zu erneuern. Bei diesem Vorgang werden neue Zertifikatsdateien erstellt.

  2. Aktualisieren Sie den Dienst mithilfe des SDK oder über die Befehlszeilenschnittstelle mit dem neuen Zertifikat:

    Verwenden des 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)
    

    Verwenden der Befehlszeilenschnittstelle

    GILT FÜR:Azure CLI-ML-Erweiterung 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"
    

Weitere Informationen finden Sie in den folgenden Referenzen:

Deaktivieren von TLS

Erstellen Sie zum Deaktivieren von TLS für ein in Azure Kubernetes Service bereitgestelltes Modell ein SslConfiguration-Element mit status="Disabled", und führen Sie dann die Aktualisierung aus:

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)

Nächste Schritte

In diesem Artikel werden folgende Themen erläutert: