Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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
allowInsecureConnections
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 allowInsecureConnections=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: