Proteggere l'accesso al server API tramite intervalli di indirizzi IP autorizzati nel servizio Azure Kubernetes

Questo articolo illustra come usare la funzionalità Intervalli di indirizzi IP autorizzati del server API per limitare gli indirizzi IP e i CIDR che possono accedere al piano di controllo.

Il server API Kubernetes è il nucleo del piano di controllo Kubernetes ed è il modo centrale per interagire e gestire i cluster. Per migliorare la sicurezza dei cluster e ridurre al minimo il rischio di attacchi, è consigliabile limitare gli intervalli di indirizzi IP che possono accedere al server API. A tale scopo, è possibile usare la funzionalità Intervalli IP autorizzati del server API.

Operazioni preliminari

  • È necessario che sia installata e configurata l'interfaccia della riga di comando di Azure 2.0.76 o versioni successive. Eseguire az --version per trovare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.
  • Per informazioni sugli indirizzi IP da includere durante l'integrazione del cluster del servizio Azure Kubernetes con Azure DevOps, vedere l'articolo URL di dominio e indirizzi IP consentiti di Azure DevOps.

Limiti

La funzionalità Intervalli IP autorizzati del server API presenta le limitazioni seguenti:

  • La funzionalità Intervalli IP autorizzati del server API è stata rimossa dall’anteprima nell'ottobre 2019. Per i cluster creati dopo che la funzionalità è stata rimossa dall'anteprima, questa funzionalità è supportata solo nel servizio di bilanciamento del carico dello SKU Standard. Tutti i cluster esistenti nel servizio di bilanciamento del carico SKU Basic con la funzionalità Intervalli IP autorizzati del server API abilitata continueranno a funzionare così come sono. Tuttavia, non è possibile eseguire la migrazione di questi cluster a un servizio di bilanciamento del carico dello SKU Standard. I cluster esistenti continueranno a funzionare se la versione di Kubernetes e il piano di controllo vengono aggiornati.
  • La funzionalità Intervalli IP autorizzati del server API non è supportata nei cluster privati.
  • Quando si usa questa funzionalità con cluster che utilizzano l'IP pubblico del nodo, i pool di nodi che usano l'IP pubblico del nodo devono usare prefissi IP pubblici. I prefissi IP pubblici devono essere aggiunti come intervalli autorizzati.

Panoramica degli intervalli IP autorizzati per il server API

Il server API Kubernetes espone le API Kubernetes sottostanti e fornisce l'interazione per gli strumenti di gestione come kubectl e il dashboard kubernetes. Il servizio Azure Kubernetes fornisce un piano di controllo del cluster a tenant singolo con un server API dedicato. Al server API viene assegnato un indirizzo IP pubblico per impostazione predefinita. È possibile controllare l'accesso usando il controllo degli accessi in base al ruolo di Kubernetes o il controllo degli accessi in base al ruolo di Azure.

Per proteggere l'accesso al server API o al piano di controllo del servizio Azure Kubernetes accessibile pubblicamente, è possibile abilitare e usare intervalli IP autorizzati. Questi intervalli IP autorizzati consentono solo agli intervalli di indirizzi IP definiti di comunicare con il server API. Tutte le richieste effettuate al server API da un indirizzo IP che non fa parte di questi intervalli IP autorizzati vengono bloccate.

Creare un cluster del servizio Azure Kubernetes con intervalli IP autorizzati del server API abilitati

Importante

Per impostazione predefinita, il cluster usa il servizio di bilanciamento del carico dello SKU Standard che è possibile usare per configurare il gateway in uscita. Quando si abilitano gli intervalli IP autorizzati del server API durante la creazione del cluster, l'indirizzo IP pubblico per il cluster è consentito per impostazione predefinita oltre agli intervalli specificati. Se si specifica "" o nessun valore per , gli intervalli IP autorizzati del --api-server-authorized-ip-rangesserver API sono disabilitati. Si noti che se si usa PowerShell, usare --api-server-authorized-ip-ranges="" (con segni di uguale) per evitare problemi di analisi.

Nota

È consigliabile aggiungere questi intervalli a un elenco di elementi consentiti:

  • Indirizzo IP in uscita del cluster (firewall, gateway NAT o altro indirizzo, a seconda del tipo in uscita).
  • Qualsiasi intervallo che rappresenta le reti da cui si gestirà il cluster.

Il limite superiore per il numero di intervalli IP che è possibile specificare è 200.

La propagazione delle regole può richiedere fino a due minuti. Attendere fino a quel momento durante il test della connessione.

Quando si crea un cluster con intervalli IP autorizzati del server API abilitato, usare il --api-server-authorized-ip-ranges parametro per fornire un elenco di intervalli di indirizzi IP pubblici autorizzati. Quando si specifica un intervallo CIDR, iniziare con il primo indirizzo IP nell'intervallo. Ad esempio, 137.117.106.90/29 è un intervallo valido, ma assicurarsi di specificare il primo indirizzo IP nell'intervallo, ad esempio 137.117.106.88/29.

  • Creare un cluster del servizio Azure Kubernetes con intervalli IP autorizzati del server API abilitati usando il az aks create comando con il --api-server-authorized-ip-ranges parametro . L'esempio seguente crea un cluster denominato myAKSCluster nel gruppo di risorse denominato myResourceGroup con intervalli IP autorizzati del server API abilitati. Gli intervalli di indirizzi IP consentiti sono 73.140.245.0/24:

    az aks create --resource-group myResourceGroup --name myAKSCluster --vm-set-type VirtualMachineScaleSets --load-balancer-sku standard --api-server-authorized-ip-ranges 73.140.245.0/24 --generate-ssh-keys
    

Specificare gli indirizzi IP in uscita per un servizio di bilanciamento del carico dello SKU Standard

Quando si crea un cluster con intervalli IP autorizzati del server API abilitato, è anche possibile specificare gli indirizzi IP in uscita o i prefissi per il cluster usando i --load-balancer-outbound-ips parametri o --load-balancer-outbound-ip-prefixes . Tutti gli INDIRIZZI IP forniti nei parametri sono consentiti insieme agli INDIRIZZI IP nel --api-server-authorized-ip-ranges parametro .

  • Creare un cluster del servizio Azure Kubernetes con intervalli IP autorizzati del server API abilitati e specificare gli indirizzi IP in uscita per il servizio di bilanciamento del carico dello SKU Standard usando il --load-balancer-outbound-ips parametro . L'esempio seguente crea un cluster denominato myAKSCluster nel gruppo di risorse denominato myResourceGroup con intervalli IP autorizzati del server API abilitati e gli indirizzi <public-ip-id-1> IP in uscita e <public-ip-id-2>:

    az aks create --resource-group myResourceGroup --name myAKSCluster --vm-set-type VirtualMachineScaleSets --load-balancer-sku standard --api-server-authorized-ip-ranges 73.140.245.0/24 --load-balancer-outbound-ips <public-ip-id-1>,<public-ip-id-2> --generate-ssh-keys
    

Consentire solo l'IP pubblico in uscita del servizio di bilanciamento del carico dello SKU Standard

Quando si abilitano gli intervalli IP autorizzati del server API durante la creazione del cluster, anche l'IP pubblico in uscita del servizio di bilanciamento del carico dello SKU Standard per il cluster è consentito per impostazione predefinita oltre agli intervalli specificati. Per consentire solo l'indirizzo IP pubblico in uscita del servizio di bilanciamento del carico dello SKU Standard, usare 0.0.0.0/32 quando si specifica il --api-server-authorized-ip-ranges parametro .

  • Creare un cluster del servizio Azure Kubernetes con intervalli IP autorizzati del server API abilitati e consentire solo l'indirizzo IP pubblico in uscita del servizio di bilanciamento del carico dello SKU Standard usando il --api-server-authorized-ip-ranges parametro . L'esempio seguente crea un cluster denominato myAKSCluster nel gruppo di risorse denominato myResourceGroup con intervalli IP autorizzati del server API abilitato e consente solo l'indirizzo IP pubblico in uscita del servizio di bilanciamento del carico SKU Standard:

    az aks create --resource-group myResourceGroup --name myAKSCluster --vm-set-type VirtualMachineScaleSets --load-balancer-sku standard --api-server-authorized-ip-ranges 0.0.0.0/32 --generate-ssh-keys
    

Aggiornare gli intervalli IP autorizzati del server API di un cluster esistente

  • Aggiornare gli intervalli IP autorizzati del server API di un cluster esistente usando il az aks update comando con il --api-server-authorized-ip-ranges parametro . L'esempio seguente aggiorna gli intervalli IP autorizzati per il server API sul cluster denominato myAKSCluster nel gruppo di risorse denominato myResourceGroup. L'intervallo di indirizzi IP da autorizzare è 73.140.245.0/24:

    az aks update --resource-group myResourceGroup --name myAKSCluster --api-server-authorized-ip-ranges 73.140.245.0/24
    

    È anche possibile usare 0.0.0.0/32 quando si specifica il parametro --api-server-authorized-ip-ranges per consentire solo l'IP pubblico in uscita del servizio di bilanciamento del carico dello SKU Standard.

Disabilitare gli intervalli IP autorizzati

  • Disabilitare gli intervalli IP autorizzati usando il az aks update comando e specificare un intervallo "" vuoto per il --api-server-authorized-ip-ranges parametro .

    az aks update --resource-group myResourceGroup --name myAKSCluster --api-server-authorized-ip-ranges ""
    

Trovare intervalli IP autorizzati esistenti

  • Trovare gli intervalli IP autorizzati esistenti usando il az aks show comando con il --query parametro impostato su apiServerAccessProfile.authorizedIpRanges.

    az aks show --resource-group myResourceGroup --name myAKSCluster --query apiServerAccessProfile.authorizedIpRanges
    

Indicazioni per trovare l'indirizzo IP da includere in --api-server-authorized-ip-ranges

È necessario aggiungere indirizzi IP di computer per sviluppatori, di strumenti o di automazioni all'elenco di intervalli IP approvati del cluster del servizio Azure Kubernetes per potervi accedere al server API.

Un'altra opzione consiste nel configurare un JumpBox con gli strumenti necessari all'interno di una subnet separata nella rete virtuale del firewall. Ciò presuppone che l'ambiente abbia un firewall con la rispettiva rete e che siano stati aggiunti gli indirizzi IP del firewall agli intervalli autorizzati. Analogamente, se è stato forzato il tunneling dalla subnet del servizio Azure Kubernetes alla subnet del firewall, è corretto anche avere il jumpbox nella subnet del cluster.

  1. Recuperare l'indirizzo IP usando il comando seguente:

    # Retrieve your IP address
    CURRENT_IP=$(dig +short "myip.opendns.com" "@resolver1.opendns.com")
    
  2. Aggiungere l'indirizzo IP all'elenco approvato usando l'interfaccia della riga di comando di Azure o Azure PowerShell:

    # Add to AKS approved list using Azure CLI
    az aks update --resource-group $RG --name $AKSNAME --api-server-authorized-ip-ranges $CURRENT_IP/24,73.140.245.0/24
    
    # Add to AKS approved list using Azure PowerShell
    Set-AzAksCluster -ResourceGroupName $RG -Name $AKSNAME -ApiServerAccessAuthorizedIpRange '$CURRENT_IP/24,73.140.245.0/24'
    

Nota

Nell'esempio precedente viene aggiunto un altro indirizzo IP agli intervalli approvati. Si noti che include ancora l'indirizzo IP da Aggiornare gli intervalli IP autorizzati del server API di un cluster. Se non si include l'indirizzo IP esistente, questo comando lo sostituirà con quello nuovo anziché aggiungerlo agli intervalli autorizzati. Per disabilitare gli intervalli IP autorizzati, usare az aks update e specificare un intervallo vuoto "".

Un'altra opzione consiste nell'usare il comando seguente nei sistemi Windows per ottenere l'indirizzo IPv4 pubblico oppure seguire la procedura descritta in Trovare l'indirizzo IP.

Invoke-RestMethod http://ipinfo.io/json | Select -exp ip

È possibile trovare questo indirizzo anche cercando qual è il mio indirizzo IP in un browser Internet.

Passaggi successivi

In questo articolo sono stati abilitati intervalli IP autorizzati del server API. Questo approccio fa parte di come è possibile eseguire in modo sicuro un cluster del servizio Azure Kubernetes. Per altre informazioni, vedere Concetti di sicurezza per applicazioni e cluster nel servizio Azure Kubernetes e Procedure consigliate per la sicurezza e gli aggiornamenti del cluster nel servizio Azure Kubernetes.