Zabezpieczanie usługi internetowej za pomocą usługi Azure Machine Learning przy użyciu protokołu TLS
DOTYCZY: Zestaw SDK języka Python w wersji 1
W tym artykule przedstawiono sposób zabezpieczania usługi internetowej wdrożonej za pośrednictwem usługi Azure Machine Learning.
Protokół HTTPS służy do ograniczania dostępu do usług internetowych i zabezpieczania przesyłanych danych. Protokół HTTPS pomaga zabezpieczyć komunikację między klientem a usługą internetową, szyfrując komunikację między nimi. Szyfrowanie używa 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
Zestaw SDK usługi Azure Machine Learning używa terminu "SSL" dla właściwości związanych z bezpieczną komunikacją. Nie oznacza to, że usługa internetowa nie używa protokołu TLS. Protokół SSL jest po prostu bardziej powszechnie rozpoznawanym terminem.
W szczególności usługi internetowe wdrożone za pośrednictwem usługi Azure Machine Learning obsługują protokół TLS w wersji 1.2 dla usług AKS i ACI. W przypadku wdrożeń usługi ACI, jeśli korzystasz ze starszej wersji protokołu TLS, zalecamy ponowne wdrożenie, aby uzyskać najnowszą wersję protokołu TLS.
Protokół TLS w wersji 1.3 dla usługi Azure Machine Learning — wnioskowanie usługi AKS nie jest obsługiwane.
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 Wikipedia Infrastruktura klucza publicznego.
Ostrzeżenie
Jeśli nie używasz protokołu HTTPS dla usługi internetowej, 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 .
Oto ogólny proces zabezpieczania usługi internetowej:
Uzyskaj nazwę domeny.
Uzyskaj certyfikat cyfrowy.
Wdróż lub zaktualizuj usługę internetową z włączonym protokołem TLS.
Zaktualizuj usługę DNS tak, aby wskazywała usługę internetową.
Ważne
Jeśli wdrażasz w usłudze Azure Kubernetes Service (AKS), możesz kupić własny certyfikat lub użyć certyfikatu dostarczonego przez firmę Microsoft. Jeśli używasz certyfikatu od firmy Microsoft, nie musisz pobierać nazwy domeny ani certyfikatu TLS/SSL. Aby uzyskać więcej informacji, zobacz sekcję Włączanie protokołu TLS i wdrażanie w tym artykule.
Istnieją niewielkie różnice w przypadku zabezpieczania elementów docelowych wdrożenia.
Ważne
Niektóre polecenia interfejsu wiersza polecenia platformy Azure w tym artykule używają azure-cli-ml
rozszerzenia , lub w wersji 1 dla usługi Azure Machine Learning. Obsługa rozszerzenia w wersji 1 zakończy się 30 września 2025 r. Będzie można zainstalować rozszerzenie v1 i używać go do tej daty.
Zalecamy przejście do ml
rozszerzenia , lub w wersji 2 przed 30 września 2025 r. Aby uzyskać więcej informacji na temat rozszerzenia w wersji 2, zobacz Rozszerzenie interfejsu wiersza polecenia usługi Azure ML i zestaw Python SDK w wersji 2.
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 w pełni kwalifikowanej nazwy domeny (FQDN) (np. www.contoso.com) na adres IP hostujący usługę internetową.
Uzyskiwanie certyfikatu TLS/SSL
Istnieje wiele sposobów uzyskiwania certyfikatu TLS/SSL (certyfikatu cyfrowego). Najczęstszą przyczyną jest zakup jednego z urzędu certyfikacji. Niezależnie od tego, gdzie otrzymujesz certyfikat, potrzebne są następujące pliki:
- Certyfikat. Certyfikat musi zawierać pełny łańcuch certyfikatów i musi być "zakodowany jako PEM".
- Klucz. Klucz musi być również zakodowany w formacie PEM.
Podczas żądania certyfikatu należy podać nazwę FQDN adresu, który ma być używany dla usługi internetowej (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 usługi internetowej. Jeśli te adresy nie są zgodne, klient otrzymuje komunikat o błędzie.
Napiwek
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 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.
Włączanie protokołu TLS i wdrażanie
W przypadku wdrożenia usługi AKS można włączyć kończenie żądań protokołu TLS podczas tworzenia lub dołączania klastra usługi AKS w obszarze roboczym usługi Azure Machine Learning. W czasie wdrażania modelu usługi AKS można wyłączyć zakończenie protokołu TLS z obiektem konfiguracji wdrożenia. W przeciwnym razie wszystkie wdrożenia modelu usługi AKS będą domyślnie miały włączone zakończenie protokołu TLS podczas tworzenia lub dołączania klastra usługi AKS.
W przypadku wdrożenia usługi ACI można włączyć zakończenie protokołu TLS w czasie wdrażania modelu z obiektem konfiguracji wdrożenia.
Wdrażanie w usłudze Azure Kubernetes Service
Uwaga
Informacje przedstawione w tej sekcji mają zastosowanie również podczas wdrażania bezpiecznej usługi internetowej dla projektanta. Jeśli nie znasz zestawu SDK języka Python, zobacz Co to jest zestaw SDK usługi Azure Machine Learning dla języka Python?.
Podczas tworzenia lub dołączania klastra usługi AKS w obszarze roboczym usługi Azure Machine Learning można włączyć zakończenie protokołu TLS za pomocą obiektów konfiguracji AksCompute.provisioning_configuration() i AksCompute.attach_configuration(). Obie metody zwracają obiekt konfiguracji, który ma metodę enable_ssl , i można użyć metody enable_ssl do włączenia protokołu TLS.
Protokół TLS można włączyć za pomocą certyfikatu firmy Microsoft lub niestandardowego certyfikatu zakupionego od urzędu certyfikacji.
W przypadku korzystania z certyfikatu od firmy Microsoft należy użyć parametru leaf_domain_label . Ten parametr generuje nazwę DNS dla usługi. Na przykład wartość "contoso" tworzy nazwę domeny "contoso<six-random-characters>".<azureregion.cloudapp.azure.com>", gdzie <region azureregion> jest regionem zawierającym usługę. Opcjonalnie możesz użyć parametru overwrite_existing_domain , aby zastąpić istniejącą leaf_domain_label. W poniższym przykładzie pokazano, jak utworzyć konfigurację, która umożliwia protokół TLS z certyfikatem firmy Microsoft:
from azureml.core.compute import AksCompute # Config used to create a new AKS cluster and enable TLS provisioning_config = AksCompute.provisioning_configuration() # Leaf domain label generates a name using the formula # "<leaf-domain-label>######.<azure-region>.cloudapp.azure.com" # where "######" is a random series of characters provisioning_config.enable_ssl(leaf_domain_label = "contoso") # Config used to attach an existing AKS cluster to your workspace and enable TLS attach_config = AksCompute.attach_configuration(resource_group = resource_group, cluster_name = cluster_name) # Leaf domain label generates a name using the formula # "<leaf-domain-label>######.<azure-region>.cloudapp.azure.com" # where "######" is a random series of characters attach_config.enable_ssl(leaf_domain_label = "contoso")
Ważne
Jeśli używasz certyfikatu od firmy Microsoft, nie musisz kupować własnego certyfikatu ani nazwy domeny.
W przypadku używania zakupionego certyfikatu niestandardowego należy użyć parametrów ssl_cert_pem_file, ssl_key_pem_file i ssl_cname . Plik PEM z funkcją przekazywania ochrony fraz nie jest obsługiwany. W poniższym przykładzie pokazano, jak za pomocą plików pem utworzyć konfigurację korzystającą z zakupionego certyfikatu TLS/SSL:
from azureml.core.compute import AksCompute # Config used to create a new AKS cluster and enable TLS provisioning_config = AksCompute.provisioning_configuration() provisioning_config.enable_ssl(ssl_cert_pem_file="cert.pem", ssl_key_pem_file="key.pem", ssl_cname="www.contoso.com") # Config used to attach an existing AKS cluster to your workspace and enable SSL attach_config = AksCompute.attach_configuration(resource_group = resource_group, cluster_name = cluster_name) attach_config.enable_ssl(ssl_cert_pem_file="cert.pem", ssl_key_pem_file="key.pem", ssl_cname="www.contoso.com")
Aby uzyskać więcej informacji na temat enable_ssl, zobacz AksProvisioningConfiguration.enable_ssl() i AksAttachConfiguration.enable_ssl().
Wdrażanie w usłudze Azure Container Instances
Podczas wdrażania w usłudze Azure Container Instances należy podać wartości parametrów związanych z protokołem TLS, jak pokazano w poniższym fragmencie kodu:
from azureml.core.webservice import AciWebservice
aci_config = AciWebservice.deploy_configuration(
ssl_enabled=True, ssl_cert_pem_file="cert.pem", ssl_key_pem_file="key.pem", ssl_cname="www.contoso.com")
Aby uzyskać więcej informacji, zobacz AciWebservice.deploy_configuration().
Aktualizowanie systemu DNS
W przypadku wdrożenia usługi AKS z niestandardowym certyfikatem lub wdrożeniem usługi ACI należy zaktualizować rekord DNS, aby wskazywał adres IP punktu końcowego oceniania.
Ważne
Jeśli używasz certyfikatu firmy Microsoft do wdrożenia usługi AKS, nie musisz ręcznie aktualizować wartości DNS dla klastra. Wartość powinna być ustawiana automatycznie.
Aby zaktualizować rekord DNS dla niestandardowej nazwy domeny, możesz wykonać następujące kroki:
Uzyskaj adres IP punktu końcowego oceniania z identyfikatora URI punktu końcowego
http://104.214.29.152:80/api/v1/service/<service-name>/score
oceniania, który jest zwykle w formacie . W tym przykładzie adres IP to 104.214.29.152.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 oceniania.
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 polecenia nslookup custom-domain-name . Jeśli rekord DNS zostanie poprawnie zaktualizowany, nazwa domeny niestandardowej wskaże adres IP punktu końcowego oceniania.
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. Taka sytuacja występuje zwykle co roku. Skorzystaj z informacji w poniższych sekcjach, aby zaktualizować i odnowić certyfikat dla modeli wdrożonych w usłudze Azure Kubernetes Service:
Aktualizowanie certyfikatu wygenerowanego przez firmę Microsoft
Jeśli certyfikat został pierwotnie wygenerowany przez firmę Microsoft (w przypadku używania leaf_domain_label do utworzenia usługi), zostanie on automatycznie odnowiony w razie potrzeby. Jeśli chcesz ręcznie go odnowić, użyj jednego z następujących przykładów, aby zaktualizować certyfikat:
Ważne
- Jeśli istniejący certyfikat jest nadal ważny, użyj
renew=True
(ZESTAWU SDK) lub--ssl-renew
(interfejsu wiersza polecenia), aby wymusić jego odnowienie. Wykonanie tej operacji potrwa około 5 godzin. - Gdy usługa została pierwotnie wdrożona,
leaf_domain_label
jest ona używana do tworzenia nazwy DNS przy użyciu wzorca<leaf-domain-label>######.<azure-region>.cloudapp.azure.com
. Aby zachować istniejącą nazwę (w tym pierwotnie wygenerowane 6 cyfr), użyj oryginalnejleaf_domain_label
wartości. Nie dołączaj 6 cyfr, które zostały wygenerowane.
Korzystanie z zestawu SDK
from azureml.core.compute import AksCompute
from azureml.core.compute.aks import AksUpdateConfiguration
from azureml.core.compute.aks import SslConfiguration
# Get the existing cluster
aks_target = AksCompute(ws, clustername)
# Update the existing certificate by referencing the leaf domain label
ssl_configuration = SslConfiguration(leaf_domain_label="myaks", overwrite_existing_domain=True, renew=True)
update_config = AksUpdateConfiguration(ssl_configuration)
aks_target.update(update_config)
Korzystanie z interfejsu wiersza polecenia
DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 1
az ml computetarget update aks -g "myresourcegroup" -w "myresourceworkspace" -n "myaks" --ssl-leaf-domain-label "myaks" --ssl-overwrite-domain True --ssl-renew
Aby uzyskać więcej informacji, zobacz następujące dokumenty referencyjne:
Aktualizowanie certyfikatu niestandardowego
Jeśli certyfikat został pierwotnie wygenerowany przez urząd certyfikacji, wykonaj następujące kroki:
Użyj dokumentacji dostarczonej przez urząd certyfikacji, aby odnowić certyfikat. Ten proces tworzy nowe pliki certyfikatów.
Użyj zestawu SDK lub interfejsu wiersza polecenia, aby zaktualizować usługę przy użyciu nowego certyfikatu:
Korzystanie z zestawu SDK
from azureml.core.compute import AksCompute from azureml.core.compute.aks import AksUpdateConfiguration from azureml.core.compute.aks import SslConfiguration # Read the certificate file def get_content(file_name): with open(file_name, 'r') as f: return f.read() # Get the existing cluster aks_target = AksCompute(ws, clustername) # Update cluster with custom certificate ssl_configuration = SslConfiguration(cname="myaks", cert=get_content('cert.pem'), key=get_content('key.pem')) update_config = AksUpdateConfiguration(ssl_configuration) aks_target.update(update_config)
Korzystanie z interfejsu wiersza polecenia
DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 1
az ml computetarget update aks -g "myresourcegroup" -w "myresourceworkspace" -n "myaks" --ssl-cname "myaks"--ssl-cert-file "cert.pem" --ssl-key-file "key.pem"
Aby uzyskać więcej informacji, zobacz następujące dokumenty referencyjne:
Wyłączanie protokołu TLS
Aby wyłączyć protokół TLS dla modelu wdrożonego w usłudze Azure Kubernetes Service, utwórz element SslConfiguration
z elementem status="Disabled"
, a następnie wykonaj aktualizację:
from azureml.core.compute import AksCompute
from azureml.core.compute.aks import AksUpdateConfiguration
from azureml.core.compute.aks import SslConfiguration
# Get the existing cluster
aks_target = AksCompute(ws, clustername)
# Disable TLS
ssl_configuration = SslConfiguration(status="Disabled")
update_config = AksUpdateConfiguration(ssl_configuration)
aks_target.update(update_config)
Następne kroki
Instrukcje: