Konfigurieren eines sicheren Onlineendpunkts mit TLS/SSL
In diesem Artikel erfahren Sie, wie Sie einen über Azure Machine Learning erstellten Kubernetes-Onlineendpunkt schützen.
HTTPS wird verwendet, um den Zugriff auf Onlineendpunkte einzuschränken und beim Schützen der von Clients übermittelten Daten zu helfen. HTTPS verschlüsselt die Kommunikation zwischen einem Client und einem Onlineendpunkt mithilfe von Transport Layer Security (TLS). In einigen Fällen wird TLS immer noch als Secure Sockets Layer (SSL) bezeichnet, der Vorgänger von TLS.
Tipp
- Insbesondere unterstützen Kubernetes-Onlineendpunkte TLS-Version 1.2 für Azure Kubernetes Service (AKS) und Kubernetes mit Azure Arc-Unterstützung.
- Die TLS-Version 1.3 für Kubernetes-Rückschlüsse von Azure Machine Learning wird 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-Infrastruktur.
Warnung
Wenn Sie HTTPS nicht für Ihre Onlineendpunkte verwenden, sind ein- und ausgehende Daten des Diensts möglicherweise für andere Benutzer 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.
Der allgemeine Prozess zum Schützen eines Onlineendpunkts sieht wie folgt aus:
Wichtig
Sie müssen ein eigenes Zertifikat erwerben, um einen Domänennamen oder ein TLS/SSL-Zertifikat zu erhalten, und diese dann in der Azure Machine Learning-Erweiterung konfigurieren. Ausführlichere Informationen finden Sie in den folgenden Abschnitten dieses Artikels.
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, um einen FQDN (z. B. www.contoso.com
) der IP-Adresse zuzuordnen, die Ihren Onlineendpunkt hostet.
Weitere Informationen zum Abrufen der IP-Adresse Ihrer Onlineendpunkte finden Sie im Abschnitt Aktualisieren Ihres DNS mit einem FQDN dieses Artikels.
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. Unabhängig davon, wo Sie das Zertifikat abrufen, benötigen Sie die folgenden Dateien:
- Ein Zertifikat, das die vollständige Zertifikatkette enthält und PEM-codiert ist.
- Ein Schlüssel, der PEM-codiert ist
Hinweis
Ein SSL-Schlüssel in einer PEM-Datei mit Passphraseschutz wird nicht unterstützt.
Wenn Sie ein Zertifikat anfordern, müssen Sie den FQDN der Adresse angeben, die Sie für den Onlineendpunkt verwenden möchten (z. B. www.contoso.com
). Die im Zertifikat hinterlegte Adresse und die von den Clients verwendete Adresse werden miteinander verglichen, um die Identität des Onlineendpunkts zu überprüfen. Wenn diese Adressen nicht übereinstimmen, erhält der Client eine Fehlermeldung.
Weitere Informationen zur Verknüpfung der IP-Adresse mit einem FQDN finden Sie im Abschnitt Aktualisieren Ihres DNS mit einem FQDN dieses Artikels.
Tipp
Wenn die Zertifizierungsstelle das Zertifikat und den Schlüssel nicht als PEM-codierte Dateien bereitstellen kann, können Sie ein Tool 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.
Konfigurieren von TLS/SSL in der Azure Machine Learning-Erweiterung
Für einen Kubernetes-Onlineendpunkt, der für die Verwendung von rückschlussbasiertem HTTPS für sichere Verbindungen konfiguriert ist, können Sie beim Bereitstellen der Azure Machine Learning-Erweiterung in einem Kubernetes-Cluster den TLS-Abschluss mit Bereitstellungskonfigurationseinstellungen aktivieren.
Zum Zeitpunkt der Bereitstellung der Azure Machine Learning-Erweiterung lautet die Konfigurationseinstellung allowInsecureConnections
standardmäßig False
. Um eine erfolgreiche Erweiterungsbereitstellung sicherzustellen, müssen Sie entweder die Konfigurationseinstellung sslSecret
oder eine Kombination aus den konfigurationsgeschützten Einstellungen sslKeyPemFile
und sslCertPemFile
angeben. Andernfalls können Sie allowInsecureConnections=True
so festlegen, dass HTTP unterstützt und der TLS-Abschluss deaktiviert wird.
Hinweis
Zur Unterstützung des HTTPS-Onlineendpunkts muss allowInsecureConnections
auf False
festgelegt werden.
Um echtzeitbasierte Rückschlüsse für einen HTTPS-Endpunkt zu ermöglichen, müssen Sie ein PEM-codiertes TLS/SSL-Zertifikat und einen Schlüssel bereitstellen. Es gibt zwei Möglichkeiten, das Zertifikat und den Schlüssel zum Zeitpunkt der Bereitstellung für die Azure Machine Learning-Erweiterung anzugeben:
- Geben Sie die
sslSecret
-Konfigurationseinstellung an. - Legen Sie eine Kombination aus den konfigurationsgeschützten Einstellungen
sslCertPemFile
undslKeyPemFile
fest.
Konfigurieren von „sslSecret“
Es hat sich bewährt, das Zertifikat und den Schlüssel in einem Kubernetes-Geheimnis im azureml
-Namespace zu speichern.
Zum Konfigurieren von sslSecret
müssen Sie ein Kubernetes-Geheimnis in Ihrem Kubernetes-Cluster im Namespace azureml
speichern, um cert.pem (PEM-codiertes TLS/SSL-Zertifikat) und key.pem (PEM-codierter TLS/SSL-Schlüssel) zu speichern.
Der folgende Code ist eine YAML-Beispieldefinition eines TLS/SSL-Geheimnisses:
apiVersion: v1
data:
cert.pem: <PEM-encoded SSL certificate>
key.pem: <PEM-encoded SSL key>
kind: Secret
metadata:
name: <secret name>
namespace: azureml
type: Opaque
Nachdem Sie das Geheimnis in Ihrem Cluster gespeichert haben, können Sie den folgenden Azure CLI-Befehl verwenden, um sslSecret
als Namen dieses Kubernetes-Geheimnisses anzugeben. (Dieser Befehl funktioniert nur, wenn Sie AKS verwenden.)
az k8s-extension create --name <extension-name> --extension-type Microsoft.AzureML.Kubernetes --config inferenceRouterServiceType=LoadBalancer sslSecret=<Kubernetes secret name> sslCname=<ssl cname> --cluster-type managedClusters --cluster-name <your-AKS-cluster-name> --resource-group <your-RG-name> --scope cluster
Konfigurieren von „sslCertPemFile“ und „sslKeyPemFile“
Sie können die Konfigurationseinstellung sslCertPemFile
als Pfad zur PEM-codierten TLS/SSL-Zertifikatdatei und die Konfigurationseinstellung sslKeyPemFile
als Pfad zur PEM-codierten TLS/SSL-Schlüsseldatei angeben.
Das folgende Beispiel zeigt, wie Sie die Azure CLI verwenden, um PEM-Dateien für die Azure Machine Learning-Erweiterung anzugeben, die ein TLS/SSL-Zertifikat verwendet, das Sie erworben haben. Im Beispiel wird davon ausgegangen, dass Sie AKS verwenden.
az k8s-extension create --name <extension-name> --extension-type Microsoft.AzureML.Kubernetes --config enableInference=True inferenceRouterServiceType=LoadBalancer sslCname=<ssl cname> --config-protected sslCertPemFile=<file-path-to-cert-PEM> sslKeyPemFile=<file-path-to-cert-KEY> --cluster-type managedClusters --cluster-name <your-AKS-cluster-name> --resource-group <your-RG-name> --scope cluster
Hinweis
- Eine PEM-Datei mit Passphraseschutz wird nicht unterstützt.
- Sowohl
sslCertPemFIle
als auchsslKeyPemFIle
verwenden konfigurationsgeschützte Parameter. Sie konfigurierensslSecret
undsslCertPemFile
/sslKeyPemFile
nicht gleichzeitig.
Aktualisieren Ihres DNS mit einem FQDN
Für die Modellimplementierung an einem Kubernetes-Onlineendpunkt mit einem benutzerdefinierten Zertifikat müssen Sie Ihren DNS-Eintrag aktualisieren, sodass er auf die IP-Adresse des Onlineendpunkts verweist. Der Azure Machine Learning-Rückschlussrouterdienst (azureml-fe
) stellt diese IP-Adresse bereit. Weitere Informationen zu azureml-fe
finden Sie unter Verwalteter Azure Machine Learning-Rückschlussrouter.
So aktualisieren Sie den DNS-Eintrag für Ihren benutzerdefinierten Domänennamen
Rufen Sie die IP-Adresse des Onlineendpunkts vom Bewertungs-URI ab. Dieser hat in der Regel das Format
http://104.214.29.152:80/api/v1/service/<service-name>/score
. In diesem Beispiel lautet die IP-Adresse 104.214.29.152.Nachdem Sie Ihren benutzerdefinierten Domänennamen konfiguriert haben, ersetzt er die IP-Adresse im Bewertungs-URI. Für Kubernetes-Cluster, die
LoadBalancer
als Rückschlussrouterdienst verwenden, wirdazureml-fe
extern über den Lastenausgleich eines Cloudanbieters und den TLS/SSL-Abschluss verfügbar gemacht. Die IP-Adresse des Kubernetes-Onlineendpunkts ist die externe IP-Adresse des im Cluster bereitgestelltenazureml-fe
-Diensts.Bei Verwendung von AKS können Sie die IP-Adresse über das Azure-Portal ermitteln. Rufen Sie Ihre AKS-Ressourcenseite auf, wechseln Sie zu Dienste und eingehende Elemente, und suchen Sie den Dienst azureml-fe unter dem Namespace azuerml. Anschließend finden Sie die IP-Adresse in der Spalte Externe IP-Adresse.
Darüber hinaus können Sie den Kubernetes-Befehl
kubectl describe svc azureml-fe -n azureml
in Ihrem Cluster ausführen, um die IP-Adresse anhand des ParametersLoadBalancer Ingress
in der Ausgabe zu ermitteln.Hinweis
Für Kubernetes-Cluster, die entweder
nodePort
oderclusterIP
als Rückschlussrouterdienst verwenden, müssen Sie eine eigene Lastenausgleichslösung und einen TLS/SSL-Abschluss fürazureml-fe
einrichten. Sie müssen auch die IP-Adresse des Dienstsazureml-fe
im Clusterbereich abrufen.Verwenden Sie die Tools von Ihrer Domänennamen-Registrierungsstelle, um den DNS-Eintrag für Ihren Domänennamen zu aktualisieren. Der Eintrag ordnet den FQDN (z. B.
www.contoso.com
) der IP-Adresse zu. Der Eintrag muss auf die IP-Adresse des Onlineendpunkts 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.
Nach der Aktualisierung des DNS-Eintrags können Sie die DNS-Auflösung mithilfe des Befehls
nslookup custom-domain-name
überprüfen. Wenn der DNS-Eintrag ordnungsgemäß aktualisiert wurde, verweist der benutzerdefinierte Domänenname auf die IP-Adresse des Onlineendpunkts.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 Schritten, um Ihr Zertifikat für in Kubernetes (AKS und Kubernetes mit Azure Arc-Unterstützung) bereitgestellte Modelle zu aktualisieren und zu verlängern:
Verwenden Sie die Dokumentation von der Zertifizierungsstelle, um das Zertifikat zu erneuern. Bei diesem Vorgang werden neue Zertifikatsdateien erstellt.
Aktualisieren Sie Ihre Azure Machine Learning-Erweiterung, und geben Sie die neuen Zertifikatdateien mithilfe des Befehls
az k8s-extension update
an.Wenn Sie zuvor ein Kubernetes-Geheimnis zur Konfiguration von TLS/SSL verwendet haben, müssen Sie zunächst das Kubernetes-Geheimnis mit der neuen cert.pem- und key.pem-Konfiguration in Ihrem Kubernetes-Cluster aktualisieren. Führen Sie dann den Befehl zum Aktualisieren der Erweiterung aus, um das Zertifikat zu aktualisieren:
az k8s-extension update --name <extension-name> --extension-type Microsoft.AzureML.Kubernetes --config inferenceRouterServiceType=LoadBalancer sslSecret=<Kubernetes secret name> sslCname=<ssl cname> --cluster-type managedClusters --cluster-name <your-AKS-cluster-name> --resource-group <your-RG-name> --scope cluster
Wenn Sie zuvor die PEM-Dateien direkt im Befehl für die Erweiterungsbereitstellung konfiguriert haben, müssen Sie den Erweiterungsaktualisierungsbefehl ausführen und den neuen Pfad der PEM-Datei angeben:
az k8s-extension update --name <extension-name> --extension-type Microsoft.AzureML.Kubernetes --config sslCname=<ssl cname> --config-protected sslCertPemFile=<file-path-to-cert-PEM> sslKeyPemFile=<file-path-to-cert-KEY> --cluster-type managedClusters --cluster-name <your-AKS-cluster-name> --resource-group <your-RG-name> --scope cluster
Deaktivieren von TLS
So deaktivieren Sie TLS für ein in Kubernetes bereitgestelltes Modell
Aktualisieren Sie die Azure Machine Learning-Erweiterung mit
allowInsercureconnection
, das aufTrue
festgelegt ist.Entfernen Sie die Konfigurationseinstellung
sslCname
zusammen mit den KonfigurationseinstellungensslSecret
odersslPem
.Führen Sie den folgenden Azure CLI-Befehl in Ihrem Kubernetes-Cluster aus, und führen Sie dann ein Update durch. Bei diesem Befehl wird davon ausgegangen, dass Sie AKS verwenden.
az k8s-extension update --name <extension-name> --extension-type Microsoft.AzureML.Kubernetes --config enableInference=True inferenceRouterServiceType=LoadBalancer allowInsercureconnection=True --cluster-type managedClusters --cluster-name <your-AKS-cluster-name> --resource-group <your-RG-name> --scope cluster
Warnung
Standardmäßig erwartet die Bereitstellung der Azure Machine Learning-Erweiterung Konfigurationseinstellungen für die HTTPS-Unterstützung. HTTP-Unterstützung wird nur zu Entwicklungs- oder Testzwecken empfohlen. Die Konfigurationseinstellung allowInsecureConnections=True
bietet HTTP-Unterstützung.
Nächste Schritte
In diesem Artikel werden folgende Themen erläutert: