Konfigurowanie bezpiecznego punktu końcowego online przy użyciu protokołu TLS/SSL

W tym artykule pokazano, jak zabezpieczyć punkt końcowy online kubernetes utworzony za pomocą usługi Azure Machine Learning.

Za pomocą protokołu HTTPS można ograniczyć dostęp do punktów końcowych online i zabezpieczyć dane przesyłane przez klientów. Protokół HTTPS szyfruje komunikację między klientem a punktem końcowym online przy użyciu protokołu Transport Layer Security (TLS). Protokół TLS jest czasami nadal nazywany protokołem Secure Sockets Layer (SSL), który był poprzednikiem protokołu TLS.

Porada

  • W szczególności punkty końcowe online platformy Kubernetes obsługują protokół TLS w wersji 1.2 dla platformy Azure Kubernetes Service (AKS) i platformy Kubernetes z obsługą usługi Azure Arc.
  • Protokół TLS w wersji 1.3 dla wnioskowania kubernetes usługi Azure Machine Learning nie jest obsługiwany.

Zarówno protokoły TLS, jak i SSL korzystają z certyfikatów cyfrowych, które ułatwiają szyfrowanie i weryfikację tożsamości. Aby uzyskać więcej informacji na temat sposobu działania certyfikatów cyfrowych, zobacz temat Wikipedia public_key_infrastructure.

Ostrzeżenie

Jeśli nie używasz protokołu HTTPS dla punktów końcowych online, dane wysyłane do i z usługi mogą być widoczne dla innych osób w Internecie.

Protokół HTTPS umożliwia również klientowi zweryfikowanie autentyczności serwera, z którą jest nawiązywane połączenie. Ta funkcja chroni klientów przed atakami typu man-in-the-middle .

Poniżej przedstawiono ogólny proces zabezpieczania punktu końcowego online:

  1. Uzyskaj nazwę domeny.

  2. Uzyskaj certyfikat cyfrowy.

  3. Skonfiguruj protokół TLS/SSL w rozszerzeniu usługi Azure Machine Learning.

  4. Zaktualizuj usługę DNS przy użyciu w pełni kwalifikowanej nazwy domeny, aby wskazać punkt końcowy online.

Ważne

Musisz kupić własny certyfikat, aby uzyskać nazwę domeny lub certyfikat TLS/SSL, a następnie skonfigurować go w rozszerzeniu Usługi Azure Machine Learning. Aby uzyskać bardziej szczegółowe informacje, zobacz następujące sekcje tego artykułu.

Uzyskanie nazwy domeny

Jeśli jeszcze nie jesteś właścicielem nazwy domeny, kup go od rejestratora nazw domen. Proces i cena różnią się między rejestratorami. Rejestrator udostępnia narzędzia do zarządzania nazwą domeny. Te narzędzia służą do mapowania nazwy FQDN (na przykład www.contoso.com) na adres IP hostujący punkt końcowy online.

Aby uzyskać więcej informacji na temat uzyskiwania adresu IP punktów końcowych online, zobacz sekcję Aktualizowanie systemu DNS przy użyciu nazwy FQDN tego artykułu.

Uzyskiwanie certyfikatu TLS/SSL

Istnieje wiele sposobów uzyskania certyfikatu TLS/SSL (certyfikatu cyfrowego). Najczęściej jest kupowanie go od urzędu certyfikacji. Niezależnie od tego, gdzie otrzymujesz certyfikat, potrzebne są następujące pliki:

  • Certyfikat, który zawiera pełny łańcuch certyfikatów i jest zakodowany jako PEM
  • Klucz zakodowany w formacie PEM

Uwaga

Klucz SSL w pliku PEM z ochroną hasła nie jest obsługiwany.

Podczas żądania certyfikatu należy podać nazwę FQDN adresu, który ma być używany dla punktu końcowego online (na przykład www.contoso.com). Adres, który jest sygnaturowany do certyfikatu i adres używany przez klientów, są porównywane w celu zweryfikowania tożsamości punktu końcowego online. Jeśli te adresy nie są zgodne, klient otrzymuje komunikat o błędzie.

Aby uzyskać więcej informacji na temat konfigurowania podziału adresów IP przy użyciu nazwy FQDN, zobacz sekcję Aktualizowanie systemu DNS przy użyciu nazwy FQDN tego artykułu.

Porada

Jeśli urząd certyfikacji nie może podać certyfikatu i klucza jako plików zakodowanych za pomocą protokołu PEM, możesz użyć narzędzia takiego jak OpenSSL , aby zmienić format.

Ostrzeżenie

Używaj certyfikatów z podpisem własnym tylko na potrzeby programowania. Nie używaj ich w środowiskach produkcyjnych. Certyfikaty z podpisem własnym mogą powodować problemy w aplikacjach klienckich. Aby uzyskać więcej informacji, zobacz dokumentację bibliotek sieciowych używanych przez aplikację kliencka.

Konfigurowanie protokołu TLS/SSL w rozszerzeniu usługi Azure Machine Learning

W przypadku punktu końcowego online platformy Kubernetes, który ma używać wnioskowania HTTPS na potrzeby bezpiecznych połączeń, możesz włączyć zakończenie szyfrowania TLS z ustawieniami konfiguracji wdrożenia podczas wdrażania rozszerzenia Usługi Azure Machine Learning w klastrze Kubernetes.

W czasie wdrażania rozszerzenia allowInsecureConnections usługi Azure Machine Learning ustawienie konfiguracji jest False domyślnie. Aby zapewnić pomyślne wdrożenie rozszerzenia, należy określić sslSecret ustawienie konfiguracji lub kombinację ustawień chronionych sslKeyPemFile konfiguracją.sslCertPemFile W przeciwnym razie można ustawić opcję allowInsecureConnections=True obsługi protokołu HTTP i wyłączyć kończenie żądań PROTOKOŁU TLS.

Uwaga

Aby obsługiwać punkt końcowy online protokołu HTTPS, allowInsecureConnections należy ustawić wartość False.

Aby włączyć punkt końcowy HTTPS na potrzeby wnioskowania w czasie rzeczywistym, należy podać certyfikat i klucz TLS/SSL zakodowany w protokole PEM. Istnieją dwa sposoby określania certyfikatu i klucza podczas wdrażania rozszerzenia usługi Azure Machine Learning:

  • sslSecret Określ ustawienie konfiguracji.
  • Określ kombinację ustawień chronionych sslCertPemFile konfiguracją i slKeyPemFile .

Konfigurowanie protokołu sslSecret

Najlepszym rozwiązaniem jest zapisanie certyfikatu i klucza w kluczu tajnym kubernetes w azureml przestrzeni nazw.

Aby skonfigurować sslSecretusługę , należy zapisać wpis tajny Kubernetes w klastrze Kubernetes w azureml przestrzeni nazw w celu przechowywania certyfikatu cert.pem (certyfikatu TLS/SSL zakodowanego za pomocą protokołu PEM) i klucza pem (klucz TLS/SSL zakodowany za pomocą protokołu PEM).

Poniższy kod to przykładowa definicja YAML wpisu tajnego TLS/SSL:

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

Po zapisaniu wpisu tajnego w klastrze możesz użyć następującego polecenia interfejsu wiersza polecenia platformy Azure, aby określić sslSecret jako nazwę tego wpisu tajnego kubernetes. (To polecenie będzie działać tylko wtedy, gdy używasz usługi AKS).

   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

Konfigurowanie sslCertPemFile i sslKeyPemFile

Możesz określić sslCertPemFile ustawienie konfiguracji, które ma być ścieżką do pliku certyfikatu TLS/SSL zakodowanego za pomocą protokołu PEM, a sslKeyPemFile ustawienie konfiguracji będzie ścieżką do pliku klucza TLS/SSL zakodowanego za pomocą protokołu PEM.

W poniższym przykładzie pokazano, jak za pomocą interfejsu wiersza polecenia platformy Azure określić pliki PEM do rozszerzenia usługi Azure Machine Learning, które korzysta z zakupionego certyfikatu TLS/SSL. W przykładzie założono, że używasz usługi AKS.

   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

Uwaga

  • Plik PEM z ochroną hasła nie jest obsługiwany.
  • Oba sslCertPemFIle parametry i sslKeyPemFIle używają parametrów chronionych konfiguracją. Nie konfigurują sslSecret i sslCertPemFile/sslKeyPemFile w tym samym czasie.

Aktualizowanie systemu DNS przy użyciu nazwy FQDN

W przypadku wdrażania modelu w punkcie końcowym online platformy Kubernetes z certyfikatem niestandardowym należy zaktualizować rekord DNS, aby wskazywał adres IP punktu końcowego online. Usługa routera wnioskowania usługi Azure Machine Learning (azureml-fe) udostępnia ten adres IP. Aby uzyskać więcej informacji na temat azureml-feusługi , zobacz Managed Azure Machine Learning inference router (Zarządzany router wnioskowania w usłudze Azure Machine Learning).

Aby zaktualizować rekord DNS dla niestandardowej nazwy domeny:

  1. Pobierz adres IP punktu końcowego online z identyfikatora URI oceniania, który jest zwykle w formacie http://104.214.29.152:80/api/v1/service/<service-name>/score. W tym przykładzie adres IP to 104.214.29.152.

    Po skonfigurowaniu niestandardowej nazwy domeny zastępuje ona adres IP w identyfikatorze URI oceniania. W przypadku klastrów Kubernetes używanych LoadBalancer jako usługa azureml-fe routera wnioskowania jest uwidaczniana zewnętrznie za pośrednictwem modułu równoważenia obciążenia dostawcy usług w chmurze i kończenia żądań TLS/SSL. Adres IP punktu końcowego online platformy Kubernetes to zewnętrzny adres azureml-fe IP usługi wdrożonej w klastrze.

    Jeśli używasz usługi AKS, możesz uzyskać adres IP z Azure Portal. Przejdź do strony zasobów usługi AKS, przejdź do pozycji Usługa i ruch przychodzący, a następnie znajdź usługę azureml-fe w przestrzeni nazw azuerml . Następnie możesz znaleźć adres IP w kolumnie Zewnętrzny adres IP .

    Zrzut ekranu przedstawiający dodawanie nowego rozszerzenia do klastra Kubernetes z obsługą usługi Azure Arc z Azure Portal.

    Ponadto możesz uruchomić polecenie kubectl describe svc azureml-fe -n azureml Kubernetes w klastrze, aby uzyskać adres IP z parametru LoadBalancer Ingress w danych wyjściowych.

    Uwaga

    W przypadku klastrów Kubernetes korzystających z nodePort usługi routera wnioskowania lub clusterIP jako usługi routera wnioskowania należy skonfigurować własne rozwiązanie równoważenia obciążenia i zakończenie protokołu TLS/SSL dla usługi azureml-fe. Należy również uzyskać adres azureml-fe IP usługi w zakresie klastra.

  2. Użyj narzędzi rejestratora nazw domen, aby zaktualizować rekord DNS dla nazwy domeny. Rekord mapuje nazwę FQDN (na przykład www.contoso.com) na adres IP. Rekord musi wskazywać adres IP punktu końcowego online.

    Porada

    Firma Microsoft nie jest odpowiedzialna za aktualizowanie systemu DNS dla niestandardowej nazwy DNS lub certyfikatu. Należy zaktualizować go u rejestratora nazw domen.

  3. Po aktualizacji rekordu DNS można zweryfikować rozpoznawanie nazw DNS przy użyciu nslookup custom-domain-name polecenia . Jeśli rekord DNS zostanie poprawnie zaktualizowany, nazwa domeny niestandardowej wskaże adres IP punktu końcowego online.

    Może wystąpić opóźnienie minut lub godzin, zanim klienci będą mogli rozpoznać nazwę domeny, w zależności od rejestratora i czasu wygaśnięcia (TTL), który jest skonfigurowany dla nazwy domeny.

Aby uzyskać więcej informacji na temat rozpoznawania nazw DNS w usłudze Azure Machine Learning, zobacz How to use your workspace with a custom DNS server (Jak używać obszaru roboczego z niestandardowym serwerem DNS).

Aktualizowanie certyfikatu TLS/SSL

Certyfikaty TLS/SSL wygasają i muszą być odnawiane. Zazwyczaj dzieje się to co roku. Skorzystaj z informacji opisanych w poniższych krokach, aby zaktualizować i odnowić certyfikat dla modeli wdrożonych na platformie Kubernetes (AKS i Kubernetes z obsługą usługi Azure Arc):

  1. Skorzystaj z dokumentacji urzędu certyfikacji, aby odnowić certyfikat. Ten proces tworzy nowe pliki certyfikatów.

  2. Zaktualizuj rozszerzenie usługi Azure Machine Learning i określ nowe pliki certyfikatów przy użyciu az k8s-extension update polecenia .

    Jeśli wcześniej użyto wpisu tajnego platformy Kubernetes do skonfigurowania protokołu TLS/SSL, musisz najpierw zaktualizować wpis tajny Kubernetes przy użyciu nowej konfiguracji cert.pem i key.pem w klastrze Kubernetes. Następnie uruchom polecenie aktualizacji rozszerzenia, aby zaktualizować certyfikat:

       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
    

    Jeśli wcześniej skonfigurowano pliki PEM w poleceniu wdrażania rozszerzenia, należy uruchomić polecenie aktualizacji rozszerzenia i określić ścieżkę nowego pliku PEM:

       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
    

Wyłączanie protokołu TLS

Aby wyłączyć protokół TLS dla modelu wdrożonego na platformie Kubernetes:

  1. Zaktualizuj rozszerzenie usługi Azure Machine Learning z ustawioną wartością allowInsercureconnectionTrue.

  2. sslCname Usuń ustawienie konfiguracji wraz z ustawieniami sslSecret konfiguracji lubsslPem.

  3. Uruchom następujące polecenie interfejsu wiersza polecenia platformy Azure w klastrze Kubernetes, a następnie wykonaj aktualizację. To polecenie zakłada, że używasz usługi AKS.

       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
    

Ostrzeżenie

Domyślnie wdrożenie rozszerzenia usługi Azure Machine Learning oczekuje ustawień konfiguracji dla obsługi protokołu HTTPS. Zalecamy obsługę protokołu HTTP tylko w celach programistycznych lub testowych. Ustawienie allowInsecureConnections=True konfiguracji zapewnia obsługę protokołu HTTP.

Następne kroki

Instrukcje: