Proteger o acesso ao servidor de API usando intervalos de endereços IP autorizados no AKS (Serviço de Kubernetes do Azure)

Este artigo mostra como usar intervalos de endereços IP autorizados do servidor de API para limitar os endereços IP e os CIDRs que podem acessar o plano de controle.

O servidor de API do Kubernetes é o núcleo do painel de controle do Kubernetes e é a maneira central de interagir e gerenciar seus clusters. Para melhorar a segurança dos clusters e minimizar o risco de ataques, recomendamos limitar os intervalos de endereços IP que podem acessar o servidor de API. Para fazer isso, você pode usar o recurso intervalos de IP autorizados do servidor de API.

Antes de começar

  • Você precisará da CLI do Azure versão 2.0.76 ou posterior instalada e configurada. Execute az --version para encontrar a versão. Se você precisa instalar ou atualizar, consulte Instalar a CLI do Azure.
  • Para saber quais endereços IP incluir ao integrar o cluster do AKS com Azure DevOps, consulte o artigo do Azure DevOps Endereços IP permitidos e URLs de domínio.

Limitações

O recurso de intervalos de IP autorizados do servidor de API tem as seguintes limitações:

  • O recurso intervalos de IP autorizados do servidor de API foi movido para fora da versão prévia em outubro de 2019. Para clusters criados depois que o recurso foi movido para fora da versão prévia, esse recurso só tem suporte no balanceador de carga de SKU Standard. Todos os clusters existentes no balanceador de carga de SKU Básico com o recurso de intervalos de IP autorizados do servidor de API habilitado continuarão funcionando como estão. No entanto, esses clusters não podem ser migrados para um balanceador de carga de SKU Standard. Os clusters existentes também continuarão a funcionar se a versão ou o plano de controle do Kubernetes forem atualizados.
  • Não há suporte para o recurso de intervalos de IP autorizados do servidor de API em clusters privados.
  • Ao usar esse recurso com clusters que usam IP público de nó, os pools de nós que usam o IP público do nó devem usar prefixos IP públicos. Os prefixos de IP públicos devem ser adicionados como intervalos autorizados.

Visão geral de intervalos de IP autorizados do servidor de API

O servidor de API do Kubernetes expõe as APIs subjacentes do Kubernetes e fornece a interação para ferramentas de gerenciamento como o kubectl e o painel do Kubernetes. O AKS fornece um plano de controle de cluster de locatário único com um servidor de API dedicado. O servidor de API recebe um endereço IP público por padrão. Você pode controlar o acesso usando o controle de acesso baseado em função do Kubernetes (Kubernetes RBAC) ou o Azure RBAC.

Para proteger o acesso ao servidor do plano de controle AKS/API publicamente acessível, você pode habilitar e usar intervalos de IP autorizados. Esses intervalos de IP autorizados permitem que apenas os intervalos de endereços IP definidos se comuniquem com o servidor de API. Todas as solicitações feitas ao servidor de API a partir de um endereço IP que não faça parte desses intervalos de IP autorizados serão bloqueadas.

Criar um cluster do AKS com o recurso intervalos de IP autorizados do servidor de API habilitado

Importante

Por padrão, o cluster usa o balanceador de carga do SKU Standard, que você pode usar para configurar o gateway de saída. Quando você habilita intervalos de IP autorizados do servidor de API durante a criação do cluster, o IP público do cluster é permitido por padrão, além dos intervalos especificados. Se você especificar "" ou nenhum valor para --api-server-authorized-ip-ranges, os intervalos de IP autorizados do servidor de API serão desabilitados. Observe que, se você estiver usando o PowerShell, use --api-server-authorized-ip-ranges="" (com sinais de igual) para evitar problemas de análise.

Observação

Você deve adicionar esses intervalos a uma lista de permitidos:

  • O endereço IP de saída do cluster (firewall, gateway NAT ou outro endereço, dependendo do seu tipo de saída).
  • Qualquer intervalo que represente as redes das quais você administrará o cluster.

O limite máximo do número de intervalos de IP que você pode especificar é 200.

A propagação das regras pode levar até dois minutos. Aguarde esse período ao testar a conexão.

Ao criar um cluster com intervalos de IP autorizados do servidor de API habilitados, use o parâmetro --api-server-authorized-ip-ranges para fornecer uma lista de intervalos de endereços IP públicos autorizados. Quando você especificar um intervalo CIDR, comece com o primeiro endereço IP no intervalo. Por exemplo, 137.117.106.90/29 é um intervalo válido, mas especifique o primeiro endereço IP no intervalo, como 137.117.106.88/29.

  • Crie um cluster AKS com intervalos de IP autorizados do servidor de API habilitados usando o comando az aks create com o parâmetro --api-server-authorized-ip-ranges. O exemplo a seguir cria um cluster chamado myAKSCluster no grupo de recursos chamado myResourceGroup com intervalos de IP autorizados do servidor de API habilitados. Os intervalos de endereços IP permitidos são 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
    

Especificar IPs de saída para um balanceador de carga SKU padrão

Ao criar um cluster com intervalos de IP autorizados do servidor de API habilitados, você também pode especificar os endereços IP de saída ou prefixos para o cluster usando os parâmetros --load-balancer-outbound-ips ou --load-balancer-outbound-ip-prefixes. Todos os IPs fornecidos nos parâmetros são permitidos junto com os IPs no parâmetro --api-server-authorized-ip-ranges.

  • Crie um cluster AKS com intervalos de IP autorizados do servidor de API habilitados e especifique os endereços IP de saída para o balanceador de carga de SKU padrão usando o parâmetro --load-balancer-outbound-ips. O exemplo a seguir cria um cluster chamado myAKSCluster no grupo de recursos chamado myResourceGroup com intervalos de IP autorizados do servidor de API habilitados e os endereços IP de saída <public-ip-id-1> 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
    

Permitir somente o IP público de saída do balanceador de carga do SKU Standard

Quando você habilita os intervalos de IP autorizados do servidor de API durante a criação do cluster, o IP público de saída do balanceador de carga do SKU Standard do cluster também é permitido, por padrão, além dos intervalos que você especifica. Para permitir apenas o IP público de saída do balanceador de carga SKU padrão, use 0.0.0.0/32 ao especificar o parâmetro --api-server-authorized-ip-ranges.

  • Crie um cluster AKS com intervalos de IP autorizados do servidor de API habilitados e permita apenas o IP público de saída do balanceador de carga de SKU padrão usando o parâmetro --api-server-authorized-ip-ranges. O exemplo a seguir cria um cluster chamado myAKSCluster no grupo de recursos chamado myResourceGroup com intervalos de IP autorizados do servidor de API habilitados e permite apenas o IP público de saída do balanceador de carga de SKU padrão:

    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
    

Atualizar os intervalos de IP autorizados do servidor de API de um cluster existente

  • Atualize os intervalos de IP autorizados do servidor de API de um cluster existente usando o comando az aks update com o parâmetro --api-server-authorized-ip-ranges. O exemplo a seguir atualiza os intervalos de IP autorizados do servidor de API no cluster chamado myAKSCluster no grupo de recursos chamado myResourceGroup. O intervalo de endereços IP a ser autorizado é 73.140.245.0/24:

    az aks update --resource-group myResourceGroup --name myAKSCluster --api-server-authorized-ip-ranges 73.140.245.0/24
    
  • Para permitir vários intervalos de endereços IP, você pode listar vários endereços IP, separados por vírgulas.

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

    Você também pode usar 0.0.0.0/32 ao especificar o parâmetro --api-server-authorized-ip-ranges para permitir apenas o IP público do balanceador de carga do SKU Standard.

Desabilitar os intervalos de IP autorizados

  • Desative os intervalos de IP autorizados usando o comando az aks update e especifique um "" de intervalo vazio para o parâmetro --api-server-authorized-ip-ranges.

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

Localizar intervalos de IP autorizados atuais

  • Encontre intervalos de IP autorizados existentes usando o comando az aks show com o parâmetro --query definido como apiServerAccessProfile.authorizedIpRanges.

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

Como encontrar meu IP para incluir em --api-server-authorized-ip-ranges?

Você precisa adicionar seus computadores de desenvolvimento, ferramentas ou endereços IP de automação à lista de intervalos de IP aprovados no cluster do AKS para acessar o servidor de API com eles.

Outra opção é configurar um Jumpbox com as ferramentas necessárias dentro de uma sub-rede separada na rede virtual do firewall. Isso pressupõe que o ambiente tem um firewall com a respectiva rede e que você adicionou os IPs do firewall aos intervalos autorizados. Da mesma forma, se você forçar o túnel da sub-rede do AKS para a sub-rede do firewall, também será possível colocar o jumpbox na sub-rede do cluster.

  1. Recupere seu endereço IP usando o comando a seguir:

    # Retrieve your IP address
    CURRENT_IP=$(dig +short "myip.opendns.com" "@resolver1.opendns.com")
    
  2. Adicione seu endereço IP à lista aprovada usando a CLI do Azure ou 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'
    

Observação

O exemplo acima adiciona outro endereço IP aos intervalos aprovados. Observe que ele ainda inclui o endereço IP de Atualizar os intervalos de IP autorizados do servidor de API de um cluster. Se você não incluir seu endereço IP existente, esse comando o substituirá pelo novo, em vez de adicioná-lo aos intervalos autorizados. Para desabilitar os intervalos de IP autorizados, use az aks update e especifique um intervalo vazio, "".

Outra opção é usar o comando a seguir em sistemas Windows para obter o endereço IPv4 público, ou você pode seguir as etapas em Localizar seu endereço IP.

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

Você também pode encontrar esse endereço pesquisando qual é meu endereço IP em um navegador da Internet.

Use as Marcas de Serviço para intervalos de IP autorizados do Servidor de API - (Versão prévia)

As marcas de serviço são uma maneira conveniente de especificar um grupo de endereços IP correspondentes a um serviço do Kubernetes. Você pode usar marcas de serviço para especificar os endereços IP dos serviços do Kubernetes e os endereços IP específicos nos intervalos de IP autorizados para o servidor de API, separando-os com uma vírgula.

Limitações

Importante

As versões prévias do recurso AKS estão disponíveis em uma base de autoatendimento e aceitação. As visualizações são fornecidas "como estão" e "conforme disponíveis" e estão excluídas dos acordos de nível de serviço e da garantia limitada. As versões prévias do AKS são parcialmente cobertas pelo suporte ao cliente em uma base de melhor esforço. Dessa forma, esses recursos não são destinados ao uso em produção. Para obter mais informações, consulte os seguintes artigos:

Instalar a extensão de versão prévia da CLI do Azure

  1. Instale a extensão de visualização da CLI do Azure usando o comando [az extension add][az-extension-add].

    az extension add --name aks-preview
    
  2. Atualize a extensão para garantir que você tenha a versão mais recente usando o comando [az extension update][az-extension-update].

    az extension update --name aks-preview
    

Registre o sinalizador do recurso IP autorizado da Marca de Serviço

  1. Registre o sinalizador de recurso EnableServiceTagAuthorizedIPPreview usando o comando az feature register.

    az feature register --namespace "Microsoft.ContainerService" --name "EnableServiceTagAuthorizedIPPreview"
    

    Leva alguns minutos para o registro ser concluído.

  2. Verifique o registro usando o comando az feature show.

    az feature show --namespace "Microsoft.ContainerService" --name "EnableServiceTagAuthorizedIPPreview"
    

Crie um cluster do AKS com intervalos de IP autorizados de Marca de serviço

Crie um cluster com intervalos de IP autorizados de Marca de Serviço usando o parâmetro --api-server-authorized-ip-ranges com a marca de serviço AzureCloud para permitir que todos os serviços do Azure acessem o servidor de API e especifique um IP adicional.

Observação

Somente uma marca de serviço é permitida no parâmetro --api-server-authorized-ip-ranges. Não é possível especificar várias etiquetas de serviço.

az aks create --resource-group myResourceGroup \
  --name myAKSCluster \
  --api-server-authorized-ip-ranges AzureCloud,20.20.20.20

Você deve ser capaz de fazer o curl do servidor da API a partir de uma VM do Azure ou de um serviço do Azure que faça parte da marca de serviço AzureCloud.

Próximas etapas

Neste artigo, você habilitou os intervalos de IP autorizados do servidor de API. Essa abordagem é um dos componentes para a execução segura de clusters do AKS. Veja mais informações em Conceitos de segurança para aplicativos e clusters no AKS e Práticas recomendadas de segurança e atualizações de cluster no AKS.