Konfigurowanie bezpiecznego punktu końcowego online przy użyciu protokołu TLS/SSL
W tym artykule pokazano, jak zabezpieczyć punkt końcowy online platformy Kubernetes utworzony za pomocą usługi Azure Machine Learning.
Protokół HTTPS służy do ograniczania dostępu do punktów końcowych online i zabezpieczania przesyłanych przez klientów danych. 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 nazywany protokołem Secure Sockets Layer (SSL), który był poprzednikiem protokołu TLS.
Napiwek
- W szczególności punkty końcowe online platformy Kubernetes obsługują protokół TLS w wersji 1.2 dla usługi 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.
Oba protokoły TLS 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 Wikipedii 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ą nawiązuje 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:
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 u 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 uzyskiwania certyfikatu TLS/SSL (certyfikatu cyfrowego). Najczęstszym jest zakup jednego z urzędów 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 bandingu adresów IP przy użyciu nazwy FQDN, zobacz sekcję Aktualizowanie systemu DNS przy użyciu nazwy FQDN tego artykułu.
Napiwek
Jeśli urząd certyfikacji nie może podać certyfikatu i klucza jako plików zakodowanych w formacie PEM, możesz użyć narzędzia takiego jak OpenSSL , aby zmienić format.
Ostrzeżenie
Używaj certyfikatów z podpisem własnym tylko do 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żna włączyć zakończenie protokołu 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 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 za pomocą protokołu 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ą islKeyPemFile
.
Konfigurowanie protokołu sslSecret
Najlepszym rozwiązaniem jest zapisanie certyfikatu i klucza w kluczu tajnym azureml
kubernetes w przestrzeni nazw.
Aby skonfigurować sslSecret
usł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 platformy 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 pliku sslCertPemFile i sslKeyPemFile
Ustawienie konfiguracji może sslCertPemFile
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 korzystającego 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 isslKeyPemFIle
używają parametrów chronionych konfiguracją. Nie konfigurująsslSecret
isslCertPemFile
/sslKeyPemFile
jednocześnie.
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-fe
usługi , zobacz Managed Azure Machine Learning inference router (Zarządzany router wnioskowania usługi Azure Machine Learning).
Aby zaktualizować rekord DNS dla niestandardowej nazwy domeny:
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 on adres IP w identyfikatorze URI oceniania. W przypadku klastrów Kubernetes, które używają
LoadBalancer
jako usługi routera wnioskowania,azureml-fe
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 adresazureml-fe
IP usługi wdrożonej w klastrze.Jeśli używasz usługi AKS, możesz uzyskać adres IP z witryny Azure Portal. Przejdź do strony zasobu 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 .
Ponadto możesz uruchomić polecenie
kubectl describe svc azureml-fe -n azureml
Kubernetes w klastrze, aby uzyskać adres IP z parametruLoadBalancer Ingress
w danych wyjściowych.Uwaga
W przypadku klastrów Kubernetes korzystających z
nodePort
usługi routera wnioskowania lubclusterIP
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ługiazureml-fe
. Musisz również uzyskać adresazureml-fe
IP usługi w zakresie klastra.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.Napiwek
Firma Microsoft nie jest odpowiedzialna za aktualizowanie systemu DNS dla niestandardowej nazwy DNS lub certyfikatu. Musisz zaktualizować go za pomocą rejestratora nazw domen.
Po aktualizacji rekordów 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) skonfigurowanego dla nazwy domeny.
Aby uzyskać więcej informacji na temat rozpoznawania nazw DNS w usłudze Azure Machine Learning, zobacz 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 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):
Użyj dokumentacji urzędu certyfikacji, aby odnowić certyfikat. Ten proces tworzy nowe pliki certyfikatów.
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 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 pliki PEM zostały bezpośrednio skonfigurowane w poleceniu wdrażania rozszerzenia przed, 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:
Zaktualizuj rozszerzenie usługi Azure Machine Learning przy użyciu
allowInsercureconnection
True
ustawienia .sslCname
Usuń ustawienie konfiguracji wraz z ustawieniamisslSecret
konfiguracji lubsslPem
.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: