Utilizar o TLS para proteger um serviço Web através do Azure Machine Learning
APLICA-SE A:Python SDK azureml v1
Este artigo mostra-lhe como proteger um serviço Web implementado através do Azure Machine Learning.
Utiliza HTTPS para restringir o acesso aos serviços Web e proteger os dados que os clientes submetem. O HTTPS ajuda a proteger as comunicações entre um cliente e um serviço Web ao encriptar as comunicações entre os dois. A encriptação utiliza o Transport Layer Security (TLS). Por vezes, o TLS ainda é referido como Secure Sockets Layer (SSL), que foi o antecessor do TLS.
Dica
O SDK do Azure Machine Learning utiliza o termo "SSL" para propriedades relacionadas com comunicações seguras. Isto não significa que o seu serviço Web não utilize TLS. SSL é apenas um termo mais reconhecido.
Especificamente, os serviços Web implementados através do Azure Machine Learning suportam a versão TLS 1.2 para o AKS e o ACI. Para implementações do ACI, se estiver na versão mais antiga do TLS, recomendamos que implemente novamente para obter a versão mais recente do TLS.
A versão 1.3 do TLS para o Azure Machine Learning – Inferência do AKS não é suportada.
O TLS e o SSL dependem ambos de certificados digitais, que ajudam na encriptação e verificação de identidade. Para obter mais informações sobre como funcionam os certificados digitais, veja o tópico Wikipédia Infraestrutura de chaves públicas.
Aviso
Se não utilizar HTTPS para o seu serviço Web, os dados enviados de e para o serviço poderão estar visíveis para outras pessoas na Internet.
O HTTPS também permite ao cliente verificar a autenticidade do servidor ao qual se está a ligar. Esta funcionalidade protege os clientes contra ataques man-in-the-middle .
Este é o processo geral para proteger um serviço Web:
Obtenha um nome de domínio.
Obtenha um certificado digital.
Implemente ou atualize o serviço Web com o TLS ativado.
Atualize o DNS para apontar para o serviço Web.
Importante
Se estiver a implementar no Azure Kubernetes Service (AKS), pode comprar o seu próprio certificado ou utilizar um certificado fornecido pela Microsoft. Se utilizar um certificado da Microsoft, não precisa de obter um nome de domínio ou certificado TLS/SSL. Para obter mais informações, consulte a secção Ativar TLS e implementar este artigo.
Existem ligeiras diferenças quando protege entre destinos de implementação.
Importante
Alguns dos comandos da CLI do Azure neste artigo utilizam a extensão , ou v1, para o azure-cli-ml
Azure Machine Learning. O suporte para a extensão v1 terminará a 30 de setembro de 2025. Poderá instalar e utilizar a extensão v1 até essa data.
Recomendamos que faça a transição para a ml
extensão , ou v2, antes de 30 de setembro de 2025. Para obter mais informações sobre a extensão v2, veja Extensão da CLI do Azure ML e SDK Python v2.
Obter um nome de domínio
Se ainda não tiver um nome de domínio, compre um a partir de uma entidade de registo de nomes de domínio. O processo e o preço diferem entre as entidades de registo. A entidade de registo fornece ferramentas para gerir o nome de domínio. Utilize estas ferramentas para mapear um nome de domínio completamente qualificado (FQDN) (como www.contoso.com) para o endereço IP que aloja o seu serviço Web.
Obter um certificado TLS/SSL
Existem várias formas de obter um certificado TLS/SSL (certificado digital). O mais comum é comprar um a uma autoridade de certificação (AC). Independentemente do local onde obtém o certificado, precisa dos seguintes ficheiros:
- Um certificado. O certificado tem de conter a cadeia de certificados completa e tem de ser "codificado por PEM".
- Uma chave. A chave também tem de ser codificada por PEM.
Quando pede um certificado, tem de fornecer o FQDN do endereço que planeia utilizar para o serviço Web (por exemplo, www.contoso.com). O endereço carimbado no certificado e o endereço que os clientes utilizam são comparados para verificar a identidade do serviço Web. Se esses endereços não corresponderem, o cliente recebe uma mensagem de erro.
Dica
Se a autoridade de certificação não conseguir fornecer o certificado e a chave como ficheiros codificados por PEM, pode utilizar um utilitário como o OpenSSL para alterar o formato.
Aviso
Utilize certificados autoassinados apenas para desenvolvimento. Não os utilize em ambientes de produção. Os certificados autoassinados podem causar problemas nas aplicações cliente. Para obter mais informações, veja a documentação das bibliotecas de rede que a aplicação cliente utiliza.
Ativar o TLS e implementar
Para a implementação do AKS, pode ativar a terminação TLS quando cria ou anexa um cluster do AKS na área de trabalho do Azure Machine Learning. No momento da implementação do modelo do AKS, pode desativar a terminação do TLS com o objeto de configuração de implementação. Caso contrário, por predefinição, toda a implementação do modelo do AKS terá a terminação TLS ativada na criação ou hora de anexação do cluster do AKS.
Para a implementação do ACI, pode ativar a terminação do TLS no momento da implementação do modelo com o objeto de configuração de implementação.
Implementar no Azure Kubernetes Service
Nota
As informações nesta secção também se aplicam quando implementa um serviço Web seguro para o estruturador. Se não estiver familiarizado com a utilização do SDK python, consulte O que é o SDK do Azure Machine Learning para Python?.
Quando cria ou anexa um cluster do AKS na área de trabalho do Azure Machine Learning, pode ativar a terminação TLS com objetos de configuração AksCompute.provisioning_configuration() e AksCompute.attach_configuration( ). Ambos os métodos devolvem um objeto de configuração que tem um método enable_ssl e pode utilizar enable_ssl método para ativar o TLS.
Pode ativar o TLS com um certificado Microsoft ou um certificado personalizado comprado na AC.
Quando utiliza um certificado da Microsoft, tem de utilizar o parâmetro leaf_domain_label . Este parâmetro gera o nome DNS do serviço. Por exemplo, um valor de "contoso" cria um nome de domínio de "contoso<six-random-characters>".< azureregion.cloudapp.azure.com>", em <que azureregion> é a região que contém o serviço. Opcionalmente, pode utilizar o parâmetro overwrite_existing_domain para substituir o leaf_domain_label existente. O exemplo seguinte demonstra como criar uma configuração que permite um TLS com certificado da 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")
Importante
Quando utiliza um certificado da Microsoft, não precisa de comprar o seu próprio certificado ou nome de domínio.
Quando utiliza um certificado personalizado que comprou, utiliza os parâmetros ssl_cert_pem_file, ssl_key_pem_file e ssl_cname . O ficheiro PEM com proteção de expressões pass não é suportado. O exemplo seguinte demonstra como utilizar ficheiros .pem para criar uma configuração que utiliza um certificado TLS/SSL que comprou:
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")
Para obter mais informações sobre enable_ssl, consulte AksProvisioningConfiguration.enable_ssl() e AksAttachConfiguration.enable_ssl().
Implementar no Azure Container Instances
Quando implementa no Azure Container Instances, fornece valores para parâmetros relacionados com TLS, como mostra o seguinte fragmento de código:
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")
Para obter mais informações, consulte AciWebservice.deploy_configuration().
Atualizar o DNS
Para a implementação do AKS com o certificado personalizado ou a implementação do ACI, tem de atualizar o registo DNS para apontar para o endereço IP do ponto final de classificação.
Importante
Quando utiliza um certificado da implementação do Microsoft para o AKS, não precisa de atualizar manualmente o valor DNS do cluster. O valor deve ser definido automaticamente.
Pode seguir os passos seguintes para atualizar o registo DNS para o seu nome de domínio personalizado:
Obtenha o endereço IP do ponto final de classificação do URI do ponto final de classificação, que normalmente está no formato de
http://104.214.29.152:80/api/v1/service/<service-name>/score
. Neste exemplo, o endereço IP é 104.214.29.152.Utilize as ferramentas da entidade de registo de nomes de domínio para atualizar o registo DNS do seu nome de domínio. O registo mapeia o FQDN (por exemplo, www.contoso.com) para o endereço IP. O registo tem de apontar para o endereço IP do ponto final de classificação.
Dica
A Microsoft não é responsável pela atualização do DNS para o seu nome ou certificado DNS personalizado. Tem de atualizá-lo com a sua entidade de registo de nomes de domínio.
Após a atualização do registo DNS, pode validar a resolução de DNS com o comando nslookup custom-domain-name . Se o registo DNS for atualizado corretamente, o nome de domínio personalizado apontará para o endereço IP do ponto final de classificação.
Pode haver um atraso de minutos ou horas até que os clientes possam resolver o nome de domínio, dependendo da entidade de registo e do "time to live" (TTL) que está configurado para o nome de domínio.
Para obter mais informações sobre a resolução de DNS com o Azure Machine Learning, veja Como utilizar a área de trabalho com um servidor DNS personalizado.
Atualizar o certificado TLS/SSL
Os certificados TLS/SSL expiram e devem ser renovados. Normalmente, acontece todos os anos. Utilize as informações nas secções seguintes para atualizar e renovar o certificado para modelos implementados no Azure Kubernetes Service:
Atualizar um certificado gerado pela Microsoft
Se o certificado tiver sido gerado originalmente pela Microsoft (ao utilizar o leaf_domain_label para criar o serviço), será renovado automaticamente quando necessário. Se quiser renová-lo manualmente, utilize um dos seguintes exemplos para atualizar o certificado:
Importante
- Se o certificado existente ainda for válido, utilize
renew=True
(SDK) ou--ssl-renew
(CLI) para forçar a configuração a renová-lo. Esta operação demorará cerca de 5 horas a entrar em vigor. - Quando o serviço foi originalmente implementado, o
leaf_domain_label
é utilizado para criar um nome DNS com o padrão<leaf-domain-label>######.<azure-region>.cloudapp.azure.com
. Para preservar o nome existente (incluindo os 6 dígitos gerados originalmente), utilize o valor originalleaf_domain_label
. Não inclua os 6 dígitos que foram gerados.
Utilizar o 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)
Utilizar a CLI
APLICA-SE A:Extensão de ml da CLI do Azure v1
az ml computetarget update aks -g "myresourcegroup" -w "myresourceworkspace" -n "myaks" --ssl-leaf-domain-label "myaks" --ssl-overwrite-domain True --ssl-renew
Para obter mais informações, veja os seguintes documentos de referência:
Atualizar certificado personalizado
Se o certificado tiver sido gerado originalmente por uma autoridade de certificação, utilize os seguintes passos:
Utilize a documentação fornecida pela autoridade de certificação para renovar o certificado. Este processo cria novos ficheiros de certificado.
Utilize o SDK ou a CLI para atualizar o serviço com o novo certificado:
Utilizar o 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)
Utilizar a CLI
APLICA-SE A:Extensão de ml da CLI do Azure v1
az ml computetarget update aks -g "myresourcegroup" -w "myresourceworkspace" -n "myaks" --ssl-cname "myaks"--ssl-cert-file "cert.pem" --ssl-key-file "key.pem"
Para obter mais informações, veja os seguintes documentos de referência:
Desativar o TLS
Para desativar o TLS para um modelo implementado no Azure Kubernetes Service, crie um SslConfiguration
com status="Disabled"
e, em seguida, execute uma atualização:
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)
Passos seguintes
Aprenda a: