Condividi tramite


Configurare un endpoint online sicuro con TLS/SSL

Questo articolo illustra come proteggere un endpoint online Kubernetes creato tramite Azure Machine Learning.

Si usa HTTPS per limitare l'accesso agli endpoint online e proteggere i dati inviati dai client. HTTPS crittografa le comunicazioni tra un client e un endpoint online usando Transport Layer Security (TLS). TLS viene talvolta ancora chiamato Secure Sockets Layer (SSL), che era il predecessore di TLS.

Suggerimento

  • In particolare, gli endpoint online Kubernetes supportano TLS versione 1.2 per il servizio Azure Kubernetes e Kubernetes abilitato per Azure Arc.
  • L'inferenza di TLS versione 1.3 per Azure Machine Learning Kubernetes non è supportata.

TLS e SSL si basano entrambi su certificati digitali, utili per la crittografia e la verifica dell'identità. Per altre informazioni sul funzionamento dei certificati digitali, vedere l'argomento di Wikipedia public_key_infrastructure.

Avviso

Se non si usa HTTPS per gli endpoint online, i dati inviati da e verso il servizio potrebbero essere visibili per gli altri utenti su Internet.

HTTPS consente anche al client di verificare l'autenticità del server a cui si connette. Questa funzionalità protegge i client dagli attacchi man-in-the-middle.

Di seguito è riportato il processo generale per proteggere un endpoint online:

  1. Ottenere un nome di dominio.

  2. Ottenere un certificato digitale.

  3. Configurare TLS/SSL nell'estensione Azure Machine Learning.

  4. Aggiornare il DNS con un nome di dominio completo (FQDN) in modo che punti all'endpoint online.

Importante

È necessario acquistare un certificato personalizzato per ottenere un nome di dominio o un certificato TLS/SSL e quindi configurarli nell'estensione Azure Machine Learning. Per informazioni dettagliate, vedere le sezioni seguenti in questo articolo.

Immettere un nome di dominio

Se non si dispone ancora di un nome di dominio, acquistarne uno da un registrar di nomi di dominio. Il processo e il prezzo variano a seconda del registrar. Il registrar fornisce gli strumenti per gestire il nome di dominio. Questi strumenti vengono usati per eseguire il mapping di un nome di dominio completo (ad esempio www.contoso.com) all'indirizzo IP che ospita l'endpoint online.

Per altre informazioni su come ottenere l'indirizzo IP degli endpoint online, vedere la sezione Aggiornare il DNS con un FQDN di questo articolo.

Ottenere un certificato TLS/SSL

Esistono molti modi per ottenere un certificato TLS/SSL (certificato digitale). Il più comune consiste nell'acquistarne uno da un'autorità di certificazione. Indipendentemente dal modo in cui si ottiene il certificato, sono necessari i file seguenti:

  • Un certificato che contiene la catena di certificati completa ed è con codifica PEM
  • Una chiave con codifica PEM

Nota

Una chiave SSL in un file PEM con protezione passphrase non è supportata.

Quando si richiede un certificato, è necessario specificare il nome di dominio completo dell'indirizzo che si intende usare per l'endpoint online, ad esempio www.contoso.com. L'indirizzo stampato nel certificato e l'indirizzo usato dai client vengono confrontati per verificare l'identità dell'endpoint online. Se tali indirizzi non corrispondono, nel client viene visualizzato un messaggio di errore.

Per altre informazioni su come configurare la banda IP con un FQDN, vedere la sezione Aggiornare il DNS con un FQDN di questo articolo.

Suggerimento

Se l'autorità di certificazione non può fornire il certificato e la chiave come file con codifica PEM, è possibile usare uno strumento come OpenSSL per modificare il formato.

Avviso

Usare certificati autofirmati solo per lo sviluppo. Evitare di usarle in un ambiente di produzione. I certificati autofirmati possono causare problemi nelle applicazioni client. Per altre informazioni, vedere la documentazione relativa alle librerie di rete usate dall'applicazione client.

Configurare TLS/SSL nell'estensione di Azure Machine Learning

Per un endpoint online Kubernetes impostato per usare HTTPS di inferenza per le connessioni sicure, è possibile abilitare la terminazione TLS con le impostazioni di configurazione della distribuzione quando si distribuire l'estensione Azure Machine Learning in un cluster Kubernetes.

In fase di distribuzione per l'estensione Azure Machine Learning, l'impostazione di configurazione allowInsecureConnections è False per impostazione predefinita. Per garantire la corretta distribuzione dell'estensione, è necessario specificare l'impostazione di configurazione sslSecret o una combinazione di impostazioni sslKeyPemFile e sslCertPemFile protette dalla configurazione. In caso contrario, è possibile impostare allowInsecureConnections=True per supportare la terminazione HTTP e disabilitare la terminazione TLS.

Nota

Per supportare l'endpoint online HTTPS, allowInsecureConnections deve essere impostato su False.

Per abilitare un endpoint HTTPS per l'inferenza in tempo reale, è necessario fornire un certificato TLS/SSL con codifica PEM e una chiave. Esistono due modi per specificare il certificato e la chiave in fase di distribuzione per l'estensione Azure Machine Learning:

  • Specificare l'impostazione di configurazione sslSecret.
  • Specificare una combinazione di impostazioni sslCertPemFile e slKeyPemFile protette dalla configurazione.

Configurare sslSecret

La procedura consigliata consiste nel salvare il certificato e la chiave in un segreto Kubernetes nello spazio dei nomi azureml.

Per configurare sslSecret, è necessario salvare un segreto Kubernetes nel cluster Kubernetes nello spazio dei nomi azureml per archiviare cert.pem (certificato TLS/SSL con codifica PEM) e key.pem (chiave TLS/SSL con codifica PEM).

Il codice seguente è una definizione YAML di esempio di un segreto 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

Dopo aver salvato il segreto nel cluster, è possibile usare il comando seguente dell'interfaccia della riga di comando di Azure per specificare sslSecret come nome di questo segreto Kubernetes. Questo comando funzionerà solo se si usa il servizio Azure Kubernetes.

   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

Configurare sslCertPemFile e sslKeyPemFile

È possibile specificare l'impostazione di configurazione sslCertPemFile come percorso del file di certificato TLS/SSL con codifica PEM e l'impostazione di configurazione sslKeyPemFile come percorso del file di chiave TLS/SSL con codifica PEM.

L'esempio seguente illustra come usare l'interfaccia della riga di comando di Azure per specificare i file PEM per l'estensione di Azure Machine Learning che usa un certificato TLS/SSL acquistato. L'esempio presuppone che si stia usando il servizio Azure Kubernetes.

   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

  • Un file PEM con protezione passphrase non è supportato.
  • Sia sslCertPemFIle che sslKeyPemFIle usano parametri protetti da configurazione. Non configurano sslSecret e sslCertPemFile/sslKeyPemFile contemporaneamente.

Aggiornare il DNS con un FQDN

Per la distribuzione del modello in un endpoint online Kubernetes con un certificato personalizzato, è necessario aggiornare il record DNS in modo che punti all'indirizzo IP dell'endpoint online. Il servizio router di inferenza di Azure Machine Learning (azureml-fe) fornisce questo indirizzo IP. Per altre informazioni su azureml-fe, vedere router di inferenza di Azure Machine Learning gestito.

Per aggiornare il record DNS per il nome di dominio personalizzato:

  1. Ottenere l'indirizzo IP dell'endpoint online dall'URI di assegnazione dei punteggi, in genere nel formato di http://104.214.29.152:80/api/v1/service/<service-name>/score. In questo esempio l'indirizzo IP è 104.214.29.152.

    Dopo aver configurato il nome di dominio personalizzato, sostituisce l'indirizzo IP nell'URI di assegnazione dei punteggi. Per i cluster Kubernetes che usano LoadBalancer come servizio router di inferenza, azureml-fe viene esposto esternamente tramite il servizio di bilanciamento del carico e la terminazione TLS/SSL di un provider di servizi cloud. L'indirizzo IP dell'endpoint online Kubernetes è l'indirizzo IP esterno del servizio azureml-fe distribuito nel cluster.

    Se si usa il servizio Azure Kubernetes, è possibile ottenere l'indirizzo IP dal portale di Azure. Passare alla pagina delle risorse del servizio Azure Kubernetes, passare a Servizio e ingressi e quindi trovare il servizio azureml-fe nello spazio dei nomi azuerml. È quindi possibile trovare l'indirizzo IP nella colonna IP esterno.

    Screenshot dell'aggiunta di una nuova estensione al cluster Kubernetes abilitato per Azure Arc dal portale di Azure.

    È anche possibile eseguire il comando Kubernetes kubectl describe svc azureml-fe -n azureml nel cluster per ottenere l'indirizzo IP dal parametro LoadBalancer Ingress nell'output.

    Nota

    Per i cluster Kubernetes che usano nodePort o clusterIP come servizio router di inferenza, è necessario configurare la propria soluzione di bilanciamento del carico e la terminazione TLS/SSL per azureml-fe. È anche necessario ottenere l'indirizzo IP del servizio azureml-fe nell'ambito del cluster.

  2. Usare gli strumenti del registrar del nome di dominio per aggiornare il record DNS per il nome di dominio. Il record esegue il mapping del nome di dominio completo (ad esempio, www.contoso.com) all'indirizzo IP. Il record deve puntare all'indirizzo IP dell'endpoint online.

    Suggerimento

    Microsoft non è responsabile dell'aggiornamento del DNS per il nome DNS personalizzato o il certificato. È necessario aggiornarlo con il registrar del nome di dominio.

  3. Dopo l'aggiornamento del record DNS, è possibile convalidare la risoluzione DNS usando il comando nslookup custom-domain-name. Se il record DNS viene aggiornato correttamente, il nome di dominio personalizzato punterà all'indirizzo IP dell'endpoint online.

    A seconda del registrar e della durata (TTL) configurata per il nome di dominio, è possibile che si verifichi un ritardo di minuti o di ore prima che i client possano risolvere il nome di dominio.

Per altre informazioni sulla risoluzione DNS con Azure Machine Learning, vedere Come usare l'area di lavoro con un server DNS personalizzato.

Aggiornare il certificato TLS/SSL

I certificati TLS/SSL scadono e devono essere rinnovati. Questo avviene in genere ogni anno. Usare le informazioni nei passaggi seguenti per aggiornare e rinnovare il certificato per i modelli distribuiti in Kubernetes (servizio Azure Kubernetes e Kubernetes con abilitazione di Azure Arc):

  1. Usare la documentazione dell'autorità di certificazione per rinnovare il certificato. Questo processo consente di creare nuovi file di certificato.

  2. Aggiornare l'estensione Azure Machine Learning e specificare i nuovi file di certificato usando il comando az k8s-extension update.

    Se in precedenza è stato usato un segreto Kubernetes per configurare TLS/SSL, è necessario prima aggiornare il segreto Kubernetes con il nuovo cert.pem e key.pem configurazione nel cluster Kubernetes. Eseguire quindi il comando di aggiornamento dell'estensione per aggiornare il certificato:

       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 i file PEM sono stati configurati direttamente nel comando di distribuzione dell'estensione prima, è necessario eseguire il comando di aggiornamento dell'estensione e specificare il percorso del nuovo file 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
    

Disabilitare TLS

Per disabilitare TLS per un modello distribuito in Kubernetes:

  1. Aggiornare l'estensione Azure Machine Learning con allowInsercureconnection impostata su True.

  2. Rimuovere l'impostazione di configurazione sslCname, insieme alle impostazioni di configurazione sslSecret o sslPem.

  3. Eseguire il comando seguente dell'interfaccia della riga di comando di Azure nel cluster Kubernetes e quindi eseguire un aggiornamento. Questo comando presuppone che si stia usando il servizio Azure Kubernetes.

       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
    

Avviso

Per impostazione predefinita, la distribuzione dell'estensione Azure Machine Learning prevede impostazioni di configurazione per il supporto HTTPS. È consigliabile supportare HTTP solo a scopo di sviluppo o test. L'impostazione di configurazione allowInsecureConnections=True fornisce supporto HTTP.

Passaggi successivi

Scopri come: