Usa reglas de firewall

En esta página, se describen los comandos necesarios para trabajar con reglas de firewall y se ofrecen algunos ejemplos de su uso.

Antes de comenzar

Consulta la Descripción general de las reglas de firewall a fin de obtener más información sobre las reglas de firewall, como las reglas implícitas y las reglas generadas por el sistema para las redes predeterminadas.

Antes de configurar las reglas de firewall, revisa los componentes de las reglas de firewall para familiarizarte con los componentes de firewall que se usan en Google Cloud.

Crea reglas de firewall

Las reglas de firewall se definen a nivel de la red y solo se aplican a la red en la que se crean; sin embargo, el nombre que elijas para cada una de ellas debe ser exclusivo del proyecto.

Console

  1. Ve a la página Reglas de Firewall en Google Cloud Console.
    Ir a la página Reglas de firewall
  2. Haz clic en Crear regla de firewall.
  3. Ingresa un Nombre para la regla de firewall.
    Este nombre debe ser único para el proyecto.
  4. Puedes habilitar los registros de reglas de firewall (opcional):
    • Haz clic en Registros > Activados.
    • Haz clic en Activar.
  5. Especifica la Red en la que se implementará la regla de firewall.
  6. Especifica la Prioridad de la regla.
    Mientras más bajo sea el número, más alta será la prioridad.
  7. Para la Dirección del tráfico, elige entrada o salida.
  8. Para Acción en caso de coincidencia, elige permitir o rechazar.
  9. Especifica los Objetivos de la regla.
    • Si deseas que la regla se aplique a todas las instancias de la red, selecciona All instances in the network.
    • Si deseas que la regla se aplique a determinadas instancias por etiquetas de red (de destino), elige Specified target tags y, luego, escribe las etiquetas a las que debe aplicarse la regla en el campo Etiquetas de destino.
    • Si deseas que la regla se aplique a instancias seleccionadas por la cuenta de servicio asociada, selecciona Specified service account, indica si la cuenta de servicio está en el proyecto actual o en otro en Permiso de la cuenta de servicio, y elige o escribe el nombre de la cuenta de servicio en el campo Cuenta de servicio de destino.
  10. Para una regla de entrada, especifica el Filtro de origen:
    • Elige IP ranges y escribe los bloques CIDR en el campo Rangos de IP de origen para definir el origen del tráfico entrante por rangos de direcciones IP. Usa 0.0.0.0/0 para orígenes de cualquier red.
    • Para limitar los orígenes por etiqueta de red, selecciona Source tags y, luego, escribe las etiquetas de red en el campo Etiquetas de origen. Si quieres conocer el límite en la cantidad de etiquetas de origen, consulta Cuotas y límites de VPC. Solo es posible filtrar por etiquetas de origen si el objetivo no está especificado por cuenta de servicio. Si deseas obtener más información, consulta filtrado por cuentas de servicio frente a filtrado por etiquetas de red.
    • Para limitar los orígenes por cuenta de servicio, elige Service account, indica si la cuenta de servicio está en el proyecto actual o en otro en Permiso de la cuenta de servicio, y elige o escribe el nombre de la cuenta de servicio en el campo Cuenta de servicio de origen. Solo es posible filtrar por cuentas de servicio de origen si el objetivo no está especificado por etiqueta de red. Si deseas obtener más información, consulta filtrado por cuentas de servicio frente a filtrado por etiquetas de red.
    • Especifica un Segundo filtro de fuente si así lo deseas. Los filtros de origen secundarios no pueden usar los mismos criterios de filtrado que los principales. Los rangos de IP de origen se pueden usar junto con las etiquetas de origen o la cuenta de servicio de origen. El conjunto de orígenes efectivo es la unión de las direcciones IP del rango de origen y las instancias identificadas por etiquetas de red (o cuentas de servicio).
    • Las etiquetas de origen y la cuenta de servicio de origen no se pueden usar juntas.
  11. Para una regla de salida, especifica el Filtro de destino:
    • Elige IP ranges y escribe los bloques CIDR en el campo Rangos de IP de destino para definir el destino del tráfico saliente por rangos de direcciones IP. Usa 0.0.0.0/0 para incluir todos los destinos posibles.
  12. Define los Protocolos y puertos a los que se aplicará la regla:

    • Selecciona Allow all o Deny all, según la acción, para que la regla se aplique a todos los protocolos y puertos.

    • Define puertos y protocolos específicos:

      • Selecciona tcp a fin de incluir los puertos y el protocolo TCP. Ingresa all o una lista de puertos delimitada por comas, como 20-22, 80, 8080.
      • Selecciona udp para incluir los puertos y el protocolo UDP. Ingresa all o una lista de puertos delimitada por comas, como 67-69, 123.
      • Selecciona Otros protocolos para incluir protocolos como icmp o sctp.
  13. Puedes crear la regla de firewall sin aplicarla, si configuras su estado de aplicación como inhabilitado (opcional). Haz clic en Inhabilitar regla y, luego, selecciona Inhabilitado.

  14. Haz clic en Crear.

gcloud

El comando de gcloud para crear reglas de firewall es el siguiente:

gcloud compute firewall-rules create NAME \
    [--network NETWORK; default="default"] \
    [--priority PRIORITY;default=1000] \
    [--direction (ingress|egress|in|out); default="ingress"] \
    [--action (deny | allow )] \
    [--target-tags TAG,TAG,...] \
    [--target-service-accounts=IAM Service Account,IAM Service Account,...] \
    [--source-ranges CIDR-RANGE,CIDR-RANGE...] \
    [--source-tags TAG,TAG,...] \
    [--source-service-accounts=IAM Service Account,IAM Service Account,...] \
    [--destination-ranges CIDR-RANGE,CIDR-RANGE...] \
    [--rules (PROTOCOL[:PORT[-PORT]],[PROTOCOL[:PORT[-PORT]],...]] | all ) \
    [--disabled | --no-disabled]
    [--enable-logging | --no-enable-logging]

Usa los parámetros como se describe a continuación. Puedes obtener más detalles en la documentación de referencia del SDK.

  • --network La red en la que se creará la regla. Si se omite, la regla se creará en la red default. Si no tienes una red predeterminada o quieres crearla en una red específica, debes usar este campo.
  • --priority Valor numérico que indica la prioridad de la regla. Mientras más bajo sea el número, más alta será la prioridad.
  • --direction La dirección del tráfico, ingress o egress.
  • --action La acción en caso de coincidencia, allow o deny. Se debe usar con la marca --rules.
  • Especifica un objetivo en una de estas tres maneras:
    • Omite --target-tags y --target-service-accounts si la regla se debe aplicar a todos los objetivos de la red.
    • --target-tags Usa esta marca para definir objetivos por etiquetas de red.
    • --target-service-accounts Usa esta marca para definir objetivos por cuentas de servicio asociadas.
  • Para una regla de entrada, especifica un origen:
    • Omite --source-ranges, source-tags y --source-service-accounts si el origen de entrada puede ser cualquiera, 0.0.0.0/0.
    • --source-ranges Usa esta marca para especificar rangos de direcciones IP de origen en formato CIDR.
    • --source-tags Usa esta marca para especificar instancias de origen por etiquetas de red. Solo es posible filtrar por etiquetas de origen si el objetivo no está especificado por cuenta de servicio. Si deseas obtener más información, consulta filtrado por cuentas de servicio frente a filtrado por etiquetas de red.
    • --source-ranges y --source-tags se pueden usar a la vez. Si ambas se especifican, el conjunto de orígenes efectivo consta de la unión de las direcciones IP del rango de origen y las instancias identificadas por etiquetas de red, incluso si las instancias etiquetadas no tienen IP en los rangos de origen.
    • --source-service-accounts Usa esta marca para especificar instancias por las cuentas de servicio que usan. Solo es posible filtrar por cuentas de servicio de origen si el objetivo no está especificado por etiqueta de red. Si deseas obtener más información, consulta filtrado por cuentas de servicio frente a filtrado por etiquetas de red. --source-ranges y --source-service-accounts se pueden usar a la vez. Si se especifican ambos, el conjunto de orígenes efectivo consta de la unión de las direcciones IP del rango de origen y las instancias identificadas por las cuentas de servicio de origen, incluso si las cuentas de servicio de origen no tienen IP en los rangos de origen.
  • Para una regla de salida, especifica un destino:
    • Omite --destination-ranges si el destino de salida puede ser cualquiera, 0.0.0.0/0.
    • --destination-ranges Usa esta marca para especificar rangos de direcciones IP de destino en formato CIDR.
  • --rules Una lista de protocolos y puertos a los que se aplicará la regla. Usa all para que la regla sea aplicable a todos los protocolos y puertos. Requiere la marca --action.
  • Según la configuración predeterminada, las reglas de firewall se crean y aplican de forma automática, pero puedes cambiar este comportamiento.
    • Si se omiten --disabled y --no-disabled, la regla de firewall se crea y se aplica.
    • --disabled Agrega esta marca para crear la regla de firewall, pero no aplicarla. La regla de firewall permanecerá en un estado inhabilitado hasta que actualices la regla de firewall para habilitarla.
    • --no-disabled Agrega esta marca para asegurarte de que la regla de firewall se aplique.
  • Puedes habilitar el Registro de reglas de firewall para una regla cuando la crees o actualices. El Registro de reglas de firewall te permite auditar, verificar y analizar los efectos de tus reglas de firewall. Consulta el Registro de reglas de firewall para obtener más información.

API

Crea una regla de firewall.

POST https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
{
  "name": "FIREWALL_NAME",
  "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
  ... other fields
}

Reemplaza los marcadores de posición por valores válidos:

  • PROJECT_ID es el ID del proyecto en el que se encuentra la red de VPC.
  • NETWORK_NAME es el nombre de la red de VPC en la que se crea la regla de firewall.
  • FIREWALL_NAME es un nombre para la regla de firewall.

  • Para una regla de firewall de entrada, usa los siguientes campos a fin de especificar el origen de entrada: sourceRanges, sourceTags o sourceServiceAccounts. No especifiques ningún campo para usar el rango 0.0.0.0/0. No puedes usar los campos sourceTags y sourceServiceAccounts al mismo tiempo. Sin embargo, puedes usar sourceRanges con sourceTags o sourceServiceAccounts. Si lo haces, la conexión debe coincidir con cualquiera de los dos para que se aplique la regla de firewall.

    Para los campos de destino, si usas el campo sourceTags, no puedes usar el campo targetServiceAccounts. Debes usar el campo targetTags o ningún campo de destino. Del mismo modo, si usas el campo sourceServiceAccounts, no puedes usar el campo targetTags. Si no especificas un campo de destino, la regla se aplica a todos los destinos de la red.

  • Para una regla de firewall de salida, usa el campo destinationRanges a fin de especificar el destino. Si no especificas un destino, Google Cloud usa 0.0.0.0/0. Usa el campo targetTags o targetServiceAccounts para especificar a qué objetivos se aplica la regla. Si no especificas un campo de destino, la regla se aplica a todos los destinos de la red.

Para obtener más información y descripciones de cada campo, consulta el método firewalls.insert.

Actualiza reglas de firewall

Puedes modificar algunos componentes de una regla de firewall, como los protocolos y puertos especificados para la condición de coincidencia. No puedes modificar el nombre, la red, la acción en caso de coincidencia ni la dirección del tráfico de una regla de firewall.

Si necesitas cambiar el nombre, la red, o el componente de acción o dirección, debes borrar la regla y crear una nueva en su lugar.

Console

  1. Ve a la página Reglas de Firewall en Google Cloud Console.
    Ir a la página Reglas de firewall
  2. Haz clic en la regla de firewall que quieres modificar.
  3. Haz clic en Editar.
  4. Modifica todos los componentes editables que necesites.

    En el campo Protocolos y puertos especificados, usa una lista delimitada por punto y coma para especificar varios protocolos.

  5. Haz clic en Guardar.

gcloud

El comando de gcloud para actualizar reglas de firewall es el siguiente:

gcloud compute firewall-rules update NAME \
    [--priority=PRIORITY] \
    [--description=DESCRIPTION] \
    [--target-tags=TAG,...] \
    [--target-service-accounts=IAM Service Account, ...] \
    [ --source-ranges=CIDR_RANGE, ...] \
    [--source-tags=TAG,...] \
    [--source-service-accounts=IAM Service Account, ...] \
    [--destination-ranges=CIDR_RANGE, ...] \
    [--rules=[PROTOCOL[:PORT[-PORT]],…]] \
    [--disabled | --no-disabled]
    [--enable-logging | --no-enable-logging]

Las descripciones de cada marca son las mismas que para crear reglas de firewall y puedes obtener más detalles acerca de cada una en la documentación de referencia del SDK.

API

Usa PATCH para actualizar los siguientes campos: allowed, description, sourceRanges, sourceTags o targetTags. Usa PUT o POST para todos los demás campos.

(PATCH|(POST|PUT)) https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/FIREWALL_NAME
{
  "name": "FIREWALL_NAME",
  "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
  ... other fields
}

Reemplaza los marcadores de posición por valores válidos:

  • PROJECT_ID es el ID del proyecto en el que se encuentra la red de VPC.
  • NETWORK_NAME es el nombre de la red de VPC en la que se encuentra la regla de firewall.
  • FIREWALL_NAME es el nombre de la regla de firewall que se debe actualizar.

Para obtener más información y descripciones de cada campo, consulta los métodos firewalls.patch o firewalls.update.

Enumera las reglas de firewall para una red de VPC

En Cloud Console, puedes enumerar todas las reglas de firewall para tu proyecto o para una red de VPC en particular. Para cada regla de firewall, Cloud Console muestra detalles como el tipo, los objetivos y los filtros de la regla.

Si habilitas el registro de reglas de firewall, Firewall Insights puede proporcionarte estadísticas sobre tus reglas de firewall para ayudarte a comprender mejor y optimizar de forma segura sus parámetros de configuración. Por ejemplo, puedes ver qué reglas allow no se usaron en las últimas 6 semanas. Para obtener más información, consulta Usa la pantalla de detalles de las reglas de firewall en la documentación de Firewall Insights.

Console

Para ver una lista de todas las reglas de firewall de todas las redes en tu proyecto:

Para ver una lista de todas las reglas de firewall de una red en particular, sigue estos pasos:

  1. Ve a la página de redes de VPC en Google Cloud Console.
    Ir a la página Redes de VPC
  2. Haz clic en el Nombre de la red de VPC para ver su página de detalles.
  3. En la página de detalles de la red, haz clic en la pestaña Reglas de firewall.

gcloud

El siguiente comando produce una lista ordenada de las reglas de firewall de una red determinada ([NETWORK_NAME]).

gcloud compute firewall-rules list --filter network=NETWORK_NAME \
    --sort-by priority \
    --format="table(
        name,
        network,
        direction,
        priority,
        sourceRanges.list():label=SRC_RANGES,
        destinationRanges.list():label=DEST_RANGES,
        allowed[].map().firewall_rule().list():label=ALLOW,
        denied[].map().firewall_rule().list():label=DENY,
        sourceTags.list():label=SRC_TAGS,
        targetTags.list():label=TARGET_TAGS
        )"

API

Enumera todas las reglas de firewall para una red determinada.

GET https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/?filter=network="NETWORK_NAME

Reemplaza los marcadores de posición por valores válidos:

  • PROJECT_ID es el ID del proyecto en el que se encuentra la red de VPC.
  • NETWORK_NAME es el nombre de la red de VPC que contiene las reglas de firewall que se deben incluir en la lista.

Para obtener más información, consulta el método firewalls.list.

Enumera las reglas de firewall para una interfaz de red de una instancia de VM

Para cada interfaz de red, Cloud Console enumera todas las reglas de firewall que se aplican a la interfaz y las reglas que están en uso. Las reglas de firewall pueden enmascarar otras reglas, por lo que una interfaz podría no estar usando todas las reglas que se le aplican.

Las reglas de firewall se asocian con una instancia de VM y se aplican a ella mediante el parámetro de objetivo de una regla. Si consultas la lista de todas las reglas que se aplican, puedes verificar si una regla en particular se está aplicando a una interfaz.

Si habilitas el registro de reglas de firewall, Firewall Insights puede proporcionarte estadísticas sobre tus reglas de firewall para ayudarte a comprender mejor y optimizar de forma segura sus parámetros de configuración. Por ejemplo, puedes ver qué reglas de una interfaz se activaron en las últimas 24 horas. Para obtener más información, consulta Usa la pantalla de detalles de la interfaz de red de VM en la documentación de Firewall Insights.

Para visualizar todas las reglas de firewall que se aplican a una interfaz de red específica de una instancia de VM, sigue estos pasos:

  1. Ve a la página Instancias de VM en Google Cloud Console y busca la instancia que deseas ver.
    Ir a la página Instancias de VM
  2. En el menú más acciones de la instancia (), selecciona Ver detalles de la red.
  3. Si una instancia tiene múltiples interfaces de red, selecciona la interfaz de red que quieres ver en la sección Detalles de la interfaz de red.
  4. Haz clic en la pestaña Reglas de firewall para ver todas las reglas que se aplican a la interfaz de red, ordenadas por nombre de regla.

La interfaz de red podría no usar todas las reglas que se aplican a ella. Una regla con un rango más específico o una prioridad mayor podría reemplazar otras reglas. Si consultas las reglas que se están usando, puedes verificar rápidamente qué rangos de IP, protocolos y puertos están abiertos o cerrados a la instancia.

Para ver las reglas que está usando una interfaz de red especifica de una instancia de VM, sigue estos pasos:

  1. Ve a la página Instancias de VM en Google Cloud Console y busca la instancia que deseas ver.
    Ir a la página Instancias de VM
  2. En el menú más acciones de la instancia (), selecciona Ver detalles de la red.
  3. Si una instancia tiene varias interfaces de red, selecciona la interfaz de red que quieres ver en la sección Detalles de la interfaz de red.
  4. En la sección Análisis de red, selecciona la pestaña Análisis de entrada o Análisis de salida.
  5. Mira la tabla, que está ordenada del rango de direcciones IP más específico al menos específico, para determinar si el tráfico desde o hacia una dirección IP específica está permitido.

Visualiza detalles de las reglas de firewall

Puedes inspeccionar una regla de firewall para ver su nombre, red aplicable y componentes, y si la regla está habilitada o inhabilitada.

Console

  1. Enumera tus reglas de firewall. Puedes visualizar una lista de todas las reglas o solo aquellas de una red en particular.
  2. Haz clic en la regla que quieres ver.

gcloud

El siguiente comando describe una regla de firewall individual. Reemplaza [FIREWALL_RULE_NAME] por el nombre de la regla de firewall. Debido a que los nombres de reglas de firewall son únicos del proyecto, no tienes que especificar una red cuando describes una regla existente.

gcloud compute firewall-rules describe [FIREWALL_RULE_NAME]

API

Describe una regla de firewall determinada.

GET https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/FIREWALL_NAME

Reemplaza los marcadores de posición por valores válidos:

  • PROJECT_ID es el ID del proyecto en el que se encuentra la regla de firewall.
  • FIREWALL_NAME es el nombre de la regla de firewall que se debe describir.

Para obtener más información, consulta el método firewalls.get.

Borra reglas de firewall

Console

  1. Enumera tus reglas de firewall. Puedes visualizar una lista de todas las reglas o solo aquellas de una red en particular.
  2. Haz clic en la regla que quieres borrar.
  3. Haz clic en Borrar.
  4. Haz clic en Borrar nuevamente para confirmar.

gcloud

El siguiente comando borra una regla de firewall. Reemplaza [FIREWALL_RULE_NAME] con el nombre de la regla que quieres borrar.

gcloud compute firewall-rules delete [FIREWALL_RULE_NAME]

API

Borra una regla de firewall.

DELETE https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/FIREWALL_NAME

Reemplaza los marcadores de posición por valores válidos:

  • PROJECT_ID es el ID del proyecto en el que se encuentra la regla de firewall.
  • FIREWALL_NAME es el nombre de la regla de firewall que se debe borrar.

Para obtener más información, consulta el método firewalls.delete.

Supervisa reglas de firewall

Puedes habilitar los registros de reglas de firewall para ver qué regla permitió o bloqueó qué tráfico. Consulta Cómo usar los registros de reglas de firewall para obtener instrucciones.

Ejemplos de configuración

El siguiente diagrama muestra un ejemplo de configuración de firewall. La situación implica una my-network que contiene lo siguiente:

  • una subred subnet1 con un rango de IP 10.240.10.0/24
  • una subred subnet2 con un rango de IP 192.168.1.0/24
  • una instancia vm1 en subnet2 con la etiqueta webserver y la IP interna 192.168.1.2
  • una instancia vm2 en subnet2 con la etiqueta database y la IP interna 192.168.1.3
Configuración de red de muestra (haz clic para agrandar)
Configuración de red de muestra (haz clic para agrandar)

Ejemplo 1: Rechaza todas las conexiones TCP de entrada, excepto las del puerto 80 de subnet1

En este ejemplo, se crea un conjunto de reglas de firewall que rechaza todas las conexiones TCP de entrada, excepto las conexiones destinadas al puerto 80 de subnet1.

  1. Crea una regla de firewall para rechazar todo el tráfico de TCP de entrada a instancias etiquetadas con webserver.

    gcloud compute firewall-rules create deny-subnet1-webserver-access \
        --network my-network \
        --action deny \
        --direction ingress \
        --rules tcp \
        --source-ranges 0.0.0.0/0 \
        --priority 1000 \
        --target-tags webserver
    
  2. Crea una regla de firewall para permitir que todas las direcciones IP de subnet1 (10.240.10.0/24) accedan al puerto TCP 80 en las instancias etiquetadas con webserver.

    gcloud compute firewall-rules create vm1-allow-ingress-tcp-port80-from-subnet1 \
        --network my-network \
        --action allow \
        --direction ingress \
        --rules tcp:80 \
        --source-ranges 10.240.10.0/24 \
        --priority 50 \
        --target-tags webserver
    

Ejemplo 2: Rechaza todas las conexiones TCP de salida, excepto aquellas al puerto 80 de vm1

  1. Crea una regla de firewall que rechace todo el tráfico de TCP de salida.

    gcloud compute firewall-rules create deny-all-access \
        --network my-network \
        --action deny \
        --direction egress \
        --rules tcp \
        --destination-ranges 0.0.0.0/0 \
        --priority 1000
    
  2. Crea una regla de firewall para permitir el tráfico TCP destinado al puerto 80 de vm1.

    gcloud compute firewall-rules create vm1-allow-egress-tcp-port80-to-vm1 \
        --network my-network \
        --action allow \
        --direction egress \
        --rules tcp:80 \
        --destination-ranges 192.168.1.2/32 \
        --priority 60
    

Ejemplo 3: Permite las conexiones TCP de salida al puerto 443 de un host externo

Crea una regla de firewall que permita que las instancias etiquetadas con webserver envíen tráfico TCP de salida al puerto 443 de una dirección IP externa de muestra, 192.0.2.5.

gcloud compute firewall-rules create vm1-allow-egress-tcp-port443-to-192-0-2-5 \
    --network my-network \
    --action allow \
    --direction egress \
    --rules tcp:443 \
    --destination-ranges 192.0.2.5/32 \
    --priority 70 \
    --target-tags webserver

Ejemplo 4: Permite las conexiones SSH de vm2 a vm1

Crea una regla de firewall que permita que el tráfico SSH proveniente de instancias con la etiqueta database (vm2) llegue a instancias con la etiqueta webserver (vm1).

gcloud compute firewall-rules create vm1-allow-ingress-tcp-ssh-from-vm2 \
    --network my-network \
    --action allow \
    --direction ingress \
    --rules tcp:22 \
    --source-tags database \
    --priority 80 \
    --target-tags webserver

Ejemplo 5: Permite TCP:1443 de un servidor web a una base de datos mediante cuentas de servicio

Si deseas obtener información adicional acerca de las cuentas de servicio y funciones, consulta Asigna funciones a cuentas de servicio.

Considera la situación presentada en el siguiente diagrama, en la que hay dos aplicaciones con ajuste de escala automático a través de plantillas, una aplicación de servidor web my-sa-web y una aplicación de base de datos “my-sa-db”. Un administrador de seguridad desea permitir flujos TCP en el puerto 1443 de my-sa-web a my-sa-db.

Uso de reglas de firewall en cuentas de servicio (haz clic para agrandar)
Uso de reglas de firewall en cuentas de servicio (haz clic para agrandar)

A continuación, se describen los pasos de configuración, incluida la creación de las cuentas de servicio:

  1. Un EDITOR o PROPIETARIO de proyecto crea las cuentas de servicio my-sa-web y my-sa-db.

    gcloud iam service-accounts create my-sa-web \
        --display-name "webserver service account"
    
    gcloud iam service-accounts create my-sa-db \
        --display-name "database service account"
    
  2. Un PROPIETARIO de proyecto asigna una función serviceAccountUser a un desarrollador de servidor web web-dev@example.com para la cuenta de servicio my-sa-web mediante una política de IAM.

    gcloud iam service-accounts add-iam-policy-binding \
       my-sa-web@my-project.iam.gserviceaccount.com \
       --member='user:web-dev@example.com' \
       --role='roles/iam.serviceAccountUser'
    
  3. Un PROPIETARIO de proyecto asigna al desarrollador de base de datos “db-dev@example.com” una función serviceAccountUser para la cuenta de servicio my-sa-db mediante una política de IAM.

    gcloud iam service-accounts add-iam-policy-binding \
       my-sa-db@my-project.iam.gserviceaccount.com \
       --member='user:db-dev@example.com' \
       --role='roles/iam.serviceAccountUser'
    
  4. El desarrollador web-dev@example.com, que tiene la función de Administrador de instancias, crea una plantilla de instancia de servidor web y autoriza a las instancias a ejecutarse como la cuenta de servicio my-sa-web.

    gcloud compute instance-templates create [INSTANCE_TEMPLATE_NAME]  \
        --service-account my-sa-web@my-project-123.iam.gserviceaccount.com
    
  5. El desarrollador db-dev@example.com, que tiene la función de Administrador de instancias, crea la plantilla de instancia de base de datos y autoriza a las instancias a ejecutarse como la cuenta de servicio my-sa-db.

    gcloud compute instance-templates create [INSTANCE_TEMPLATE_NAME] \
        --service-account my-sa-db@my-project-123.iam.gserviceaccount.com
    
  6. El Administrador de seguridad crea las reglas de firewall mediante cuentas de servicio para permitir el tráfico TCP:1443 de la cuenta de servicio my-sa-web a la cuenta de servicio my-sa-db.

    gcloud compute firewall-rules create [NAME] \
        --network network_a \
        --allow TCP:1443 \
        --source-service-accounts my-sa-web@my-project.iam.gserviceaccount.com \
        --target-service-accounts my-sa-db@my-project.iam.gserviceaccount.com
    

Soluciona problemas

Mensajes de error cuando se crea o actualiza una regla de firewall

Tal vez veas alguno de los siguientes mensajes de error:

  • Should not specify destination range for ingress direction.

    Los rangos de destino no son parámetros válidos para reglas de firewall de entrada. Se supone que las reglas de firewall son de entrada, a no ser que se especifique una dirección de egress. Si creas una regla que no especifica una dirección, se creará como regla de entrada, lo que no permitirá un rango de destino. De igual manera, los rangos fuente no son parámetros válidos para las reglas de salida.

  • Firewall direction cannot be changed once created.

    No puedes cambiar la dirección de una regla de firewall existente. Tienes que crear una regla nueva con los parámetros correctos y, luego, borrar la anterior.

  • Firewall traffic control action cannot be changed once created.

    No puedes cambiar la acción de una regla de firewall existente. Tienes que crear una regla nueva con los parámetros correctos y, luego, borrar la anterior.

  • Service accounts must be valid RFC 822 email addresses. La cuenta de servicio especificada en una regla de firewall debe ser una dirección de correo electrónico con el formato que indica RFC 822.

    gcloud compute firewall-rules create bad --allow tcp --source-service-accounts invalid-email
    

    Creating firewall...failed.
    ERROR: (gcloud.compute.firewall-rules.create) Could not fetch resource:

    • Invalid value for field 'resource.sourceServiceAccounts[0]': 'invalid-email'. Service accounts must be valid RFC 822 email addresses.
  • ServiceAccounts and Tags are mutually exclusive and can't be combined in the same firewall rule. No puedes especificar cuentas de servicio y etiquetas en la misma regla.

    gcloud compute firewall-rules create bad --allow tcp --source-service-accounts test@google.com --target-tags target
    

    Creating firewall...failed.
     ERROR: (gcloud.compute.firewall-rules.create) Could not fetch resource:

    • ServiceAccounts and Tags are mutually exclusive and can't be combined in the same firewall rule.
  • No es posible conectarse a la instancia de VM

    Si no puedes conectarte a la instancia de VM, verifica tus reglas de firewall.

    1. Si estás iniciando la conexión desde otra instancia de VM, enumera las reglas de firewall de salida para esa instancia.

      gcloud compute firewall-rules list --filter network=[NETWORK_NAME] \
          --filter EGRESS \
          --sort-by priority \
          --format="table(
              name,
              network,
              direction,
              priority,
              sourceRanges.list():label=SRC_RANGES,
              destinationRanges.list():label=DEST_RANGES,
              allowed[].map().firewall_rule().list():label=ALLOW,
              denied[].map().firewall_rule().list():label=DENY,
              sourceTags.list():label=SRC_TAGS,
              sourceServiceAccounts.list():label=SRC_SVC_ACCT,
              targetTags.list():label=TARGET_TAGS,
              targetServiceAccounts.list():label=TARGET_SVC_ACCT
              )"
      
    2. Verifica si la IP de destino está rechazada en alguna regla de salida. La regla con la mayor prioridad (con el número de prioridad más bajo) anula las reglas de menor prioridad. En el caso de que haya dos reglas con la misma prioridad, prevalece la regla de rechazo.

    3. Verifica las reglas de firewall de ingreso para la red que contiene la instancia de VM de destino.

      gcloud compute firewall-rules list --filter network=[NETWORK_NAME] \
          --filter INGRESS \
          --sort-by priority \
          --format="table(
              name,
              network,
              direction,
              priority,
              sourceRanges.list():label=SRC_RANGES,
              destinationRanges.list():label=DEST_RANGES,
              allowed[].map().firewall_rule().list():label=ALLOW,
              denied[].map().firewall_rule().list():label=DENY,
              sourceTags.list():label=SRC_TAGS,
              sourceServiceAccounts.list():label=SRC_SVC_ACCT,
              targetTags.list():label=TARGET_TAGS,
              targetServiceAccounts.list():label=TARGET_SVC_ACCT
              )"
      

      Resultado de muestra: Tu resultado dependerá de la lista de reglas de firewall.

      NAME                    NETWORK  DIRECTION  PRIORITY  SRC_RANGES    DEST_RANGES  ALLOW                         DENY  SRC_TAGS  SRC_SVC_ACCT      TARGET_TAGS  TARGET_SVC_ACCT
      default-allow-icmp      default  INGRESS    65534     0.0.0.0/0                  icmp
      default-allow-internal  default  INGRESS    65534     10.128.0.0/9               tcp:0-65535,udp:0-65535,icmp
      default-allow-rdp       default  INGRESS    65534     0.0.0.0/0                  tcp:3389
      default-allow-ssh       default  INGRESS    65534     0.0.0.0/0                  tcp:22
      firewall-with-sa        default  INGRESS    1000                                 tcp:10000                                     test1@google.com               target@google.com
      

    ¿Mi regla de firewall está habilitada o inhabilitada?

    Para ver si una regla de firewall está habilitada o inhabilitada, consulta los detalles de reglas de firewall.

    En Google Cloud Console, busca Enabled o Disabled en Aplicación.

    En el resultado de la herramienta de línea de comandos de gcloud, busca el campo disabled. Si dice disabled:false, la regla está habilitada y se está aplicando. Si dice disabled: true, la regla está inhabilitada.

    ¿Qué regla se está aplicando en una instancia de VM?

    Imagina que agregas una nueva regla de firewall a una red de VPC, lo que permite el tráfico a un servidor de base de datos en 10.1.2.3 por tcp:1433. Después de crear la regla, puedes verificar si se está aplicando de forma correcta en una instancia en particular. Si deseas obtener más información, consulta Enumera las reglas de firewall para una interfaz de red de una instancia de VM.

    En el siguiente ejemplo, la consola muestra la regla database-access en la pestaña Análisis de salida para esta instancia de VM, lo que significa que se permite el tráfico de salida 10.1.2.3 en el puerto 1433. El resto del tráfico de salida en el rango 10.1.0.0/16 se bloquea debido a la regla de firewall deny-database-subnet.

    Tráfico de salida permitido en una instancia de VM (haz clic para agrandar)
    Tráfico de salida permitido en una instancia de VM (haz clic para agrandar)

    Las reglas de firewall con etiquetas de origen no se aplican de inmediato

    Las reglas de firewall de entrada que usan etiquetas de origen pueden demorar en propagarse. Para obtener detalles, consulta las consideraciones relacionadas con las etiquetas de origen para las reglas de firewall de entrada.

    Próximos pasos