Compartilhar via


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:

  1. Obter um nome de domínio.

  2. Obter um certificado digital.

  3. Configurar TLS/SSL na extensão do Azure Machine Learning.

  4. Atualizar seu DNS com um FQDN (nome de domínio totalmente qualificado) para apontar para o 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 e slKeyPemFile.

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 e sslKeyPemFIle usam parâmetros protegidos por configuração. Eles não configuram sslSecret e sslCertPemFile/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:

  1. 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ço azureml-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 .

    Captura de tela da adição da nova extensão ao cluster do Kubernetes habilitado para Azure Arc do portal do Azure.

    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âmetro LoadBalancer Ingress na saída.

    Observação

    Para clusters do Kubernetes que usam nodePort ou clusterIP como serviço de roteador de inferência, você precisa configurar sua solução de balanceamento de carga e terminação TLS/SSL para azureml-fe. Você também precisa obter o endereço IP do serviço azureml-fe no escopo do cluster.

  2. 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.

  3. 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):

  1. Use a documentação da autoridade de certificação para renovar o certificado. Esse processo cria novos arquivos de certificado.

  2. 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:

  1. Atualize a extensão do Azure Machine Learning com allowInsercureconnection definido como True.

  2. Remova a definição de configuração sslCname, juntamente com as definições de configuração sslSecret ou sslPem.

  3. 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: