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 al respecto, 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 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.
Cuando creas una regla de firewall, puedes elegir habilitar el registro de reglas de firewall. Si lo habilitas, puedes omitir los campos de metadatos para ahorrar costos de almacenamiento. Para obtener más información, consulta Usa el registro de reglas de firewall.
Console
- Ve a la página Firewall en Google Cloud Console.
Ir a la página Firewall - Haz clic en Crear regla de firewall.
- Ingresa un Nombre para la regla de firewall.
Este nombre debe ser único para el proyecto. - Puedes habilitar los registros de reglas de firewall (opcional):
- Haz clic en Registros > Activados.
- Para omitir los metadatos, expande Detalles de los registros y, luego, borra Incluir metadatos.
- Especifica la Red para la regla de firewall.
- Especifica la Prioridad de la regla.
Mientras más bajo sea el número, más alta será la prioridad. - Para la Dirección del tráfico, elige entrada o salida.
- Para Acción en caso de coincidencia, elige permitir o rechazar.
- 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.
- Si deseas que la regla se aplique a todas las instancias de la red, selecciona
- 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. Usa0.0.0.0/0
para un origen 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. Para obtener más información, consulta la comparación entre el filtrado por cuenta de servicio y por etiqueta 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. Para obtener más información, consulta la comparación entre el filtrado por cuenta de servicio y por etiqueta 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.
- Elige
- 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. Usa0.0.0.0/0
para incluir todos los destinos posibles.
- Elige
Define los Protocolos y puertos a los que se aplica la regla:
Selecciona
Allow all
oDeny all
, según la acción, para que la regla se aplique a todos los protocolos y los puertos de destino.Define protocolos y puertos de destino específicos:
- Selecciona TCP a fin de incluir los puertos de destino y el protocolo TCP. Ingresa
all
o una lista de puertos de destino delimitada por comas, como20-22, 80, 8080
. - Selecciona UDP para incluir los puertos de destino y el protocolo UDP. Ingresa
all
o una lista de puertos de destino delimitada por comas, como67-69, 123
. - Selecciona Otros protocolos para incluir protocolos como
icmp
osctp
.
- Selecciona TCP a fin de incluir los puertos de destino y el protocolo TCP. Ingresa
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.
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] \ [--logging-metadata LOGGING_METADATA]
Usa los parámetros como se describe a continuación. Puedes obtener más detalles en la documentación de referencia de SDK.
--network
: Es la red para la regla. Si se omite, la regla se crea en la reddefault
. Si no tienes una red predeterminada o quieres crearla en una red específica, debes usar este campo.--priority
: Es un 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
: Es la dirección del tráfico: puede seringress
oegress
.--action
: Es la acción en caso de coincidencia;allow
odeny
. Se debe usar con la marca--rules
.- Especifica un objetivo de una de estas tres maneras:
- 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. Para obtener más información, consulta la comparación entre el filtrado por cuenta de servicio y por etiqueta 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. Para obtener más información, consulta la comparación entre el filtrado por cuenta de servicio y por etiqueta 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.
- Omite
- 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.
- Omite
--rules
Una lista de protocolos y puertos de destino a los que se aplica la regla. Usaall
para que la regla sea aplicable a todos los protocolos y los puertos de destino. 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á inhabilitada hasta que la actualices para habilitarla.--no-disabled
Agrega esta marca para asegurarte de que la regla de firewall se aplique.
- Si se omiten
--enable-logging | --no-enable-logging
: 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 estas reglas. Consulta Registro de reglas de firewall para obtener más información.--logging-metadata
: Si habilitas el registro, de forma predeterminada, el registro de reglas de firewall incluye campos de base y metadatos. Puedes omitir los campos de metadatos para ahorrar costos de almacenamiento. Para obtener más información, consulta Usa el registro de reglas de firewall.
API
Crea una regla de firewall.
POST https://compute.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 la entrada:
sourceRanges
,sourceTags
osourceServiceAccounts
. No especifiques ningún campo para usar el rango0.0.0.0/0
. No puedes usar los campossourceTags
ysourceServiceAccounts
al mismo tiempo. Sin embargo, puedes usarsourceRanges
consourceTags
osourceServiceAccounts
. 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 campotargetServiceAccounts
. Debes usar el campotargetTags
o ningún campo de destino. Del mismo modo, si usas el camposourceServiceAccounts
, no puedes usar el campotargetTags
. 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 usa0.0.0.0/0
. Usa el campotargetTags
otargetServiceAccounts
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 los puertos de destino 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
- Ve a la página Firewall en Google Cloud Console.
Ir a la página Firewall - Haz clic en la regla de firewall que quieres modificar.
- Haz clic en Editar.
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 y combinaciones de protocolo y puerto de destino.
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 deseas 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 seis semanas.
Para obtener más información, consulta Usa la pantalla de detalles de las reglas de firewall en la documentación de Estadísticas de firewall.
Console
Para ver una lista de todas las reglas de firewall de todas las redes en tu proyecto, haz lo siguiente:
- Ve a la página Firewall en Google Cloud Console.
Ir a la página Firewall
Para ver una lista de todas las reglas de firewall de una red en particular, haz lo siguiente:
- Ve a la página Redes de VPC en Google Cloud Console.
Ir a la página Redes de VPC - Haz clic en el Nombre de la red de VPC para ver su página de detalles.
- 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://compute.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 enumerarán.
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 usaron en las últimas seis semanas. Para obtener más información, consulta Usa la pantalla de detalles de la interfaz de red de VM en la documentación de Estadísticas de firewall.
Para visualizar todas las reglas de firewall que se aplican a una interfaz de red específica de una instancia de VM, haz lo siguiente:
- 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 - En el menú más acciones de la instancia (
), selecciona Ver detalles de la red.
- 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.
- 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 están en uso, puedes verificar de forma rápida qué rangos de IP, protocolos y puertos de destino están abiertos o cerrados en la instancia.
Para ver las reglas que está usando una interfaz de red especifica de una instancia de VM, haz lo siguiente:
- 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 - En el menú más acciones de la instancia (
), selecciona Ver detalles de la red.
- 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.
- En la sección Análisis de red, selecciona la pestaña Análisis de entrada o Análisis de salida.
- 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.
Visualizar 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
- Enumera tus reglas de firewall. Puedes visualizar una lista de todas las reglas o solo aquellas de una red en particular.
- Haz clic en la regla que quieres ver.
gcloud
El siguiente comando describe una regla de firewall individual. Reemplaza [FIREWALL-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-NAME]
API
Describe una regla de firewall determinada.
GET https://compute.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 deseas describir.
Para obtener más información, consulta el método firewalls.get
.
Borra reglas de firewall
Console
- Enumera tus reglas de firewall. Puedes visualizar una lista de todas las reglas o solo aquellas de una red en particular.
- Haz clic en la regla que quieres borrar.
- Haz clic en Borrar.
- Haz clic en Borrar nuevamente para confirmar.
gcloud
El siguiente comando borra una regla de firewall. Reemplaza [FIREWALL-NAME]
con el nombre de la regla que quieres borrar.
gcloud compute firewall-rules delete [FIREWALL-NAME]
API
Borra una regla de firewall.
DELETE https://compute.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 deseas 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 IP10.240.10.0/24
- una subred
subnet2
con un rango de IP192.168.1.0/24
- una instancia
vm1
ensubnet2
con la etiquetawebserver
y la IP interna192.168.1.2
- una instancia
vm2
ensubnet2
con la etiquetadatabase
y la IP interna192.168.1.3
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
.
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 NETWORK_NAME \ --action deny \ --direction ingress \ --rules tcp \ --source-ranges 0.0.0.0/0 \ --priority 1000 \ --target-tags webserver
Crea una regla de firewall para permitir que todas las direcciones IP de
subnet1
(10.240.10.0/24
) accedan al puerto TCP80
en las instancias etiquetadas conwebserver
.gcloud compute firewall-rules create vm1-allow-ingress-tcp-port80-from-subnet1 \ --network NETWORK_NAME \ --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
Crea una regla de firewall que rechace todo el tráfico de TCP de salida.
gcloud compute firewall-rules create deny-all-access \ --network NETWORK_NAME \ --action deny \ --direction egress \ --rules tcp \ --destination-ranges 0.0.0.0/0 \ --priority 1000
Crea una regla de firewall para permitir el tráfico TCP destinado al puerto
80
devm1
.gcloud compute firewall-rules create vm1-allow-egress-tcp-port80-to-vm1 \ --network NETWORK_NAME \ --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 NETWORK_NAME \ --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 NETWORK_NAME \ --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 las 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 que los flujos de TCP se dirijan al puerto de destino 1443
desde my-sa-web
hasta my-sa-db
.
A continuación, se describen los pasos de configuración, incluida la creación de las cuentas de servicio:
Un EDITOR o PROPIETARIO del proyecto crea las cuentas de servicio
my-sa-web
ymy-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"
Un PROPIETARIO del proyecto asigna al desarrollador del servidor web
web-dev@example.com
una función de serviceAccountUser para la cuenta de serviciomy-sa-web
mediante una política de la administración de identidades y accesos (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'
Un PROPIETARIO del 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'
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 serviciomy-sa-web
.gcloud compute instance-templates create [INSTANCE_TEMPLATE_NAME] \ --service-account my-sa-web@my-project-123.iam.gserviceaccount.com
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 serviciomy-sa-db
.gcloud compute instance-templates create [INSTANCE_TEMPLATE_NAME] \ --service-account my-sa-db@my-project-123.iam.gserviceaccount.com
El Administrador de seguridad crea las reglas de firewall mediante cuentas de servicio para permitir el tráfico
TCP:1443
de la cuenta de serviciomy-sa-web
a la cuenta de serviciomy-sa-db
.gcloud compute firewall-rules create FIREWALL_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 crea como una regla de entrada, que no permite 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.
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 )"
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.
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: El resultado que recibas 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
También puedes ejecutar pruebas de conectividad desde y hacia las instancias de VM pertenecientes a una red de VPC hasta otra red de VPC o una red que no pertenezca a Google Cloud para solucionar problemas en caso de pérdida de tráfico debido a reglas de firewall de entrada o salida. Si quieres obtener más información sobre cómo ejecutar las pruebas de conectividad para solucionar diversos problemas, consulta Ejecuta pruebas de conectividad.
¿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 de esta instancia de VM, lo que significa que se permite el tráfico de salida 10.1.2.3
al puerto de destino 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
.

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
- Consulta la Descripción general de las reglas de firewall.