Een beveiligd online-eindpunt configureren met TLS/SSL
In dit artikel wordt beschreven hoe u een Kubernetes online-eindpunt beveiligt dat is gemaakt via Azure Machine Learning.
U gebruikt HTTPS om de toegang tot online-eindpunten te beperken en de gegevens te beveiligen die clients indienen. HTTPS versleutelt de communicatie tussen een client en een online-eindpunt met behulp van TLS (Transport Layer Security). TLS wordt soms nog steeds Secure Sockets Layer (SSL) genoemd, wat de voorloper van TLS was.
Tip
- Met name kubernetes online eindpunten ondersteunen TLS versie 1.2 voor Azure Kubernetes Service (AKS) en Kubernetes met Azure Arc.
- TLS versie 1.3 voor Azure Machine Learning Kubernetes-deductie wordt niet ondersteund.
TLS en SSL zijn beide afhankelijk van digitale certificaten, die helpen bij versleuteling en identiteitsverificatie. Zie het Wikipedia-onderwerp public_key_infrastructure voor meer informatie over de werking van digitale certificaten.
Waarschuwing
Als u HTTPS niet gebruikt voor uw online-eindpunten, 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 .
Hier volgt het algemene proces voor het beveiligen van een online-eindpunt:
Belangrijk
U moet uw eigen certificaat aanschaffen om een domeinnaam of TLS/SSL-certificaat te verkrijgen en deze vervolgens configureren in de Azure Machine Learning-extensie. Zie de volgende secties van dit artikel voor meer informatie.
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 (zoals www.contoso.com
) toe te wijzen aan het IP-adres dat als host fungeert voor uw online-eindpunt.
Zie de sectie Uw DNS bijwerken met een FQDN van dit artikel voor meer informatie over het verkrijgen van het IP-adres van uw online-eindpunten.
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 te kopen bij een certificeringsinstantie. U hebt de volgende bestanden nodig, ongeacht waar u het certificaat krijgt:
- Een certificaat dat de volledige certificaatketen bevat en pem-gecodeerd is
- Een sleutel met PEM-codering
Notitie
Een SSL-sleutel in een PEM-bestand met wachtwoordzinbeveiliging wordt niet ondersteund.
Wanneer u een certificaat aanvraagt, moet u de FQDN opgeven van het adres dat u wilt gebruiken voor het online-eindpunt (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 het online-eindpunt te verifiëren. Als deze adressen niet overeenkomen, krijgt de client een foutbericht.
Zie de sectie Uw DNS bijwerken met een FQDN van dit artikel voor meer informatie over het configureren van IP-banding met een FQDN .
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/SSL configureren in de Azure Machine Learning-extensie
Voor een Kubernetes online-eindpunt dat is ingesteld op het gebruik van deductie-HTTPS voor beveiligde verbindingen, kunt u TLS-beëindiging inschakelen met configuratie-instellingen voor implementatie wanneer u de Azure Machine Learning-extensie in een Kubernetes-cluster implementeert.
Tijdens de implementatie van de Azure Machine Learning-extensie is False
de allowInsecureConnections
configuratie-instelling standaard. Voor een geslaagde implementatie van de extensie moet u de sslSecret
configuratie-instelling of een combinatie van sslKeyPemFile
en sslCertPemFile
met configuratie beveiligde instellingen opgeven. Anders kunt u instellen allowInsecureConnections=True
dat HTTP wordt ondersteund en TLS-beëindiging wordt uitgeschakeld.
Notitie
Ter ondersteuning van het ONLINE HTTPS-eindpunt allowInsecureConnections
moet worden ingesteld op False
.
Als u een HTTPS-eindpunt wilt inschakelen voor realtime deductie, moet u een MET PEM gecodeerd TLS/SSL-certificaat en -sleutel opgeven. Er zijn twee manieren om het certificaat en de sleutel op te geven tijdens de implementatie voor de Azure Machine Learning-extensie:
- Geef de
sslSecret
configuratie-instelling op. - Geef een combinatie van
sslCertPemFile
enslKeyPemFile
met configuratie beveiligde instellingen op.
sslSecret configureren
De best practice is om het certificaat en de sleutel op te slaan in een Kubernetes-geheim in de azureml
naamruimte.
Als u wilt configureren sslSecret
, moet u een Kubernetes-geheim opslaan in uw Kubernetes-cluster in de azureml
naamruimte om cert.pem (MET PEM gecodeerd TLS/SSL-certificaat) en key.pem (PEM-gecodeerde TLS/SSL-sleutel) op te slaan.
De volgende code is een voorbeeld van een YAML-definitie van een TLS/SSL-geheim:
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
Nadat u het geheim in uw cluster hebt opgeslagen, kunt u de volgende Azure CLI-opdracht gebruiken om op te geven sslSecret
als de naam van dit Kubernetes-geheim. (Deze opdracht werkt alleen als u AKS gebruikt.)
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
SslCertPemFile en sslKeyPemFile configureren
U kunt de sslCertPemFile
configuratie-instelling opgeven als het pad naar het MET PEM gecodeerde TLS/SSL-certificaatbestand en de sslKeyPemFile
configuratie-instelling als het pad naar het MET PEM gecodeerde TLS/SSL-sleutelbestand.
In het volgende voorbeeld ziet u hoe u de Azure CLI gebruikt om PEM-bestanden op te geven voor de Azure Machine Learning-extensie die gebruikmaakt van een TLS/SSL-certificaat dat u hebt aangeschaft. In het voorbeeld wordt ervan uitgegaan dat u AKS gebruikt.
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
Notitie
- Een PEM-bestand met wachtwoordzinbeveiliging wordt niet ondersteund.
- Zowel
sslCertPemFIle
alssslKeyPemFIle
maken gebruik van met configuratie beveiligde parameters. Ze configurerensslSecret
ensslCertPemFile
/sslKeyPemFile
niet tegelijkertijd.
Uw DNS bijwerken met een FQDN
Voor modelimplementatie op een Kubernetes online-eindpunt met een aangepast certificaat moet u uw DNS-record bijwerken zodat deze verwijst naar het IP-adres van het online-eindpunt. De Azure Machine Learning-deductierouterservice (azureml-fe
) biedt dit IP-adres. Zie Beheerde Azure Machine Learning-deductierouter voor meer informatie.azureml-fe
De DNS-record voor uw aangepaste domeinnaam bijwerken:
Haal het IP-adres van het online-eindpunt op uit de score-URI, die meestal de indeling
http://104.214.29.152:80/api/v1/service/<service-name>/score
heeft. In dit voorbeeld is het IP-adres 104.214.29.152.Nadat u uw aangepaste domeinnaam hebt geconfigureerd, vervangt deze het IP-adres in de score-URI. Voor Kubernetes-clusters die worden gebruikt
LoadBalancer
als de deductierouterservice,azureml-fe
wordt extern beschikbaar gemaakt via de load balancer van een cloudprovider en TLS/SSL-beëindiging. Het IP-adres van het Online-eindpunt van Kubernetes is het externe IP-adres van deazureml-fe
service die in het cluster is geïmplementeerd.Als u AKS gebruikt, kunt u het IP-adres ophalen uit de Azure Portal. Ga naar de AKS-resourcepagina, ga naar Service and ingresses en zoek de service azureml-fe onder de naamruimte azuerml . Vervolgens vindt u het IP-adres in de kolom Extern IP-adres .
Daarnaast kunt u de Kubernetes-opdracht
kubectl describe svc azureml-fe -n azureml
uitvoeren in uw cluster om het IP-adres op te halen uit deLoadBalancer Ingress
parameter in de uitvoer.Notitie
Voor Kubernetes-clusters die gebruikmaken
nodePort
van ofclusterIP
als de deductierouterservice, moet u uw eigen oplossing voor taakverdeling en TLS/SSL-beëindiging instellen voorazureml-fe
. U moet ook het IP-adres van deazureml-fe
service in het clusterbereik ophalen.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 online-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 de DNS-omzetting valideren met behulp van de
nslookup custom-domain-name
opdracht . Als de DNS-record correct is bijgewerkt, verwijst de aangepaste domeinnaam naar het IP-adres van het online-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. Normaal gesproken gebeurt dit elk jaar. Gebruik de informatie in de volgende stappen om uw certificaat bij te werken en te vernieuwen voor modellen die zijn geïmplementeerd in Kubernetes (AKS en Kubernetes met Azure Arc):
Gebruik de documentatie van de certificeringsinstantie om het certificaat te vernieuwen. Met dit proces worden nieuwe certificaatbestanden gemaakt.
Werk uw Azure Machine Learning-extensie bij en geef de nieuwe certificaatbestanden op met behulp van de
az k8s-extension update
opdracht .Als u eerder een Kubernetes-geheim hebt gebruikt om TLS/SSL te configureren, moet u eerst het Kubernetes-geheim bijwerken met de nieuwe configuratie cert.pem en key.pem in uw Kubernetes-cluster. Voer vervolgens de opdracht voor het bijwerken van de extensie uit om het certificaat bij te werken:
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
Als u de PEM-bestanden eerder rechtstreeks hebt geconfigureerd in de extensie-implementatieopdracht, moet u de opdracht extensie bijwerken uitvoeren en het pad van het nieuwe PEM-bestand opgeven:
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
TLS uitschakelen
TLS uitschakelen voor een model dat is geïmplementeerd in Kubernetes:
Werk de Azure Machine Learning-extensie bij met
allowInsercureconnection
ingesteld opTrue
.Verwijder de
sslCname
configuratie-instelling, samen met desslSecret
configuratie-instellingen ofsslPem
.Voer de volgende Azure CLI-opdracht uit in uw Kubernetes-cluster en voer vervolgens een update uit. Bij deze opdracht wordt ervan uitgegaan dat u AKS gebruikt.
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
Waarschuwing
De implementatie van de Azure Machine Learning-extensie verwacht standaard configuratie-instellingen voor HTTPS-ondersteuning. Http-ondersteuning wordt alleen aanbevolen voor ontwikkelings- of testdoeleinden. De allowInsecureConnections=True
configuratie-instelling biedt HTTP-ondersteuning.
Volgende stappen
Leer hoe u het volgende doet: