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. Para aprender a 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 los recursos de Google Cloud a nivel de organización o 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 los nodos de GKE. Debes designar el propósito GCE_FIREWALL para las etiquetas que deseas usar con 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 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 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 de proyecto, como env.
    2. Define los valores de etiqueta posibles 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 clústeres o grupos de nodos específicos de GKE. 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 Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • 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 versiones 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 y la etiqueta deben estar asociados con la misma red de VPC.
  • En los clústeres Standard, 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 las adjuntes a los clústeres o nodos. Si deseas crear una etiqueta, consulta Usa etiquetas para firewalls en la documentación de Cloud NGFW.

Por ejemplo, para crear una etiqueta de firewall a nivel del 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 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 con la gcloud CLI, 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 las reglas de políticas de firewall. Si deseas obtener instrucciones, consulta Usa etiquetas para 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 al proyecto del clúster, realiza los siguientes 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 los clústeres de Autopilot

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

Adjunta etiquetas cuando crees un clúster de Autopilot nuevo

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 comas de pares clave-valor para adjuntar. Cada par clave-valor debe usar una sintaxis compatible, como se describe en la Sintaxis de la etiqueta en la sección de comandos. Por ejemplo, example-project/env=dev,1234567901/team=sre.

Adjunta etiquetas a los clústeres de Autopilot existentes

Ejecuta el siguiente comando:

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

Cuando actualizas las etiquetas en un clúster, GKE reemplaza las etiquetas existentes en todos los nodos.

Adjunta etiquetas de firewall a los clústeres Standard y a los grupos de nodos

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

Adjunta etiquetas de firewall a los clústeres estándar

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

Conecta etiquetas a un clúster Standard 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 comas de pares clave-valor para adjuntar. Cada par clave-valor debe usar una sintaxis compatible, como se describe en la Sintaxis de la etiqueta en la sección de comandos. 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.

Conecta 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 cualquier etiqueta 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 los grupos de nodos

Puedes adjuntar etiquetas a los 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 a 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 comas de pares clave-valor para adjuntar. Cada par clave-valor debe usar una sintaxis compatible, como se describe en la Sintaxis de la etiqueta en la sección de comandos. 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 la etiqueta en la sección de comandos. Por ejemplo, example-project/env=dev,1234567901/team=sre.

Adjunta etiquetas a un grupo de nodos existente

Cuando actualizas las etiquetas en un grupo de nodos existente con la marca --resource-manager-tags, GKE reemplaza las etiquetas existentes en ese grupo de nodos. 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 las etiquetas a nivel de clúster, GKE aplica esas etiquetas nuevas a todos los grupos de nodos nuevos en el clúster y conserva las etiquetas que se adjuntaron a los grupos de nodos existentes.

Cuando actualices grupos de nodos existentes para 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 de clúster, incluso durante la recreación de nodos.
  • Si actualizas de forma manual las etiquetas en grupos de nodos específicos, GKE reemplaza las etiquetas existentes por tus 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 las etiquetas de firewall de los clústeres y los grupos de nodos, actualiza el recurso con un valor vacío para las etiquetas.

Desconecta etiquetas de los clústeres 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 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 políticas 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 reglas de firewall en organizaciones, carpetas, proyectos o redes completas.

El uso de 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 tu organización. Puedes usar etiquetas de red en el mismo clúster que las etiquetas, aunque no puedes usar etiquetas de red para aplicar 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 de Standard que no usan el aprovisionamiento automático de nodos, las etiquetas de red y las etiquetas de instancia tienen un comportamiento similar. En la siguiente tabla, se muestran las diferencias funcionales entre las etiquetas de red y las etiquetas en los grupos de nodos aprovisionados de forma automática en los clústeres Standard:

Acción Comportamiento de las etiquetas de red Comportamiento de las etiquetas
GKE aprovisiona de forma automática un grupo de nodos GKE aplica las etiquetas de red a nivel de clúster GKE aplica las etiquetas de instancia a nivel de clúster
Actualizas las etiquetas de red o las etiquetas de instancia en un grupo de nodos aprovisionado de forma automática.
  • 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 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.
Debes actualizar las etiquetas de red o las etiquetas 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 nuevas etiquetas a nivel de clúster 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?