Aplicar selectivamente políticas de cortafuegos en GKE

En esta página se muestra cómo aplicar de forma selectiva las políticas de firewall de red de Cloud Next Generation Firewall en Google Kubernetes Engine (GKE) mediante etiquetas. Las etiquetas proporcionan un control más detallado para organizar la jerarquía de recursos en comparación con la Google Cloud jerarquía de recursos predeterminada. Las etiquetas también permiten aplicar políticas de forma condicional.

Esta página está dirigida a especialistas en seguridad que quieran tener un control preciso sobre las políticas de cortafuegos en GKE. Para obtener más información sobre los roles habituales y las tareas de ejemplo a las que hacemos referencia en el contenido, consulta Roles y tareas habituales de los usuarios de GKE. Google Cloud

Antes de leer esta página, asegúrese de que conoce los siguientes conceptos:

Acerca de las etiquetas

Las etiquetas son pares clave-valor que te permiten anotar y gestionar tus Google Cloud recursos a nivel de organización o proyecto. Puedes usar etiquetas para organizar tus recursos y aplicar condicionalmente políticas, como políticas de cortafuegos o de gestión de identidades y accesos. Puedes usar el control de acceso de IAM para definir quién puede adjuntar, crear, actualizar o eliminar etiquetas.

Para obtener más información sobre las etiquetas, consulta la descripción general de las etiquetas en la documentación de Resource Manager.

Usar etiquetas para aplicar políticas de cortafuegos de red

Puedes usar etiquetas para aplicar de forma condicional políticas de cortafuegos de red globales o regionales a tus nodos de GKE. Debes asignar el propósito GCE_FIREWALL a las etiquetas que quieras usar con las políticas de cortafuegos de red. Cuando aplicas etiquetas de propósito de firewall a clústeres o grupos de nodos de GKE, GKE adjunta automáticamente esas etiquetas a las máquinas virtuales (VMs) de Compute Engine correspondientes.

Las etiquetas de las políticas de cortafuegos de red sustituyen a las etiquetas de red, que son metadatos que cualquier persona puede asociar a las VMs de Compute Engine subyacentes para aplicar las reglas de cortafuegos de la nube privada virtual y que no admiten el control de acceso de gestión de identidades y accesos. Si actualmente usas etiquetas de red con reglas de cortafuegos de VPC, te recomendamos que migres a políticas de cortafuegos de red y uses etiquetas de cortafuegos seguras. Para ver una comparación detallada, consulta Comparar etiquetas de red con etiquetas en este documento.

Flujo de trabajo de etiquetas de políticas de cortafuegos de red

Para usar etiquetas con políticas de cortafuegos de red en GKE, haz lo siguiente:

  1. Para crear una etiqueta, sigue estos pasos:

    1. Define una clave de etiqueta a nivel de organización o proyecto, como env.
    2. Define los posibles valores de la etiqueta de la clave, como dev, staging y prod.
    3. Designa la etiqueta para usarla en la política de cortafuegos de red.

  2. Concede a los usuarios acceso para interactuar con la etiqueta de cortafuegos.

  3. Aplica pares clave-valor de etiquetas a clústeres o grupos de nodos de GKE específicos. GKE adjunta automáticamente las etiquetas a las VMs de Compute Engine subyacentes para aplicar la política de cortafuegos.

Antes de empezar

Antes de empezar, asegúrate de que has realizado las siguientes tareas:

  • Habilita la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Si quieres usar Google Cloud CLI para esta tarea, instálala y, a continuación, inicialízala. Si ya has instalado la gcloud CLI, obtén la versión más reciente ejecutando gcloud components update.

Requisitos y limitaciones

  • Las etiquetas de las políticas de cortafuegos de red se admiten en GKE 1.28 y versiones posteriores. Si utilizas una versión de GKE anterior a la 1.28, usa etiquetas de red con reglas de cortafuegos de VPC.
  • El clúster de GKE y la etiqueta deben estar asociados a la misma red de VPC.
  • En los clústeres estándar, cada grupo de nodos admite hasta cinco etiquetas de cortafuegos asociadas.
  • Los clústeres de Autopilot admiten hasta cinco etiquetas de cortafuegos.
  • GKE rechaza las claves de etiquetas que usan el prefijo gke-managed.
  • Debes crear los pares clave-valor de la etiqueta antes de poder adjuntarlos a clústeres o grupos de nodos.

Funciones y permisos de IAM

Para obtener los permisos que necesitas para usar etiquetas en las políticas de cortafuegos de GKE, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos:

Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.

Crear etiquetas

Para poder adjuntar etiquetas a clústeres o nodos, estas deben existir. Para crear una etiqueta, consulta Usar etiquetas en cortafuegos en la documentación de Cloud NGFW.

Por ejemplo, para crear una etiqueta de cortafuegos con ámbito de proyecto, ejecuta los siguientes comandos:

  1. Crea la clave de la etiqueta:

    gcloud resource-manager tags keys create TAG_KEY \
        --parent=projects/PROJECT_ID \
        --purpose=GCE_FIREWALL \
        --purpose-data=network=PROJECT_ID/NETWORK_NAME
    

    Haz los cambios siguientes:

    • TAG_KEY: el nombre de la clave de la etiqueta, como env
    • PROJECT_ID: tu ID de proyecto Google Cloud
    • NETWORK_NAME: el nombre de la red de VPC que usarás con la etiqueta
  2. Obtén el ID de la clave de la etiqueta:

    gcloud resource-manager tags keys describe PROJECT_ID/TAG_KEY \
        --format="value(name)"
    

    El resultado es tagKeys/KEY_ID, donde KEY_ID es el ID numérico de la clave. Anota este ID para más adelante.

  3. Añade un valor a la clave de la etiqueta:

    gcloud resource-manager tags values create TAG_VALUE \
        --parent=tagKeys/KEY_ID
    

    Sustituye TAG_VALUE por el nombre de un valor permitido para esa clave de etiqueta, como dev.

Usar la sintaxis de etiquetas correcta en los comandos de la CLI de gcloud

Cuando hagas referencia a etiquetas con gcloud CLI, debes dar formato a los pares clave-valor con una de las siguientes sintaxis:

Sintaxis de las etiquetas
tagKeys/KEY_ID=tagValues/VALUE_ID

Haz los cambios siguientes:

  • KEY_ID: ID de clave numérica
  • VALUE_ID: ID de valor numérico

Por ejemplo, tagKeys/123456789=tagValues/987654321.

ORGANIZATION_ID/TAG_KEY=TAG_VALUE

Haz los cambios siguientes:

  • ORGANIZATION_ID: tu ID de organización numérico Google Cloud
  • TAG_KEY: el nombre de la clave de etiqueta que has creado
  • TAG_VALUE: el nombre del valor de la etiqueta que has creado

Por ejemplo, 12345678901/env=dev.

PROJECT_ID/TAG_KEY=TAG_VALUE

Haz los cambios siguientes:

  • PROJECT_ID: tu ID de proyecto Google Cloud
  • TAG_KEY: el nombre de la clave de etiqueta que has creado
  • TAG_VALUE: el nombre del valor de la etiqueta que has creado

Por ejemplo, example-project/env=dev.

PROJECT_NUMBER/TAG_KEY=TAG_VALUE

Haz los cambios siguientes:

  • PROJECT_ID: el identificador numérico de tu Google Cloud proyecto
  • TAG_KEY: el nombre de la clave de etiqueta que has creado
  • TAG_VALUE: el nombre del valor de la etiqueta que has creado

Por ejemplo, 11223344556/env=dev.

Etiquetas de destino con políticas de cortafuegos

Después de crear etiquetas, puedes hacer referencia a pares clave-valor específicos en las reglas de la política de cortafuegos. Para obtener instrucciones, consulta Usar etiquetas en firewalls.

Conceder permisos de gestión de identidades y accesos a agentes de servicio

Para que GKE adjunte automáticamente etiquetas a los nodos nuevos durante los eventos de escalado vertical, debes asignar los roles de gestión de identidades y accesos correspondientes a las cuentas de servicio gestionadas por Google Cloud, también llamadas agentes de servicio.

  1. Concede el rol Usuario de etiquetas (roles/resourcemanager.tagUser) al agente de servicio de Kubernetes Engine:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
        --role=roles/resourcemanager.tagUser \
        --condition=None
    

    Sustituye PROJECT_NUMBER por el número de proyecto del clúster. Google CloudPara encontrar el número de proyecto, ejecuta el siguiente comando:

    gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    
  2. Asigna el rol de administrador de retenciones de etiquetas (roles/resourcemanager.tagHoldAdmin) al agente de servicio de Kubernetes Engine para el par clave-valor de la etiqueta:

    gcloud resource-manager tags values add-iam-policy-binding PROJECT_ID/TAG_KEY/TAG_VALUE \
        --member=serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
        --role=roles/resourcemanager.tagHoldAdmin
    

    Este rol permite que el agente de servicio impida que se elimine la etiqueta si el par clave-valor sigue en uso en GKE.

  3. Concede el rol de usuario de etiquetas (roles/resourcemanager.tagUser) al agente de servicio de las APIs de Google:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER@cloudservices.gserviceaccount.com \
        --role=roles/resourcemanager.tagUser \
        --condition=None
    

Conceder roles de gestión de identidades y accesos adicionales para etiquetas fuera del proyecto

Para usar etiquetas que pertenezcan a una organización o a un proyecto distinto del proyecto del clúster, sigue estos pasos adicionales:

  1. Asigna el rol Usuario de etiquetas (roles/resourcemanager.tagUser) al acceso del agente de servicio de Kubernetes Engine para las etiquetas del recurso principal:

    gcloud resource-manager tags keys add-iam-policy-binding PARENT_RESOURCE/TAG_KEY \
        --member=serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
        --role=roles/resourcemanager.tagUser \
        --condition=None
    

    Haz los cambios siguientes:

    • PARENT_RESOURCE: el ID del proyecto o el ID de la organización del recurso propietario de esa etiqueta
    • PROJECT_NUMBER: el número de proyecto del clúster
  2. Asigna el rol Usuario de etiquetas (roles/resourcemanager.tagUser) al acceso de agente de servicio de las APIs de Google para las etiquetas del recurso principal:

    gcloud resource-manager tags keys add-iam-policy-binding PARENT_RESOURCE/TAG_KEY \
        --member=serviceAccount:PROJECT_NUMBER@cloudservices.gserviceaccount.com \
        --role=roles/resourcemanager.tagUser \
        --condition=None
    
  3. Asigna el rol Administrador de retenciones de etiquetas (roles/resourcemanager.tagHoldAdmin) a la cuenta de servicio de Kubernetes Engine para el par clave-valor de la etiqueta:

    gcloud resource-manager tags values add-iam-policy-binding PARENT_RESOURCE/TAG_KEY/TAG_VALUE \
        --member=serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
        --role=roles/resourcemanager.tagHoldAdmin
    

Adjuntar etiquetas de cortafuegos a clústeres de Autopilot

Las etiquetas de cortafuegos se adjuntan a los clústeres de Autopilot a nivel de clúster. GKE aplica automáticamente estas etiquetas a nivel de clúster a todos los nodos.

Asignar etiquetas al crear un clúster de Autopilot

Ejecuta el siguiente comando:

gcloud beta container clusters create-auto CLUSTER_NAME \
    --location=LOCATION \
    --autoprovisioning-resource-manager-tags=TAG1,TAG2,...

Haz los cambios siguientes:

  • CLUSTER_NAME: el nombre del nuevo clúster.
  • LOCATION: la región de Compute Engine del clúster.
  • TAG1,TAG2,...: conjunto de pares clave-valor separados por comas que se van a adjuntar. Cada par clave-valor debe usar una sintaxis admitida, tal como se describe en la sección Sintaxis de las etiquetas en los comandos. Por ejemplo, example-project/env=dev,1234567901/team=sre.

Asignar etiquetas a clústeres de Autopilot

Ejecuta el siguiente comando:

gcloud beta container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --autoprovisioning-resource-manager-tags=TAG1,TAG2,...

Cuando actualizas las etiquetas de un clúster, GKE sobrescribe las etiquetas de todos los nodos.

Adjuntar etiquetas de cortafuegos a clústeres y grupos de nodos estándar

El método que utilices para adjuntar etiquetas dependerá de si quieres que otros grupos de nodos del clúster hereden las etiquetas, como se indica a continuación:

Etiquetas de cortafuegos de clústeres estándar
--autoprovisioning-resource-manager-tags

Ajuste a nivel de clúster

GKE aplica las etiquetas a todos los grupos de nodos aprovisionados automáticamente nuevos del clúster.

Si usas esta marca en un clúster, GKE no aplicará las etiquetas a los grupos de nodos del clúster. Los grupos de nodos mantienen las etiquetas que ya se habían aplicado antes de la actualización. Para actualizar las etiquetas de los grupos de nodos, usa la marca --resource-manager-tags.

--resource-manager-tags

Ajuste a nivel de grupo de nodos

GKE aplica las etiquetas al grupo de nodos especificado. Si usas esta marca durante la creación del clúster, GKE aplica las etiquetas al grupo de nodos predeterminado que crea GKE. Si usas esta marca en un grupo de nodos aprovisionado automáticamente, GKE sobrescribe las etiquetas que ya tenga el grupo de nodos.

Adjuntar etiquetas de cortafuegos a clústeres estándar

Puedes adjuntar etiquetas a clústeres estándar nuevos o que ya tengas. Cuando adjuntas etiquetas a un clúster completo, GKE considera que estas etiquetas se han definido a nivel de clúster .

Asociar etiquetas a un clúster estándar nuevo con aprovisionamiento automático de nodos

GKE usa etiquetas a nivel de clúster para los nodos aprovisionados automáticamente de forma predeterminada. El grupo de nodos predeterminado que crea GKE en el clúster no se aprovisiona automáticamente y no obtiene esas etiquetas.

gcloud beta container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --autoprovisioning-resource-manager-tags=TAG1,TAG2,... \
    --enable-autoprovisioning \
    --max-cpu=MAX_CPU \
    --max-memory=MAX_MEMORY

Haz los cambios siguientes:

  • CLUSTER_NAME: el nombre del nuevo clúster
  • LOCATION: la región o zona de Compute Engine del clúster
  • TAG1,TAG2,...: conjunto de pares clave-valor separados por comas que se van a adjuntar. Cada par clave-valor debe usar una sintaxis admitida, tal como se describe en la sección Sintaxis de las etiquetas en los comandos. Por ejemplo, example-project/env=dev,1234567901/team=sre.
  • MAX_CPU: número máximo de núcleos del clúster
  • MAX_MEMORY: capacidad de memoria máxima del clúster en gigabytes

Asignar etiquetas al habilitar el aprovisionamiento automático de nodos en un clúster

GKE solo aplica estas etiquetas a los nuevos grupos de nodos aprovisionados automáticamente. Los grupos de nodos conservan las etiquetas que tenían antes de la actualización.

  1. Adjunta etiquetas al clúster:

    gcloud beta container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --autoprovisioning-resource-manager-tags=TAG1,TAG2,...
    
  2. Habilita el aprovisionamiento automático de nodos en el clúster:

    gcloud beta container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --enable-autoprovisioning \
        --max-cpu=MAX_CPU \
        --max-memory=MAX_MEMORY
    

Adjuntar etiquetas de cortafuegos a grupos de nodos

Puedes asociar etiquetas a grupos de nodos nuevos o ya creados, independientemente de si usan el aprovisionamiento automático de nodos. GKE considera que estas etiquetas son un ajuste a nivel de grupo de nodos.

Asignar etiquetas al grupo de nodos predeterminado

GKE añade las etiquetas que especifiques con la marca --resource-manager-tags cuando crees un clúster al grupo de nodos predeterminado que GKE crea en el clúster.

gcloud beta container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --resource-manager-tags=TAG1,TAG2,...

Haz los cambios siguientes:

  • CLUSTER_NAME: el nombre del nuevo clúster
  • LOCATION: la región o zona de Compute Engine del clúster
  • TAG1,TAG2,...: conjunto de pares clave-valor separados por comas que se van a adjuntar. Cada par clave-valor debe usar una sintaxis admitida, tal como se describe en la sección Sintaxis de las etiquetas en los comandos. Por ejemplo, example-project/env=dev,1234567901/team=sre.

Asociar etiquetas a un nuevo grupo de nodos

Cuando usas la marca --resource-manager-tags durante la creación del grupo de nodos, GKE adjunta las etiquetas que especifiques a ese grupo de nodos.

gcloud beta container node-pools create NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=LOCATION \
    --resource-manager-tags=TAG1,TAG2,...

Haz los cambios siguientes:

  • NODE_POOL_NAME: el nombre del nuevo grupo de nodos
  • CLUSTER_NAME: el nombre del clúster
  • LOCATION: la región o zona de Compute Engine del clúster
  • TAG1,TAG2,...:conjunto de pares clave-valor separados por comas que se van a adjuntar. Cada par clave-valor debe usar una sintaxis admitida, tal como se describe en la sección Sintaxis de las etiquetas en los comandos. Por ejemplo, example-project/env=dev,1234567901/team=sre.

Asignar etiquetas a un grupo de nodos

Cuando actualizas las etiquetas de un grupo de nodos con la marca --resource-manager-tags, GKE sobrescribe las etiquetas que ya tenga ese grupo de nodos. Puede usar este comando para actualizar las etiquetas de los grupos de nodos aprovisionados automáticamente.

gcloud beta container node-pools update NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=LOCATION \
    --resource-manager-tags=TAG1,TAG2,...

Sustituye NODE_POOL_NAME por el nombre del grupo de nodos que quieras actualizar.

Activar o desactivar la configuración de aprovisionamiento automático en clústeres y grupos de nodos

Cuando actualizas las etiquetas a nivel de clúster, GKE aplica esas etiquetas nuevas a todos los grupos de nodos nuevos del clúster y conserva las etiquetas que se habían adjuntado a los grupos de nodos que ya existían.

Cuando actualice grupos de nodos para habilitar o inhabilitar el aprovisionamiento automático de nodos, tenga en cuenta las siguientes implicaciones para las etiquetas:

  • Cuando habilitas o inhabilitas el aprovisionamiento automático de nodos, el grupo de nodos conserva las etiquetas que ya tenga. GKE no sobrescribe estas etiquetas con etiquetas a nivel de clúster, ni siquiera durante la recreación de nodos.
  • Si actualizas manualmente las etiquetas de grupos de nodos específicos, GKE sobrescribe las etiquetas que ya tengan esos grupos de nodos con las que hayas especificado.

Verificar las etiquetas de cortafuegos en el clúster

  • Lista las etiquetas de los clústeres de Autopilot:

    gcloud beta container clusters describe CLUSTER_NAME \
        --location=LOCATION \
        --format="value(nodePoolAutoConfig.resourceManagerTags)"
    
  • Lista las etiquetas de grupos de nodos específicos:

    gcloud beta container node-pools describe NODE_POOL_NAME \
      --cluster=CLUSTER_NAME \
      --location=LOCATION \
      --format="value(config.resourceManagerTags)"
    

Desasociar etiquetas de cortafuegos de clústeres y grupos de nodos

Para quitar etiquetas de cortafuegos de clústeres y grupos de nodos, actualiza el recurso con un valor vacío para las etiquetas.

Desasociar etiquetas de clústeres de Autopilot

Ejecuta el siguiente comando:

gcloud beta container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --autoprovisioning-resource-manager-tags=

Desasociar etiquetas de grupos de nodos

  1. Desasocia las etiquetas de aprovisionamiento automático de nodos a nivel de clúster:

    gcloud beta container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --autoprovisioning-resource-manager-tags=
    

    GKE no adjuntará etiquetas a los nuevos grupos de nodos aprovisionados automáticamente.

  2. Desasocia las etiquetas del grupo de nodos:

    gcloud beta container node-pools update NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --location=LOCATION \
        --resource-manager-tags=
    

    GKE elimina las etiquetas del grupo de nodos.

Eliminar claves y valores de etiquetas

Para eliminar una clave o un valor de etiqueta, asegúrate de que la etiqueta no esté asociada a ningún recurso. A continuación, consulta la sección Eliminar etiquetas de la documentación de Resource Manager.

Comparar etiquetas de red con etiquetas

Usar etiquetas para aplicar políticas de cortafuegos tiene ventajas significativas en cuanto a seguridad y usabilidad en comparación con las etiquetas de red. Del mismo modo, las políticas de cortafuegos de red mejoran las funciones de las reglas de cortafuegos de VPC, ya que facilitan la aplicación de reglas de cortafuegos en organizaciones, carpetas, proyectos o redes completas.

Usar etiquetas con políticas de cortafuegos de red es una forma más segura y escalable de gestionar el acceso a tus entornos de GKE en toda tu organización. Puede usar etiquetas de red en el mismo clúster que las etiquetas, aunque no puede usarlas para aplicar políticas de firewall de red.

Para ver una comparación detallada entre las etiquetas y las etiquetas de red, consulta el artículo Comparación de etiquetas y etiquetas de red de la documentación de Cloud NGFW.

Diferencias funcionales en los grupos de nodos aprovisionados automáticamente

En los clústeres Autopilot y en los grupos de nodos Estándar que no usan el aprovisionamiento automático de nodos, las etiquetas de red y las etiquetas se comportan de forma similar. En la siguiente tabla se muestran las diferencias funcionales entre las etiquetas de red y las etiquetas de los grupos de nodos aprovisionados automáticamente en los clústeres estándar:

Acción Comportamiento de las etiquetas de red Comportamiento de las etiquetas
GKE aprovisiona automáticamente un grupo de nodos GKE aplica las etiquetas de red a nivel de clúster GKE aplica las etiquetas a nivel de clúster
Actualizas las etiquetas o las etiquetas de red de un grupo de nodos aprovisionado automáticamente
  • Si existen etiquetas de red a nivel de clúster, la operación de actualización falla
  • Si no existen etiquetas de red a nivel de clúster, GKE sobrescribe las etiquetas de red del grupo de nodos
GKE sobrescribe las etiquetas del grupo de nodos independientemente de si existen etiquetas a nivel de clúster
Actualiza las etiquetas o las etiquetas de red de todo el clúster GKE sobrescribe las etiquetas de red de los grupos de nodos aprovisionados automáticamente nuevos y antiguos del clúster. GKE aplica las nuevas etiquetas a nivel de clúster a los grupos de nodos aprovisionados automáticamente. Los grupos de nodos aprovisionados automáticamente conservan las etiquetas que tenían antes de la actualización.

Siguientes pasos