Aplica políticas de firewall de forma selectiva 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. Si quieres obtener información sobre cómo usar etiquetas en GKE para otros fines, como la administración de facturación o las políticas de IAM condicionales, consulta Administra recursos de GKE mediante etiquetas.

Acerca de las etiquetas

Las etiquetas son pares clave-valor que te permiten anotar y administrar tus recursos de Google Cloud a nivel de organización o de proyecto. Puedes usar etiquetas para organizar tus recursos y aplicar políticas de forma condicional, como firewalls o políticas de IAM. Puedes usar el control de acceso de IAM para definir quién puede adjuntar, crear, actualizar o borrar etiquetas.

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

Usa etiquetas para aplicar políticas de firewall de red

Puedes usar etiquetas para aplicar de forma condicional políticas de firewall de red globales o regionales a tus nodos de GKE. Debes designar el propósito GCE_FIREWALL para las etiquetas que deseas usar con las políticas de firewall 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 para las políticas de firewall de red reemplazan la necesidad de usar Etiquetas de red, que son metadatos que cualquiera puede adjuntar a las VMs de Compute Engine subyacentes para la aplicación de la regla de firewall de nube privada virtual y que no son compatibles con el control de acceso de IAM. Si actualmente usas etiquetas de red con reglas de firewall de VPC, te recomendamos que migres a las políticas de firewall de red y uses etiquetas de firewall seguras. Para obtener una comparación detallada, consulta Compara etiquetas de red con etiquetas en este documento.

Etiquetas para el flujo de trabajo de las políticas de firewall de red

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

  1. Crear etiqueta:

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

  2. Otorga a los usuarios acceso para interactuar con la etiqueta de firewall.

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

Antes de comenzar

Antes de comenzar, asegúrate de haber realizado las siguientes tareas:

  • Habilita la API de Kubernetes Engine de Google.
  • Habilitar la API de Kubernetes Engine de Google
  • Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta gcloud components update para obtener la versión más reciente.

Requisitos y limitaciones

  • Las etiquetas para las políticas de firewall de red son compatibles con la versión 1.28 de GKE y las posteriores. Si usas una versión de GKE anterior a la 1.28, usa etiquetas de red con reglas de firewall de VPC en su lugar.
  • El clúster de GKE debería haberse creado originalmente con la versión 1.28 o posterior de GKE. La actualización de un clúster de una versión anterior a la 1.28 a la versión 1.28 o posterior no habilitará las etiquetas.
  • El clúster de GKE y la etiqueta deben estar asociados con la misma red de VPC.
  • En los clústeres estándar, cada grupo de nodos admite hasta cinco etiquetas de firewall adjuntas.
  • Los clústeres de Autopilot admiten hasta cinco etiquetas de firewall.
  • GKE rechaza las claves de etiqueta 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.

Permisos y roles de IAM

Para obtener los permisos que necesitas usar las etiquetas para las políticas de firewall en GKE, pídele a tu administrador que te otorgue los siguientes roles de IAM:

Si quieres obtener más información para otorgar roles, consulta Administra el acceso.

También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.

Crear etiquetas

Las etiquetas deben existir para que puedas adjuntarlas a clústeres o nodos. A fin de crear un rótulo identificador, consulta Usa etiquetas para firewalls en la documentación de Cloud NGFW.

Por ejemplo, para crear una etiqueta de firewall con alcance de proyecto, ejecuta los siguientes comandos:

  1. Crea la clave de etiqueta:

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

    Reemplaza lo siguiente:

    • TAG_KEY: El nombre de la clave de etiqueta, como env
    • PROJECT_ID: El ID del proyecto de 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 etiqueta:

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

    El resultado es tagKeys/KEY_ID, en el que KEY_ID es un ID numérico de la clave. Toma nota de este ID para usarlo más adelante.

  3. Agrega un valor de etiqueta a la clave de etiqueta:

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

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

Sintaxis de la etiqueta en los comandos de la CLI de gcloud

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

Sintaxis de la etiqueta

tagKeys/KEY_ID=tagValues/VALUE_ID

Reemplaza lo siguiente:

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

Por ejemplo, tagKeys/123456789=tagValues/987654321.


ORGANIZATION_ID/TAG_KEY=TAG_VALUE

Reemplaza lo siguiente:

  • ORGANIZATION_ID: El ID numérico de la organización de Google Cloud.
  • TAG_KEY: El nombre de la clave de etiqueta que creaste.
  • TAG_VALUE: El nombre del valor de la etiqueta que creaste.

Por ejemplo, 12345678901/env=dev.


PROJECT_ID/TAG_KEY=TAG_VALUE

Reemplaza lo siguiente:

  • PROJECT_ID: El ID del proyecto de Google Cloud.
  • TAG_KEY: El nombre de la clave de etiqueta que creaste.
  • TAG_VALUE: El nombre del valor de la etiqueta que creaste.

Por ejemplo, example-project/env=dev.


PROJECT_NUMBER/TAG_KEY=TAG_VALUE

Reemplaza lo siguiente:

  • PROJECT_ID: El identificador numérico del proyecto de Google Cloud.
  • TAG_KEY: El nombre de la clave de etiqueta que creaste.
  • TAG_VALUE: El nombre del valor de la etiqueta que creaste.

Por ejemplo, 11223344556/env=dev.

Etiquetas de destino con políticas de firewall

Después de crear etiquetas, puedes hacer referencia a pares clave-valor específicos en reglas de políticas de firewall. Si deseas obtener instrucciones, consulta Usa etiquetas para los firewalls.

Otorga permisos de IAM a los agentes de servicio

Para que GKE adjunte etiquetas de forma automática a nodos nuevos durante los eventos de escalamiento vertical, debes otorgar los roles de IAM correspondientes a las cuentas de servicio administradas por Google Cloud, también llamadas agentes de servicio.

  1. Otorga el rol de 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
    

    Reemplaza PROJECT_NUMBER por el número de proyecto de Google Cloud del clúster. Para encontrar el número de proyecto, ejecuta el siguiente comando:

    gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    
  2. Otorga el rol de administrador de conservaciones de etiquetas (roles/resourcemanager.tagHoldAdmin) al agente de servicio de Kubernetes Engine para el par clave-valor de 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 evite la eliminación de etiquetas si el par clave-valor aún está en uso en GKE.

  3. Otorga 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
    

Otorga roles de IAM adicionales para las etiquetas fuera del proyecto

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

  1. Otorga el rol de usuario de etiquetas (roles/resourcemanager.tagUser) al agente de servicio de Kubernetes Engine para acceder a las etiquetas del recurso superior:

    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
    

    Reemplaza lo siguiente:

    • PARENT_RESOURCE: el ID del proyecto o el ID de la organización del recurso que posee esa etiqueta
    • PROJECT_NUMBER: es el número del proyecto del proyecto del clúster
  2. Otorga el rol de usuario de etiquetas (roles/resourcemanager.tagUser) al agente de servicio de las APIs de Google acceso para las etiquetas en el recurso superior:

    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. Otorga el rol de administrador de conservaciones de etiquetas (roles/resourcemanager.tagHoldAdmin) al agente de servicio de Kubernetes Engine para el par clave-valor de 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
    

Adjunta etiquetas de firewall a clústeres de Autopilot

Adjunta etiquetas de firewall a los clústeres de Autopilot a nivel de clúster. GKE aplica de forma automática estas etiquetas de nivel de clúster a cada nodo.

Adjunta etiquetas cuando creas un clúster nuevo de Autopilot

Ejecuta el siguiente comando:

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

Reemplaza lo siguiente:

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

Adjunta etiquetas a los clústeres existentes 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 reemplaza las etiquetas existentes en todos los nodos.

Adjunta etiquetas de firewall a clústeres y grupos de nodos estándar

El método que uses para adjuntar etiquetas depende de si deseas que otros grupos de nodos del clúster hereden las etiquetas de la siguiente manera:

Etiquetas de firewall del clúster estándar
--autoprovisioning-resource-manager-tags

Configuración a nivel del clúster

GKE aplica las etiquetas a todos los grupos de nodos nuevos aprovisionados de forma automática en el clúster. Si usas esta marca en un clúster existente, los grupos de nodos existentes conservan las etiquetas que se aplicaron antes de la actualización.

--resource-manager-tags

Configuración 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 aprovisionados de forma automática, GKE reemplaza las etiquetas existentes en el grupo de nodos.

Adjunta etiquetas de firewall a clústeres estándar

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

Adjunta 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 nuevos aprovisionados de forma automática de forma predeterminada. El grupo de nodos predeterminado que GKE crea en el clúster no se aprovisiona de forma automática 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

Reemplaza lo siguiente:

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

Adjunta etiquetas cuando habilites el aprovisionamiento automático de nodos en un clúster existente

GKE solo aplica estas etiquetas a los grupos de nodos nuevos aprovisionados de forma automática. Los grupos de nodos existentes 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
    

Adjunta etiquetas de firewall a grupos de nodos

Puedes adjuntar etiquetas a grupos de nodos nuevos o existentes, sin importar si usan el aprovisionamiento automático de nodos. GKE considera que estas etiquetas son una configuración de nivel de grupo de nodos.

Adjunta etiquetas al grupo de nodos predeterminado

GKE adjunta las etiquetas que especificas con la marca --resource-manager-tags cuando creas 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,...

Reemplaza lo siguiente:

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

Adjunta etiquetas a un grupo de nodos nuevo

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

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

Reemplaza lo siguiente:

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

Adjunta etiquetas a un grupo de nodos existente

Cuando actualizas las etiquetas de un grupo de nodos existente con la marca --resource-manager-tags, GKE reemplaza las etiquetas existentes en ese grupo. Puedes usar este comando para actualizar las etiquetas en los grupos de nodos aprovisionados de forma automática.

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

Reemplaza NODE_POOL_NAME por el nombre del grupo de nodos que deseas actualizar.

Activa o desactiva la configuración de aprovisionamiento automático en clústeres y grupos de nodos existentes

Cuando actualizas 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 adjuntas a los grupos de nodos existentes.

Cuando actualizas grupos de nodos existentes a fin de habilitar o inhabilitar el aprovisionamiento automático de nodos, ten 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 existentes. GKE no reemplaza estas etiquetas por etiquetas a nivel del clúster, incluso durante la recreación de nodos.
  • Si actualizas las etiquetas de forma manual en grupos de nodos específicos, GKE reemplaza las etiquetas existentes por las etiquetas especificadas para ese grupo de nodos.

Verifica las etiquetas de firewall en el clúster

  • Enumera las etiquetas en los clústeres de Autopilot:

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

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

Desconecta etiquetas de firewall de los clústeres y los grupos de nodos

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

Desconecta etiquetas de los clústeres de Autopilot

Ejecuta el siguiente comando:

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

Desconecta etiquetas de grupos de nodos

  1. Desconecta 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 grupos de nodos nuevos aprovisionados de forma automática.

  2. Desconecta las etiquetas del grupo de nodos:

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

    GKE quita las etiquetas existentes de ese grupo de nodos.

Borra claves y valores de etiquetas

Para borrar una clave o un valor de etiqueta, asegúrate de que la etiqueta esté desconectada de todos los recursos. Luego, consulta Borra etiquetas en la documentación de Resource Manager.

Compara etiquetas de red con etiquetas

El uso de etiquetas para la aplicación de la política de firewall tiene beneficios de seguridad y usabilidad significativos en comparación con las etiquetas de red. Del mismo modo, las políticas de firewall de red mejoran las capacidades de las reglas de firewall de VPC, ya que facilitan la aplicación de las reglas de firewall en organizaciones, carpetas, proyectos o redes completas.

Usar etiquetas con políticas de firewall de red es una forma más segura y escalable de administrar el acceso a los entornos de GKE en toda la organización. Puedes usar etiquetas de red en el mismo clúster que las etiquetas, aunque no puedes usar etiquetas de red para aplicar las políticas de firewall de red.

Para obtener una comparación detallada entre las etiquetas y las etiquetas de red, consulta Comparación de etiquetas y etiquetas de red en la documentación de Cloud NGFW.

Diferencias funcionales en los grupos de nodos aprovisionados de forma automática

En los clústeres de 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 tienen un comportamiento similar. En la siguiente tabla, se muestran las diferencias funcionales entre las etiquetas de red y las etiquetas en grupos de nodos aprovisionados automáticamente en 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
Actualiza las etiquetas o las etiquetas de red en un grupo de nodos aprovisionados de forma automática
  • Si existen etiquetas de red a nivel de clúster, la operación de actualización falla
  • Si las etiquetas de red a nivel de clúster no existen, GKE reemplaza las etiquetas de red existentes para el grupo de nodos.
GKE reemplaza las etiquetas existentes para el grupo de nodos sin importar si existen etiquetas a nivel de clúster.
Actualiza las etiquetas o las etiquetas de red de todo el clúster GKE reemplaza las etiquetas de red para los grupos de nodos aprovisionados de forma automática nuevos y existentes en el clúster. GKE aplica las etiquetas de nivel de clúster nuevas a los grupos de nodos nuevos aprovisionados de forma automática. Los grupos de nodos aprovisionados de forma automática conservan las etiquetas que tenían antes de la actualización.

¿Qué sigue?