Protección del acceso al servidor de API con intervalos de direcciones IP autorizadas en Azure Kubernetes Service (AKS)

En este artículo se muestra cómo usar la característica Intervalos IP autorizados del servidor de API para limitar qué direcciones IP y CIDR pueden acceder al plano de control.

El servidor de API de Kubernetes es el núcleo del plano de control de Kubernetes y es la manera central de interactuar con los clústeres y administrarlos. Para mejorar la seguridad de los clústeres y minimizar el riesgo de ataques, se recomienda limitar los intervalos de direcciones IP que pueden acceder al servidor de la API. Para ello, puede usar la característica Intervalos IP autorizados del servidor de API.

Antes de empezar

  • Es preciso que esté instalada y configurada la versión 2.0.76 de la CLI de Azure, o cualquier otra posterior. Ejecute az --version para encontrar la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.
  • Para saber qué direcciones IP deben incluirse al integrar el clúster de AKS con Azure DevOps, consulte el artículo sobre las Direcciones IP y URL de dominio permitidas en Azure DevOps.

Limitaciones

La característica Intervalos IP autorizados del servidor de API tiene las siguientes limitaciones:

  • La característica Intervalos IP autorizados del servidor de API se quitó de la versión preliminar en octubre de 2019. En el caso de los clústeres creados después de que la característica se haya quitado de la versión preliminar, esta característica solo se admite en el equilibrador de carga de SKU Estándar. Los clústeres existentes en el equilibrador de carga de SKU Básico con la característica Intervalos IP autorizados del servidor de API habilitada seguirán funcionando tal cual. Sin embargo, estos clústeres no se pueden migrar a un equilibrador de carga de SKU Estándar. Los clústeres existentes seguirán funcionando si se actualizan la versión de Kubernetes y el plano de control.
  • La característica Intervalos IP autorizados del servidor de API no se admite en clústeres privados.
  • Al usar esta característica con clústeres que usan IP pública de nodo, los grupos de nodos que usan la dirección IP pública de nodo deben usar prefijos de IP pública. Los prefijos de IP pública deben agregarse como intervalos autorizados.

Información general sobre los intervalos de direcciones IP autorizadas por el servidor de API

El servidor de Kubernetes API expone las API de Kubernetes subyacentes y proporciona la interacción con herramientas de administración como kubectl y el panel de Kubernetes. AKS proporciona un plano de control de clúster de inquilino único con un servidor de API dedicado. El servidor de API tiene asignada una dirección IP pública de manera predeterminada. Puede controlar el acceso mediante control de acceso basado en roles de Kubernetes (RBAC de Kubernetes) y RBAC de Azure.

Para proteger el acceso al panel de control de AKS y al servidor de API (que, de lo contrario, serían accesibles al público), puede habilitar y usar intervalos de direcciones IP autorizadas. De esta manera, solo se permite la comunicación con el servidor de API a los intervalos de direcciones IP definidas. Todas solicitudes realizadas al servidor de API procedentes de direcciones IP que no forman parte de estos intervalos IP autorizados se bloquean.

Creación de un clúster de AKS con la opción de intervalos IP autorizados por el servidor de API habilitada

Importante

De forma predeterminada, el clúster usa el equilibrador de carga de SKU estándar, que se puede usar para configurar la puerta de enlace de salida. Cuando se habilitan intervalos IP autorizados por el servidor de API durante la creación del clúster, además de los intervalos especificados también se permite de manera predeterminada la dirección IP pública del clúster. Si especifica "" o ningún valor para --api-server-authorized-ip-ranges, se deshabilitan los intervalos IP autorizados por el servidor de API. Tenga en cuenta que si usa PowerShell, debe utilizar --api-server-authorized-ip-ranges="" (con el signo igual) para evitar problemas de análisis.

Nota:

Debe agregar estos intervalos a una lista de permitidos:

  • La dirección IP de salida del clúster (firewall, puerta de enlace NAT u otra dirección, según el tipo de salida).
  • Cualquier intervalo que represente redes desde las que se va a administrar el clúster.

El límite superior para el número de intervalos IP que se puede especificar es de 200.

Las reglas pueden tardar hasta 2 minutos en propagarse. Espere ese tiempo al probar la conexión.

Al crear un clúster con intervalos IP autorizados por el servidor de API, se usa el parámetro --api-server-authorized-ip-ranges para proporcionar una lista de intervalos de direcciones IP públicas autorizados. Al especificar un intervalo de CIDR, comience por la primera dirección IP del intervalo. Por ejemplo, 137.117.106.90/29 es un intervalo válido, pero asegúrese de especificar la primera dirección IP del intervalo, por ejemplo, 137.117.106.88/29.

  • Cree un clúster de AKS con los intervalos IP autorizados por el servidor de API habilitados mediante el comando az aks create con el parámetro --api-server-authorized-ip-ranges. En el siguiente ejemplo se crea un clúster con el nombre myAKSCluster en el grupo de recursos denominado myResourceGroup, con la opción de intervalos IP autorizados por el servidor de API habilitada. Los intervalos de direcciones IP permitidos son 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
    

Especificación de las direcciones IP de salida para un equilibrador de carga de SKU estándar

Al crear un clúster con intervalos IP autorizados del servidor de API habilitados, también puede especificar las direcciones IP de salida o los prefijos para el clúster mediante los parámetros --load-balancer-outbound-ips o --load-balancer-outbound-ip-prefixes. Todas las direcciones IP proporcionadas en los parámetros están permitidas, junto con las direcciones IP en el parámetro --api-server-authorized-ip-ranges.

  • Cree un clúster de AKS con intervalos IP autorizados del servidor de API habilitados y especifique las direcciones IP de salida para el equilibrador de carga de SKU estándar mediante el parámetro --load-balancer-outbound-ips. En el siguiente ejemplo se crea un clúster con el nombre myAKSCluster en el grupo de recursos denominado myResourceGroup, con la opción de intervalos IP autorizados por el servidor de API habilitada y las direcciones IP de salida <public-ip-id-1> y <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
    

Permiso solo para la dirección IP pública de salida del equilibrador de carga de SKU estándar

Cuando se habilitan intervalos IP autorizados por el servidor de API durante la creación del clúster, además de los intervalos especificados también se permite la dirección IP pública de salida para el equilibrador de carga de SKU estándar para el clúster. Para permitir solo la dirección IP pública de salida del equilibrador de carga de SKU estándar, use 0.0.0.0/32 al especificar el parámetro --api-server-authorized-ip-ranges.

  • Cree un clúster de AKS con intervalos IP autorizados del servidor de API habilitados y especifique solo las direcciones IP públicas de salida del equilibrador de carga de SKU estándar mediante el parámetro --api-server-authorized-ip-ranges. En el siguiente ejemplo se crea un clúster con el nombre myAKSCluster en el grupo de recursos denominado myResourceGroup, con la opción de intervalos IP autorizados por el servidor de API habilitada y solo se permite la IP pública de salida del equilibrador de carga de SKU estándar:

    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
    

Actualización de los intervalos IP autorizados por el servidor de API de un clúster existente

  • Actualice los intervalos IP autorizados por el servidor de API habilitados de un clúster existente mediante el comando az aks update con el parámetro --api-server-authorized-ip-ranges. En el siguiente ejemplo se actualizan los intervalos IP autorizados por el servidor de API en el clúster denominado myAKSCluster del grupo de recursos denominado myResourceGroup. El intervalo de direcciones IP que se va a autorizar es 73.140.245.0/24:

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

    También puede usar 0.0.0.0/32 al especificar el parámetro --api-server-authorized-ip-ranges para permitir solo la dirección IP pública del equilibrador de carga de SKU estándar.

Deshabilitación de los intervalos IP autorizados

  • Deshabilite los intervalos IP autorizados mediante el comando az aks update y especifique un intervalo vacío "" para el parámetro --api-server-authorized-ip-ranges.

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

Búsqueda de intervalos IP autorizados existentes

  • Busque los intervalos IP autorizados existentes mediante el comando az aks show con el parámetro --query establecido en apiServerAccessProfile.authorizedIpRanges.

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

¿Cómo se encuentra la dirección IP que se va a incluir en --api-server-authorized-ip-ranges?

Si desea tener acceso al servidor de la API desde las direcciones IP de las máquinas, las herramientas o las automatizaciones de desarrollo, deberá agregarlas a la lista de intervalos IP aprobados de los clústeres de AKS.

Otra opción consiste en configurar un sistema jumpbox, que incluya las herramientas necesarias, en una subred independiente de la red virtual del firewall. En este método, se presupone que el entorno que usa tiene un firewall con la red correspondiente y que ha agregado las direcciones IP del firewall a los intervalos autorizados. Asimismo, si se ha forzado la tunelización de la subred AKS a la subred del firewall, el sistema jumpbox podrá residir en la subred del clúster sin problemas.

  1. Recupere su dirección IP mediante el siguiente comando:

    # Retrieve your IP address
    CURRENT_IP=$(dig +short "myip.opendns.com" "@resolver1.opendns.com")
    
  2. Agregue la dirección IP a la lista aprobada mediante la CLI de 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:

En el ejemplo anterior, se agrega otra dirección IP a los intervalos aprobados. Tenga en cuenta que todavía incluye la dirección IP de Actualización de los intervalos IP autorizados por el servidor de API de un clúster. Si no incluye la dirección IP existente, este comando la reemplazará por la nueva en lugar de agregarla a los intervalos autorizados. Para deshabilitar los intervalos IP autorizados, ejecute el comando az aks update y especifique un intervalo vacío: "".

Otra opción para los sistemas con Windows consiste en usar el comando siguiente para obtener la dirección IPv4 pública o seguir los pasos que se detallan en Buscar su dirección IP.

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

Para encontrar esta dirección, también puede buscar cuál es mi dirección IP en un explorador web.

Pasos siguientes

En este artículo ha habilitado intervalos de direcciones IP autorizadas por el servidor de API. Este enfoque solo forma una parte del modo de ejecución segura de un clúster de AKS. Para más información, consulte Conceptos de seguridad de las aplicaciones y los clústeres en Azure Kubernetes Service (AKS) y Procedimientos recomendados para la seguridad de clústeres y las actualizaciones en AKS.