Configurar um ponto de extremidade online seguro com TLS/SSL
Este artigo mostra como tornar seguro um ponto de extremidade online do Kubernetes criado por meio do Azure Machine Learning.
Você usa HTTPS para restringir o acesso a pontos de extremidade online e ajudar a proteger os dados enviados pelos clientes. O HTTPS criptografa as comunicações entre um cliente e um ponto de extremidade online usando o protocolo TLS. Às vezes, o TLS ainda é chamado de SSL (Secure Sockets Layer), que foi o predecessor do TLS.
Dica
- Especificamente, os pontos de extremidade online do Kubernetes dão suporte ao TLS versão 1.2 para o AKS (Serviço de Kubernetes do Azure) e o Kubernetes habilitado para Azure Arc.
- Não há suporte para o TLS versão 1.3 para a inferência de Kubernetes do Azure Machine Learning.
O TLS e o SSL dependem de certificados digitais, que ajudam com a criptografia e a verificação de identidade. Para obter mais informações sobre como os certificados digitais funcionam, consulte o tópico da Wikipédia public_key_infrastructure.
Aviso
Se você não usar o HTTPS para os pontos de extremidade online, os dados enviados de e para o serviço podem estar visíveis para outras pessoas na Internet.
O HTTPS também permite que o cliente verifique a autenticidade do servidor ao qual ele está se conectando. Esse recurso protege os clientes contra ataques man-in-the-middle.
O seguinte é o processo geral para proteger um ponto de extremidade online:
Importante
Você precisa comprar o próprio certificado para obter um nome de domínio ou certificado TLS/SSL e configurá-los na extensão do Azure Machine Learning. Para obter informações mais detalhadas, confira as seções seguintes deste artigo.
Obter um nome de domínio
Se você ainda não tem um nome de domínio, pode comprar um de um registrador de nomes de domínio. O processo e o preço são diferentes entre os registradores. O registrador fornece ferramentas para gerenciar o nome de domínio. Você usa essas ferramentas para mapear um FQDN (como www.contoso.com
) para o endereço IP que hospeda o ponto de extremidade online.
Para obter mais informações sobre como obter o endereço IP de seus pontos de extremidade online, consulte a seção Atualizar seu DNS com um FQDN deste artigo.
Obter um certificado TLS/SSL
Há várias maneiras de obter um certificado TLS/SSL (certificado digital). A mais comum é comprar um de uma autoridade de certificação. Independentemente de onde você obtém o certificado, é necessário ter os seguintes arquivos:
- Um certificado que contém a cadeia de certificados completa e é codificado por PEM
- Uma chave codificada por PEM
Observação
Não há suporte para uma chave SSL em um arquivo PEM com proteção de frase secreta.
Ao solicitar um certificado, você deve fornecer o FQDN do endereço que planeja usar para o ponto de extremidade online (por exemplo, www.contoso.com
). O endereço identificado no certificado e o endereço usado pelos clientes são comparados na hora de validar a identidade do ponto de extremidade online. Se esses endereços não corresponderem, o cliente receberá uma mensagem de erro.
Para obter mais informações sobre como configurar a faixa de IP com um FQDN, consulte a seção Atualizar seu DNS com um FQDN deste artigo.
Dica
Se a autoridade de certificação não puder fornecer o certificado e a chave como arquivos codificados por PEM, você poderá usar uma ferramenta como OpenSSL para alterar o formato.
Aviso
Certificados autoassinados devem ser usados apenas para desenvolvimento. Não os use em ambientes de produção. Certificados autoassinados podem causar problemas nos aplicativos clientes. Para obter mais informações, consulte a documentação das bibliotecas de rede usadas no aplicativo cliente.
Configurar TLS/SSL na extensão do Azure Machine Learning
Para um ponto de extremidade online do Kubernetes que está definido para usar HTTPS de inferência para conexões seguras, você pode habilitar o término do TLS com configurações de implantação ao implantar a extensão do Azure Machine Learning em um cluster do Kubernetes.
No momento da implantação da extensão do Azure Machine Learning, a configuração allowInsecureConnections
é False
por padrão. Para garantir a implantação bem-sucedida da extensão, você precisa especificar a configuração sslSecret
ou uma combinação das configurações sslKeyPemFile
e sslCertPemFile
protegidas pela configuração. Caso contrário, você pode definir allowInsecureConnections=True
para dar suporte a HTTP e desabilitar a terminação TLS.
Observação
Para dar suporte ao ponto de extremidade online HTTPS, allowInsecureConnections
deve ser definido como False
.
Para habilitar um ponto de extremidade HTTPS para inferência em tempo real, você precisa fornecer um certificado TLS/SSL codificado por PEM e uma chave. Há duas maneiras de especificar o certificado e a chave no momento da implantação para a extensão do Azure Machine Learning:
- Especifique a configuração
sslSecret
. - Especifique uma combinação das definições protegidas por configuração
sslCertPemFile
eslKeyPemFile
.
Configurar sslSecret
A melhor prática é salvar o certificado e a chave em um segredo do Kubernetes no namespace azureml
.
Para configurar sslSecret
, você precisa salvar um segredo do Kubernetes no cluster do Kubernetes no namespace azureml
para armazenar cert.pem (certificado TLS/SSL codificado por PEM) e key.pem (chave TLS/SSL codificada por PEM).
O seguinte código é uma definição YAML de exemplo de um segredo 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
Depois de salvar o segredo no cluster, você pode usar o comando da CLI do Azure a seguir para especificar sslSecret
como o nome desse segredo do Kubernetes. (Esse comando funcionará somente se você estiver usando o 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
Configurar sslCertPemFile e sslKeyPemFile
Você pode especificar a definição de configuração sslCertPemFile
para ser o caminho para o arquivo de certificado TLS/SSL codificado por PEM e a definição de configuração sslKeyPemFile
para ser o caminho para o arquivo de chave TLS/SSL codificado por PEM.
O exemplo a seguir demonstra como usar a CLI do Azure para especificar arquivos PEM para a extensão do Azure Machine Learning que usa um certificado TLS/SSL que você comprou. O exemplo pressupõe que você esteja usando o 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
Observação
- Não há suporte para um arquivo PEM com proteção por frase secreta.
sslCertPemFIle
esslKeyPemFIle
usam parâmetros protegidos por configuração. Eles não configuramsslSecret
esslCertPemFile
/sslKeyPemFile
ao mesmo tempo.
Atualizar o DNS com um FQDN
Você precisa atualizar seu registro DNS para apontar para o endereço IP do ponto de extremidade online para implantação de modelo no ponto de extremidade online do Kubernetes com certificado personalizado. O serviço de roteador de inferência do Azure Machine Learning (azureml-fe
) fornece esse endereço IP. Para obter mais informações sobre azureml-fe
, consulte Roteador de inferência do Azure Machine Learning gerenciado.
Para atualizar o registro DNS para seu nome de domínio personalizado:
Obtenha o endereço IP do ponto de extremidade online do URI de pontuação, que geralmente 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.Após você configurar o nome de domínio personalizado, ele substitui o endereço IP no URI de pontuação. Para clusters do Kubernetes que usam
LoadBalancer
como o serviço de roteador de inferência,azureml-fe
é exposto externamente por meio do balanceador de carga de um provedor de nuvem e da terminação TLS/SSL. O endereço IP do ponto de extremidade online do Kubernetes é o endereço IP externo do serviçoazureml-fe
implantado no cluster.Se usar o AKS, você poderá obter o endereço IP do portal do Azure. Acesse a página de recursos do AKS, vá até Serviço e entradas e, em seguida, localize o serviço azureml-fe no namespace azuerml. Em seguida, você pode encontrar o endereço IP na coluna IP externo .
Além disso, você pode executar o comando
kubectl describe svc azureml-fe -n azureml
do Kubernetes em seu cluster para obter o endereço IP do parâmetroLoadBalancer Ingress
na saída.Observação
Para clusters do Kubernetes que usam
nodePort
ouclusterIP
como serviço de roteador de inferência, você precisa configurar sua solução de balanceamento de carga e terminação TLS/SSL paraazureml-fe
. Você também precisa obter o endereço IP do serviçoazureml-fe
no escopo do cluster.Use as ferramentas fornecidas pelo registrador de nome de domínio para atualizar o registro DNS do seu nome de domínio. O registro mapeia o FQDN (por exemplo,
www.contoso.com
) para o endereço IP. O registro deve apontar para o endereço IP do ponto de extremidade online.Dica
Não é responsabilidade da Microsoft atualizar o DNS de seu certificado ou nome DNS personalizado. Você deve atualizá-lo com seu registrador de nomes de domínio.
Após a atualização do registro DNS, você pode validar a resolução DNS usando o comando
nslookup custom-domain-name
. Se o registro DNS for atualizado corretamente, o nome de domínio personalizado apontará para o endereço IP do ponto de extremidade online.Dependendo do registrador e da TTL (vida útil) configurados para o nome de domínio, pode levar vários minutos a várias horas até que os clientes possam resolver o nome de domínio.
Para obter mais informações sobre a resolução de DNS com o Azure Machine Learning, confira Como usar seu workspace com um servidor DNS personalizado.
Atualizar o certificado TLS/SSL
Os certificados TLS/SSL expiram e devem ser renovados. Normalmente, isso acontece todo ano. Use as informações nas seguintes etapas para atualizar e renovar seu certificado para modelos implantados no Kubernetes (AKS e Kubernetes habilitado para Azure Arc):
Use a documentação da autoridade de certificação para renovar o certificado. Esse processo cria novos arquivos de certificado.
Atualize sua extensão do Azure Machine Learning e especifique os novos arquivos de certificado usando o comando
az k8s-extension update
.Se você usou um segredo do Kubernetes para configurar o TLS/SSL anteriormente, primeiro é necessário atualizar o segredo do Kubernetes com a nova configuração cert.pem e key.pem no cluster do Kubernetes. Em seguida, execute o comando de atualização de extensão para atualizar o certificado:
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
Se você configurou diretamente os arquivos PEM no comando de implantação da extensão anteriormente, é necessário executar o comando de atualização da extensão e especificar o caminho do novo arquivo 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
Desabilitar o TLS
Para desabilitar o TLS para um modelo implantado no Kubernetes:
Atualize a extensão do Azure Machine Learning com
allowInsercureconnection
definido comoTrue
.Remova a definição de configuração
sslCname
, juntamente com as definições de configuraçãosslSecret
ousslPem
.Execute o comando da CLI do Azure a seguir no cluster do Kubernetes e execute uma atualização. Esse comando pressupõe que você esteja usando o 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
Aviso
Por padrão, a implantação da extensão do Azure Machine Learning espera definições de configuração para suporte a HTTPS. Recomendamos o suporte a HTTP somente para fins de desenvolvimento ou teste. A definição de configuração allowInsecureConnections=True
fornece suporte a HTTP.
Próximas etapas
Saiba como: