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:

  1. Registreer een domeinnaam.

  2. Verkrijg een digitaal certificaat.

  3. Configureer TLS/SSL in de Azure Machine Learning-extensie.

  4. Werk uw DNS bij met een FQDN (Fully Qualified Domain Name) zodat deze verwijst naar het 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 en slKeyPemFile 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 als sslKeyPemFIle maken gebruik van met configuratie beveiligde parameters. Ze configureren sslSecret en sslCertPemFile/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:

  1. 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>/scoreheeft. 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 de azureml-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 .

    Schermopname van het toevoegen van een nieuwe extensie aan het Kubernetes-cluster met Azure Arc vanuit de Azure Portal.

    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 de LoadBalancer Ingress parameter in de uitvoer.

    Notitie

    Voor Kubernetes-clusters die gebruikmaken nodePort van of clusterIP als de deductierouterservice, moet u uw eigen oplossing voor taakverdeling en TLS/SSL-beëindiging instellen voor azureml-fe. U moet ook het IP-adres van de azureml-fe service in het clusterbereik ophalen.

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

  3. 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):

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

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

  1. Werk de Azure Machine Learning-extensie bij met allowInsercureconnection ingesteld op True.

  2. Verwijder de sslCname configuratie-instelling, samen met de sslSecret configuratie-instellingen of sslPem .

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