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

En Kubernetes, el servidor de API recibe solicitudes para realizar acciones en el clúster, como crear recursos o reducir el número de nodos. El servidor de API es la manera centralizada de interactuar con un clúster y administrarlo. Para mejorar la seguridad del clúster y minimizar los ataques, el servidor de API solo debe ser accesible desde un conjunto limitado de intervalos de direcciones IP.

En este artículo se muestra cómo usar los intervalos de direcciones IP que autoriza el servidor de la API, mediante la CLI de Azure, para limitar qué direcciones IP y CIDR pueden acceder al plano de control.

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 de intervalos IP autorizados por el servidor de la API tiene las siguientes limitaciones:

  • En los clústeres creados después de que los intervalos de direcciones IP autorizados por el servidor de API se hayan pasado de la versión preliminar en octubre de 2019, los intervalos de direcciones IP autorizados del servidor de API solo se admiten en el equilibrador de carga de SKU Estándar. Los clústeres existentes que usen la SKU Básica del equilibrador de carga y los intervalos de direcciones IP que autorice el servidor de la API seguirán funcionando como antes, pero no se podrán migrar a un equilibrador de carga que use la SKU Estándar. Además, estos clústeres seguirán funcionando si se actualiza la versión de Kubernetes o el plano de control.
  • No se admite el uso de los intervalos de direcciones IP que autoriza el servidor de la API con los clústeres privados.
  • Cuando se use esta característica con clústeres que empleen IP pública por nodo, los grupos de nodos con esta opción habilitada deberán usar prefijos de IP públicos que deberán agregarse como intervalos autorizados.

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

El servidor de API de Kubernetes es el modo en el que se exponen las API de Kubernetes subyacentes. Este componente proporciona la interacción de las herramientas de administración, como kubectl o el panel de Kubernetes. AKS proporciona un plano de control de inquilino único con un servidor de API dedicado, etc. El servidor de API se asigna de forma predeterminada a una dirección IP pública, y el usuario debe regular el acceso mediante el control de acceso basado en rol de Kubernetes (RBAC de Kubernetes) o 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. Las solicitudes al servidor de API procedentes de direcciones IP que no formen parte de este intervalo se bloquean. Siga usando RBAC de Kubernetes o RBAC de Azure para autorizar a los usuarios y las acciones que soliciten.

Para más información sobre el servidor de API y otros componentes del clúster, consulte los conceptos clave de Kubernetes para AKS.

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

Cree un clúster con el comando az aks create y especifique el parámetro --api-server-authorized-ip-ranges para proporcionar una lista de intervalos autorizados de direcciones IP. Estos intervalos IP suelen ser intervalos de direcciones que usan las redes locales o IP públicas. 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.

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 forma predeterminada la dirección IP pública del clúster. Si especifica "" o no especifica ningún valor para --api-server-authorized-ip-ranges, se deshabilitarán los intervalos de direcciones IP autorizados por el servidor de API. Tenga en cuenta que si usa PowerShell, debe usar --api-server-authorized-ip-ranges="" (con el signo igual) para evitar problemas de análisis.

En el siguiente ejemplo se crea un clúster de nodo único denominado 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 \
    --node-count 1 \
    --vm-set-type VirtualMachineScaleSets \
    --load-balancer-sku standard \
    --api-server-authorized-ip-ranges 73.140.245.0/24 \
    --generate-ssh-keys

Nota

Debe agregar estos intervalos a una lista de permitidos:

  • La dirección IP pública del firewall
  • 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.

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

Al crear un clúster de AKS, si especifica direcciones IP o prefijos de salida para el clúster, su uso también se permitirá. Por ejemplo:

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

En el ejemplo anterior, todas las direcciones IP proporcionadas en el parámetro --load-balancer-outbound-ip-prefixes están permitidas, junto con las direcciones IP en el parámetro --api-server-authorized-ip-ranges .

También puede especificar el parámetro --load-balancer-outbound-ip-prefixes para permitir prefijos de direcciones IP del equilibrador de carga de salida.

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.

En el ejemplo siguiente, solo se permite la dirección IP pública de salida del equilibrador de carga de SKU estándar y solo se puede acceder al servidor de API desde los nodos del clúster.

az aks create \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --node-count 1 \
    --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

Para actualizar los intervalos IP autorizados del servidor de API en un clúster existente, use el comando az aks update y use los parámetros --api-server-authorized-ip-ranges, --load-balancer-outbound-ip-prefixes, --load-balancer-outbound-ips o --load-balancer-outbound-ip-prefixes.

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

Para deshabilitar los intervalos IP autorizados, use az aks update y especifique un intervalo vacío para deshabilitar los intervalos IP autorizados del servidor de API. Por ejemplo:

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

Búsqueda de intervalos IP autorizados existentes

Para buscar los intervalos IP que se han autorizado, use az aks show y especifique el nombre del clúster y el grupo de recursos. Por ejemplo:

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

Actualización, deshabilitación y búsqueda de intervalos IP autorizados mediante Azure Portal

Las operaciones anteriores de agregar, actualizar, buscar y deshabilitar intervalos IP autorizados también se pueden realizar en Azure Portal. Para acceder a ellas, vaya a Redes en Configuración en la hoja de menús del recurso de clúster.

In a browser, shows the cluster resource's networking settings Azure portal page. The options 'set specified IP range' and 'Specified IP ranges' are highlighted.

¿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.

Agregue otra dirección IP a los intervalos autorizados mediante la ejecución de los siguientes comandos.

# Retrieve your IP address
CURRENT_IP=$(dig +short "myip.opendns.com" "@resolver1.opendns.com")
# Add to AKS approved list
az aks update -g $RG -n $AKSNAME --api-server-authorized-ip-ranges $CURRENT_IP/32

Nota

El ejemplo anterior agrega los intervalos IP autorizados de servidor de API en el clúster. 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.