Zabezpieczanie usługi internetowej za pomocą usługi Azure Machine Learning przy użyciu protokołu TLSUse TLS to secure a web service through Azure Machine Learning

W tym artykule opisano sposób zabezpieczania usługi sieci Web, która jest wdrażana za pomocą Azure Machine Learning.This article shows you how to secure a web service that's deployed through Azure Machine Learning.

Używasz protokołu HTTPS , aby ograniczyć dostęp do usług sieci Web i zabezpieczyć dane przesyłane przez klientów.You use HTTPS to restrict access to web services and secure the data that clients submit. Protokół HTTPS pomaga w zabezpieczeniu komunikacji między klientem a usługą sieci Web przez szyfrowanie komunikacji między nimi.HTTPS helps secure communications between a client and a web service by encrypting communications between the two. Szyfrowanie używa Transport Layer Security (TLS).Encryption uses Transport Layer Security (TLS). Protokół TLS jest czasami nazywany Secure Sockets Layer (SSL), który był POPRZEDNIKIEM protokołu TLS.TLS is sometimes still referred to as Secure Sockets Layer (SSL), which was the predecessor of TLS.

Porada

Zestaw Azure Machine Learning SDK używa terminu "SSL" dla właściwości, które są związane z bezpieczną komunikacją.The Azure Machine Learning SDK uses the term "SSL" for properties that are related to secure communications. Nie oznacza to, że usługa sieci Web nie korzysta z protokołu TLS.This doesn't mean that your web service doesn't use TLS. Protokół SSL jest zaledwie częściej uznawany za okres.SSL is just a more commonly recognized term.

Usługi sieci Web wdrożone za pomocą Azure Machine Learning obsługują protokół TLS w wersji 1,2 dla AKS i ACI.Specifically, web services deployed through Azure Machine Learning support TLS version 1.2 for AKS and ACI. W przypadku wdrożeń ACI, jeśli używasz starszej wersji protokołu TLS, zalecamy ponowne wdrożenie w celu uzyskania najnowszej wersji protokołu TLS.For ACI deployments, if you are on older TLS version, we recommend re-deploying to get the latest TLS version.

Protokół TLS w wersji 1,3 dla Azure Machine Learning AKS nie jest obsługiwany.TLS version 1.3 for Azure Machine Learning - AKS Inference is unsupported.

Protokoły TLS i SSL są zależne od certyfikatów cyfrowych, które pomagają w szyfrowaniu i weryfikacji tożsamości.TLS and SSL both rely on digital certificates, which help with encryption and identity verification. Aby uzyskać więcej informacji na temat sposobu działania certyfikatów cyfrowych, zobacz temat infrastruktura kluczy publicznychtematu witryny Wikipedia.For more information on how digital certificates work, see the Wikipedia topic Public key infrastructure.

Ostrzeżenie

Jeśli nie używasz protokołu HTTPS dla usługi sieci Web, dane wysyłane do i z usługi mogą być widoczne dla innych osób w Internecie.If you don't use HTTPS for your web service, data that's sent to and from the service might be visible to others on the internet.

Protokół HTTPS umożliwia również klientowi zweryfikowanie autentyczności serwera, z którym jest nawiązywane połączenie.HTTPS also enables the client to verify the authenticity of the server that it's connecting to. Ta funkcja chroni klientów przed atakami typu man-in-the-Middle .This feature protects clients against man-in-the-middle attacks.

Jest to ogólny proces zabezpieczania usługi sieci Web:This is the general process to secure a web service:

  1. Pobierz nazwę domeny.Get a domain name.

  2. Pobierz certyfikat cyfrowy.Get a digital certificate.

  3. Wdróż lub zaktualizuj usługę sieci Web z włączonym protokołem TLS.Deploy or update the web service with TLS enabled.

  4. Zaktualizuj system DNS w taki sposób, aby wskazywał usługę sieci Web.Update your DNS to point to the web service.

Ważne

W przypadku wdrażania w usłudze Azure Kubernetes Service (AKS) można zakupić własny certyfikat lub użyć certyfikatu dostarczonego przez firmę Microsoft.If you're deploying to Azure Kubernetes Service (AKS), you can purchase your own certificate or use a certificate that's provided by Microsoft. Jeśli używasz certyfikatu od firmy Microsoft, nie musisz uzyskać nazwy domeny ani certyfikatu TLS/SSL.If you use a certificate from Microsoft, you don't need to get a domain name or TLS/SSL certificate. Aby uzyskać więcej informacji, zobacz sekcję Włączanie protokołów TLS i Deploy w tym artykule.For more information, see the Enable TLS and deploy section of this article.

Istnieją niewielkie różnice w przypadku zabezpieczania serwerów docelowych w ramach wdrożenia.There are slight differences when you secure s across deployment targets.

Uzyskanie nazwy domenyGet a domain name

Jeśli nie masz jeszcze nazwy domeny, Kup ją w rejestratorze nazw domen.If you don't already own a domain name, purchase one from a domain name registrar. Proces i cena różnią się między Rejestratorami.The process and price differ among registrars. Rejestrator udostępnia narzędzia do zarządzania nazwą domeny.The registrar provides tools to manage the domain name. Te narzędzia służą do mapowania w pełni kwalifikowanej nazwy domeny (FQDN) (takiej jak www . contoso.com) na adres IP, który hostuje usługę sieci Web.You use these tools to map a fully qualified domain name (FQDN) (such as www.contoso.com) to the IP address that hosts your web service.

Uzyskiwanie certyfikatu TLS/SSLGet a TLS/SSL certificate

Istnieje wiele sposobów uzyskiwania certyfikatu TLS/SSL (certyfikat cyfrowy).There are many ways to get an TLS/SSL certificate (digital certificate). Najbardziej powszechnym celem jest zakupienie jednego z urzędów certyfikacji (CA).The most common is to purchase one from a certificate authority (CA). Bez względu na to, gdzie otrzymujesz certyfikat, potrzebne są następujące pliki:Regardless of where you get the certificate, you need the following files:

  • Certyfikat.A certificate. Certyfikat musi zawierać pełny łańcuch certyfikatów i musi być "zakodowany przez PEM".The certificate must contain the full certificate chain, and it must be "PEM-encoded."
  • Klucz.A key. Klucz musi być również zakodowany przez PEM.The key must also be PEM-encoded.

Żądając certyfikatu, należy podać nazwę FQDN adresu, który ma być używany przez usługę sieci Web (na przykład www . contoso.com).When you request a certificate, you must provide the FQDN of the address that you plan to use for the web service (for example, www.contoso.com). Adres, który jest umieszczony w certyfikacie i adres używany przez klientów, jest porównywany w celu zweryfikowania tożsamości usługi sieci Web.The address that's stamped into the certificate and the address that the clients use are compared to verify the identity of the web service. Jeśli te adresy nie są zgodne, klient otrzymuje komunikat o błędzie.If those addresses don't match, the client gets an error message.

Porada

Jeśli urząd certyfikacji nie może dostarczyć certyfikatu i klucza jako plików zakodowanych przez PEM, można użyć narzędzia, takiego jak OpenSSL , aby zmienić format.If the certificate authority can't provide the certificate and key as PEM-encoded files, you can use a utility such as OpenSSL to change the format.

Ostrzeżenie

Używaj certyfikatów z podpisem własnym tylko do celów deweloperskich.Use self-signed certificates only for development. Nie używaj ich w środowiskach produkcyjnych.Don't use them in production environments. Certyfikaty z podpisem własnym mogą spowodować problemy w aplikacjach klienckich.Self-signed certificates can cause problems in your client applications. Aby uzyskać więcej informacji, zobacz dokumentację bibliotek sieciowych używanych przez aplikację kliencką.For more information, see the documentation for the network libraries that your client application uses.

Włącz protokół TLS i WdróżEnable TLS and deploy

W przypadku wdrażania AKS można włączyć zakończenie protokołu TLS podczas tworzenia lub dołączania klastra AKS w obszarze roboczym AML.For AKS deployment, you can enable TLS termination when you create or attach an AKS cluster in AML workspace. W czasie wdrażania modelu AKS można wyłączyć zakończenie protokołu TLS z obiektem konfiguracji wdrożenia, w przeciwnym razie wszystkie wdrożenie modelu AKS domyślnie będzie miało zakończenie działania protokołu TLS w przypadku utworzenia lub dołączenia czasu klastra AKS.At AKS model deployment time, you can disable TLS termination with deployment configuration object, otherwise all AKS model deployment by default will have TLS termination enabled at AKS cluster create or attach time.

W przypadku wdrażania ACI można włączyć zakończenie protokołu TLS w czasie wdrażania modelu z obiektem konfiguracji wdrożenia.For ACI deployment, you can enable TLS termination at model deployment time with deployment configuration object.

Wdróż w usłudze Azure Kubernetes ServiceDeploy on Azure Kubernetes Service

Uwaga

Informacje przedstawione w tej sekcji dotyczą również wdrażania bezpiecznej usługi sieci Web dla projektanta.The information in this section also applies when you deploy a secure web service for the designer. Jeśli nie masz doświadczenia w korzystaniu z zestawu SDK języka Python, zobacz artykuł co to jest zestaw Azure Machine Learning SDK dla języka Python?.If you aren't familiar with using the Python SDK, see What is the Azure Machine Learning SDK for Python?.

Podczas tworzenia lub dołączania klastra AKS w obszarze roboczym AML można włączyć zakończenie protokołu TLS z obiektami konfiguracji AksCompute.provisioning_configuration () i AksCompute.attach_configuration () .When you create or attach an AKS cluster in AML workspace, you can enable TLS termination with AksCompute.provisioning_configuration() and AksCompute.attach_configuration() configuration objects. 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.Both method return a configuration object that has an enable_ssl method, and you can use enable_ssl method to enable TLS.

Można włączyć protokół TLS przy użyciu certyfikatu firmy Microsoft lub certyfikatu niestandardowego zakupionego od urzędu certyfikacji.You can enable TLS either with Microsoft certificate or a custom certificate purchased from CA.

  • Korzystając z certyfikatu firmy Microsoft, należy użyć parametru leaf_domain_label .When you use a certificate from Microsoft, you must use the leaf_domain_label parameter. Ten parametr generuje nazwę DNS usługi.This parameter generates the DNS name for the service. Na przykład wartość "contoso" tworzy nazwę domeny "contoso <six-random-characters> . <azureregion> . cloudapp.azure.com ", gdzie <azureregion> jest regionem zawierającym usługę.For example, a value of "contoso" creates a domain name of "contoso<six-random-characters>.<azureregion>.cloudapp.azure.com", where <azureregion> is the region that contains the service. Opcjonalnie można użyć parametru overwrite_existing_domain , aby zastąpić istniejące leaf_domain_label.Optionally, you can use the overwrite_existing_domain parameter to overwrite the existing leaf_domain_label. W poniższym przykładzie pokazano, jak utworzyć konfigurację, która umożliwia korzystanie z protokołu TLS z certyfikatem firmy Microsoft:The following example demonstrates how to create a configuration that enables an TLS with Microsoft certificate:

    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.When you use a certificate from Microsoft, you don't need to purchase your own certificate or domain name.

    Ostrzeżenie

    Jeśli klaster AKS jest skonfigurowany z wewnętrznym modułem równoważenia obciążenia, korzystanie z podanego certyfikatu firmy Microsoft nie jest obsługiwane i należy użyć certyfikatu niestandardowego do włączenia protokołu TLS.If your AKS cluster is configured with an internal load balancer, using a Microsoft provided certificate is not supported and you must use custom certificate to enable TLS.

  • W przypadku korzystania z zakupionego certyfikatu niestandardowego należy użyć parametrów ssl_cert_pem_file, ssl_key_pem_file i ssl_cname .When you use a custom certificate that you purchased, you use the ssl_cert_pem_file, ssl_key_pem_file, and ssl_cname parameters. Poniższy przykład ilustruje sposób użycia plików PEM do utworzenia konfiguracji korzystającej z zakupionego certyfikatu TLS/SSL:The following example demonstrates how to use .pem files to create a configuration that uses a TLS/SSL certificate that you purchased:

    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 ().For more information about enable_ssl, see AksProvisioningConfiguration.enable_ssl() and AksAttachConfiguration.enable_ssl().

Wdrażanie w usłudze Azure Container InstancesDeploy on Azure Container Instances

Podczas wdrażania programu do Azure Container Instances należy podać wartości parametrów związanych z protokołem TLS, jak pokazano w poniższym fragmencie kodu:When you deploy to Azure Container Instances, you provide values for TLS-related parameters, as the following code snippet shows:

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 ().For more information, see AciWebservice.deploy_configuration().

Aktualizowanie systemu DNSUpdate your DNS

W przypadku wdrożenia AKS z certyfikatem niestandardowym lub wdrożeniem ACI należy zaktualizować rekord DNS w taki sposób, aby wskazywał adres IP punktu końcowego oceniania.For either AKS deployment with custom certificate or ACI deployment, you must update your DNS record to point to the IP address of scoring endpoint.

Ważne

W przypadku korzystania z certyfikatu z firmy Microsoft do wdrażania AKS nie trzeba ręcznie aktualizować wartości DNS klastra.When you use a certificate from Microsoft for AKS deployment, you don't need to manually update the DNS value for the cluster. Wartość powinna być ustawiana automatycznie.The value should be set automatically.

Aby zaktualizować rekord DNS dla niestandardowej nazwy domeny, można wykonać następujące czynności:You can follow following steps to update DNS record for your custom domain name:

  • Pobierz adres IP punktu końcowego oceniania z identyfikatora URI punktu końcowego oceniania, który jest zwykle w formacie http://104.214.29.152:80/api/v1/service//score .Get scoring endpoint IP address from scoring endpoint URI, which is usually in the format of http://104.214.29.152:80/api/v1/service//score.
  • Użyj narzędzi z rejestratora nazw domen, aby zaktualizować rekord DNS dla nazwy domeny.Use the tools from your domain name registrar to update the DNS record for your domain name. Rekord musi wskazywać adres IP punktu końcowego oceniania.The record must point to the IP address of scoring endpoint.
  • Po aktualizacji rekordu DNS można sprawdzić poprawność rozpoznawania nazw DNS przy użyciu polecenia nslookup Custom-Domain-Name .After DNS record update, you can validate DNS resolution using nslookup custom-domain-name command. Jeśli rekord DNS został poprawnie zaktualizowany, nazwa domeny niestandardowej wskaże adres IP punktu końcowego oceniania.If DNS record is correctly updated, the custom domain name will point to the IP address of scoring endpoint.
  • Może wystąpić opóźnienie minut lub godzin, po upływie którego klienci mogą rozpoznać nazwę domeny, w zależności od rejestratora i "czasu wygaśnięcia", który jest skonfigurowany dla nazwy domeny.There can be a delay of minutes or hours before clients can resolve the domain name, depending on the registrar and the "time to live" (TTL) that's configured for the domain name.

Aktualizowanie certyfikatu TLS/SSLUpdate the TLS/SSL certificate

Certyfikaty protokołu TLS/SSL wygasną i należy je odnowić.TLS/SSL certificates expire and must be renewed. Zwykle odbywa się to co rok.Typically this happens every year. Skorzystaj z informacji w poniższych sekcjach, aby zaktualizować i odnowić certyfikat dla modeli wdrożonych w usłudze Azure Kubernetes:Use the information in the following sections to update and renew your certificate for models deployed to Azure Kubernetes Service:

Aktualizowanie certyfikatu wygenerowanego przez firmę MicrosoftUpdate a Microsoft generated certificate

Jeśli certyfikat został pierwotnie wygenerowany przez firmę Microsoft (w przypadku korzystania z leaf_domain_label do tworzenia usługi), zostanie automatycznie odnowiony w razie potrzeby.If the certificate was originally generated by Microsoft (when using the leaf_domain_label to create the service), it will automatically renew when needed. Aby zaktualizować certyfikat ręcznie, użyj jednego z następujących przykładów:If you want to manually renew it, use one of the following examples to update the certificate:

Ważne

  • Jeśli istniejący certyfikat jest nadal ważny, użyj renew=True (SDK) lub --ssl-renew (CLI), aby wymusić jego odnowienie.If the existing certificate is still valid, use renew=True (SDK) or --ssl-renew (CLI) to force the configuration to renew it. Na przykład jeśli istniejący certyfikat jest nadal ważny przez 10 dni i nie jest używany renew=True , certyfikat może nie zostać odnowiony.For example, if the existing certificate is still valid for 10 days and you don't use renew=True, the certificate may not be renewed.
  • Po pierwotnym wdrożeniu usługi leaf_domain_label jest używana do tworzenia nazw DNS przy użyciu wzorca <leaf-domain-label>######.<azure-region>.cloudapp.azure.com .When the service was originally deployed, the leaf_domain_label is used to create a DNS name using the pattern <leaf-domain-label>######.<azure-region>.cloudapp.azure.com. Aby zachować istniejącą nazwę (włącznie z wygenerowanymi 6 cyfr), użyj oryginalnej leaf_domain_label wartości.To preserve the existing name (including the 6 digits originally generated), use the original leaf_domain_label value. Nie uwzględniaj 6 cyfr, które zostały wygenerowane.Do not include the 6 digits that were generated.

Korzystanie z zestawu SDKUse the 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 poleceniaUse the CLI

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:For more information, see the following reference docs:

Aktualizowanie certyfikatu niestandardowegoUpdate custom certificate

Jeśli certyfikat został pierwotnie wygenerowany przez urząd certyfikacji, wykonaj następujące czynności:If the certificate was originally generated by a certificate authority, use the following steps:

  1. Aby odnowić certyfikat, użyj dokumentacji dostarczonej przez urząd certyfikacji.Use the documentation provided by the certificate authority to renew the certificate. Ten proces tworzy nowe pliki certyfikatów.This process creates new certificate files.

  2. Użyj zestawu SDK lub interfejsu wiersza polecenia, aby zaktualizować usługę przy użyciu nowego certyfikatu:Use either the SDK or CLI to update the service with the new certificate:

    Korzystanie z zestawu SDKUse the 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 poleceniaUse the CLI

    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:For more information, see the following reference docs:

Wyłącz protokół TLSDisable TLS

Aby wyłączyć protokół TLS dla modelu wdrożonego w usłudze Azure Kubernetes, Utwórz SslConfiguration za pomocą usługi status="Disabled" , a następnie wykonaj aktualizację:To disable TLS for a model deployed to Azure Kubernetes Service, create an SslConfiguration with status="Disabled", then perform an update:

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 krokiNext steps

Instrukcje:Learn how to: