Configurar um ponto de extremidade online seguro com TLS/SSL
Este artigo mostra como proteger 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 encripta as comunicações entre um cliente e um ponto final online através do TLS (Transport Layer Security). TLS às vezes ainda é chamado de Secure Sockets Layer (SSL), que foi o antecessor do TLS.
Gorjeta
- Especificamente, os pontos de extremidade online do Kubernetes oferecem suporte ao TLS versão 1.2 para o Serviço Kubernetes do Azure (AKS) e o Kubernetes habilitado para Azure Arc.
- A versão 1.3 do TLS para inferência do Kubernetes do Azure Machine Learning não é suportada.
TLS e SSL dependem de certificados digitais, que ajudam na criptografia e verificação de identidade. Para obter mais informações sobre como os certificados digitais funcionam, consulte o tópico Wikipedia public_key_infrastructure.
Aviso
Se você não usa HTTPS para seus endpoints online, os dados enviados de e para o serviço podem ficar visíveis para outras pessoas na Internet.
O HTTPS também permite que o cliente verifique a autenticidade do servidor ao qual está se conectando. Esse recurso protege os clientes contra ataques man-in-the-middle .
Veja a seguir o processo geral para proteger um ponto final online:
Importante
Você precisa comprar seu próprio certificado para obter um nome de domínio ou certificado TLS/SSL e, em seguida, configurá-los na extensão do Azure Machine Learning. Para obter informações mais detalhadas, consulte as seções a seguir deste artigo.
Obter um nome de domínio
Se você ainda não possui um nome de domínio, compre um de um registrador de nomes de domínio. O processo e o preço diferem entre os agentes de registo. O registrar 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 seu 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á muitas maneiras de obter um certificado TLS/SSL (certificado digital). O mais comum é comprar um de uma autoridade de certificação. Independentemente de onde você obtém o certificado, você precisa dos seguintes arquivos:
- Um certificado que contém toda a cadeia de certificados e é codificado pelo PEM
- Uma chave codificada por PEM
Nota
Uma chave SSL em um arquivo PEM com proteção por frase secreta não é suportada.
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 carimbado no certificado e o endereço que os clientes usam são comparados para verificar 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 banda IP com um FQDN, consulte a seção Atualizar seu DNS com um FQDN deste artigo.
Gorjeta
Se a autoridade de certificação não puder fornecer o certificado e a chave como arquivos codificados em PEM, você poderá usar uma ferramenta como OpenSSL para alterar o formato.
Aviso
Use certificados autoassinados apenas para desenvolvimento. Não os utilize em ambientes de produção. Os certificados autoassinados podem causar problemas em seus aplicativos cliente. Para obter mais informações, consulte a documentação para as bibliotecas de rede que seu aplicativo cliente usa.
Configurar o TLS/SSL na extensão do Azure Machine Learning
Para um ponto de extremidade online do Kubernetes definido para usar HTTPS de inferência para conexões seguras, você pode habilitar a terminação TLS com definições de configuração de implantação ao implantar a extensão do Aprendizado de Máquina do Azure em um cluster do Kubernetes.
No momento da implantação da extensão do Azure Machine Learning, a definição de allowInsecureConnections
configuração é False
por padrão. Para garantir uma implantação de extensão bem-sucedida, você precisa especificar a sslSecret
definição de configuração ou uma combinação de sslKeyPemFile
configurações protegidas por sslCertPemFile
configuração. Caso contrário, você pode definir allowInsecureConnections=True
para suportar HTTP e desabilitar a terminação TLS.
Nota
Para suportar o 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 e uma chave TLS/SSL codificados em PEM. 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 definição de
sslSecret
configuração. - Especifique uma combinação de configurações protegidas por
sslCertPemFile
slKeyPemFile
configuração.
Configurar sslSecret
A prática recomendada é salvar o certificado e a chave em um segredo do Kubernetes no azureml
namespace.
Para configurar sslSecret
o , você precisa salvar um segredo do Kubernetes em seu cluster Kubernetes no azureml
namespace para armazenar cert.pem (certificado TLS/SSL codificado em PEM) e key.pem (chave TLS/SSL codificada em PEM).
O código a seguir é 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 em seu cluster, você pode usar o seguinte comando da CLI do Azure para especificar sslSecret
como o nome desse segredo do Kubernetes. (Este 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 sslCertPemFile
definição de configuração como o caminho para o arquivo de certificado TLS/SSL codificado em PEM e a sslKeyPemFile
definição de configuração como o caminho para o arquivo de chave TLS/SSL codificado em 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
Nota
- Não é suportado um ficheiro PEM com proteção por frase de acesso.
- Ambos
sslCertPemFIle
esslKeyPemFIle
usar parâmetros protegidos por configuração. Eles não configuramsslSecret
esslCertPemFile
/sslKeyPemFile
ao mesmo tempo.
Atualize seu DNS com um FQDN
Para a implementação de modelos num ponto final online do Kubernetes com um certificado personalizado, tem de atualizar o registo DNS para apontar para o endereço IP do ponto final online. 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
o , consulte Roteador de inferência do Managed Azure Machine Learning.
Para atualizar o registo DNS para o seu nome de domínio personalizado:
Obtenha o endereço IP do ponto de extremidade online a partir 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.Depois de configurar seu nome de domínio personalizado, ele substitui o endereço IP no URI de pontuação. Para clusters 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 terminação TLS/SSL. O endereço IP do ponto de extremidade online do Kubernetes é o endereço IP externo doazureml-fe
serviço implantado no cluster.Se você usa o AKS, pode obter o endereço IP do portal do Azure. Vá para a página de recursos do AKS, vá para Serviço e entradas e encontre 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
Kubernetes em seu cluster para obter o endereço IP doLoadBalancer Ingress
parâmetro na saída.Nota
Para clusters Kubernetes que usam um ou
nodePort
clusterIP
como o serviço de roteador de inferência, você precisa configurar sua própria solução de balanceamento de carga e terminação TLS/SSL paraazureml-fe
. Você também precisa obter oazureml-fe
endereço IP do serviço no escopo do cluster.Use as ferramentas do seu registrador de nomes 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.Gorjeta
A Microsoft não é responsável por atualizar o DNS do seu nome DNS personalizado ou certificado. 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
nslookup custom-domain-name
comando. Se o registro DNS for atualizado corretamente, o nome de domínio personalizado apontará para o endereço IP do ponto de extremidade online.Pode haver um atraso de minutos ou horas antes que os clientes possam resolver o nome de domínio, dependendo do registrador e do tempo de vida (TTL) configurado para o nome de domínio.
Para obter mais informações sobre resolução de DNS com o Azure Machine Learning, consulte Como usar seu espaço de trabalho com um servidor DNS personalizado.
Atualizar o certificado TLS/SSL
Os certificados TLS/SSL expiram e devem ser renovados. Normalmente, isso acontece todos os anos. Use as informações nas etapas a seguir para atualizar e renovar seu certificado para modelos implantados no Kubernetes (AKS e Kubernetes habilitados 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
az k8s-extension update
comando.Se você usou um segredo do Kubernetes para configurar o TLS/SSL antes, primeiro precisará atualizar o segredo do Kubernetes com a nova configuração cert.pem e key.pem no cluster do Kubernetes. Em seguida, execute o comando extension update 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 extension deployment antes, precisará executar o comando extension update 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
Desativar 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
sslCname
configuração, juntamente com as definições desslSecret
configuração ousslPem
.Execute o seguinte comando da CLI do Azure no cluster do Kubernetes e execute uma atualização. Este 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 suporte HTTP apenas para fins de desenvolvimento ou teste. A allowInsecureConnections=True
definição de configuração fornece suporte HTTP.
Próximos passos
Aprenda a: