Usa estas instrucciones para crear políticas de seguridad de Google Cloud Armor y filtrar el tráfico entrante a tu aplicación. Para obtener información conceptual sobre las políticas de seguridad, consulta la descripción general de la política de seguridad de Cloud Armor.
Antes de comenzar
Antes de configurar las políticas de seguridad, haz lo siguiente:
Asegúrate de estar familiarizado con los conceptos del balanceador de cargas de aplicaciones externo.
Examina tus servicios de backend existentes para determinar cuáles no tienen una política de seguridad adjunta. Estos servicios de backend y sus backends asociados no están protegidos por Cloud Armor. Para agregar la protección que proporciona Cloud Armor, usa las instrucciones de este documento para adjuntar una política de seguridad nueva o existente al servicio de backend.
Configura los permisos de IAM para las políticas de seguridad de Cloud Armor
Las siguientes operaciones requieren el rol de administrador de seguridad de Compute (roles/compute.securityAdmin
) de Identity and Access Management (IAM):
- Configura, modifica, actualiza y borra una política de seguridad de Cloud Armor
- Usa los siguientes métodos de API:
SecurityPolicies insert
SecurityPolicies delete
SecurityPolicies patch
SecurityPolicies addRule
SecurityPolicies patchRule
SecurityPolicies removeRule
Un usuario con el rol de administrador de red de Compute (roles/compute.networkAdmin
) puede realizar las siguientes operaciones:
- Cómo establecer una política de seguridad de Cloud Armor para un servicio de backend
- Usa los siguientes métodos de API:
BackendServices setSecurityPolicy
BackendServices list
(sologcloud
)
Los usuarios con el rol de administrador de seguridad (roles/iam.securityAdmin
) y el rol de administrador de red de Compute pueden ver las políticas de seguridad de Cloud Armor con los métodos de la API de SecurityPolicies
get
, list
y getRule
.
Configura permisos de IAM para funciones personalizadas
En la siguiente tabla, se enumeran los permisos básicos de las funciones de IAM y sus métodos de API asociados.
Permiso de IAM | Métodos de la API |
---|---|
compute.securityPolicies.create |
SecurityPolicies insert |
compute.securityPolicies.delete |
SecurityPolicies delete |
compute.securityPolicies.get |
SecurityPolicies get SecurityPolicies getRule |
compute.securityPolicies.list |
SecurityPolicies list |
compute.securityPolicies.use |
BackendServices setSecurityPolicy |
compute.securityPolicies.update |
SecurityPolicies patch SecurityPolicies addRule SecurityPolicies patchRule SecurityPolicies removeRule |
compute.backendServices.setSecurityPolicy |
BackendServices setSecurityPolicy |
Crea políticas de seguridad
Puedes configurar reglas, expresiones y políticas de seguridad de Cloud Armor con la consola de Trusted Cloud , Google Cloud CLI o la API de REST. Cuando uses gcloud CLI para crear políticas de seguridad, usa la marca --type
para especificar si la política de seguridad es de backend o perimetral.
Si no conoces la configuración de las políticas de seguridad, te recomendamos que consultes ejemplos de políticas de seguridad.
Expresiones de muestra
Las siguientes son expresiones de ejemplo. Para obtener más información sobre las expresiones, consulta la referencia del lenguaje de reglas personalizadas de Cloud Armor.
Si configuras una regla o una expresión que usa códigos de país o región ISO 3166-1 alfa 2, Cloud Armor trata cada código de forma independiente. Las reglas y expresiones de Cloud Armor usan esos códigos de región de forma explícita para permitir o rechazar solicitudes.
La siguiente expresión coincide con las solicitudes de la dirección IP
1.2.3.4
y contiene la stringexample
en el encabezado del usuario-agente:inIpRange(origin.ip, '1.2.3.4/32') && has(request.headers['user-agent']) && request.headers['user-agent'].contains('example')
Como alternativa, puedes hacer coincidir el rango de direcciones IP de un encabezado de dirección IP de cliente personalizado con el atributo
origin.user_ip
:inIpRange(origin.user_ip, '1.2.3.4/32') && has(request.headers['user-agent']) && request.headers['user-agent'].contains('example')
La siguiente expresión coincide con las solicitudes que tienen una cookie con un valor específico:
has(request.headers['cookie']) && request.headers['cookie'].contains('cookie_name=cookie_value')
La siguiente expresión coincide con las solicitudes de la región
AU
:origin.region_code == 'AU'
La siguiente expresión coincide con las solicitudes de la región
AU
que no están en el rango de IP especificado:origin.region_code == "AU" && !inIpRange(origin.ip, '1.2.3.0/24')
La siguiente expresión coincide con las solicitudes con una ruta de acceso de variable numerada a un archivo específico si el URI coincide con una expresión regular:
request.path.matches('/path/[0-9]+/target_file.html')
La siguiente expresión coincide con las solicitudes si el valor decodificado en Base64 del encabezado de
user-id
contiene un valor específico:has(request.headers['user-id']) && request.headers['user-id'].base64Decode().contains('myValue')
En la siguiente expresión, se usa un conjunto de expresiones preconfiguradas para establecer coincidencias con ataques de SQLi:
evaluatePreconfiguredWaf('sqli-stable')
Administra las políticas de seguridad
Usa las siguientes secciones para enumerar, actualizar, borrar o probar las políticas de seguridad de tu proyecto.
Mostrar lista de políticas de seguridad
Usa estas instrucciones para generar una lista de todas las políticas de seguridad de Cloud Armor en el proyecto actual o en un proyecto que especifiques.
Console
En la consola de Trusted Cloud , ve a la página Políticas de Cloud Armor.
Para ver una política en particular, en la página Políticas de seguridad, en la lista de políticas, haz clic en su nombre.
gcloud
gcloud compute security-policies list
Por ejemplo:
gcloud compute security-policies list
NAME my-policy
Para obtener más información, consulta gcloud compute security-policies list
Actualiza las políticas de seguridad
Usa estas instrucciones para actualizar una política de seguridad de Cloud Armor. Por ejemplo, puedes modificar la descripción de la política, el comportamiento de la regla predeterminada, cambiar el servicio de backend de destino o agregar reglas nuevas.
Console
En la consola de Trusted Cloud , ve a la página Políticas de Cloud Armor.
Para actualizar una política en particular, en la página Políticas de seguridad, en la lista de políticas, haz clic en
Menú en la política que quieras actualizar.- Para actualizar la descripción de la política correspondiente a la acción de la regla predeterminada, selecciona Editar, realiza los cambios y haz clic en Actualizar.
- Para agregar una regla, selecciona Agregar regla y, luego, sigue las instrucciones en Agrega reglas a una política de seguridad.
- Para cambiar el servicio de backend de destino de la política, selecciona Aplicar política al destino, haz clic en Agregar destino, selecciona un destino y, luego, haz clic en Agregar.
gcloud
Para actualizar una política de seguridad, usa las siguientes instrucciones de Google Cloud CLI:
- Para actualizar una regla en una política de seguridad, consulta Actualiza una sola regla en una política de seguridad.
- Para agregar una regla a una política de seguridad, consulta Agrega reglas a una política de seguridad.
- Para borrar una regla de una política de seguridad, consulta Borra reglas de una política de seguridad.
- Para actualizar varias reglas en una sola actualización (actualización atómica), consulta Actualiza varias reglas de forma atómica en una política de seguridad.
- Para actualizar los campos que no son reglas en una política de seguridad (como el campo de descripción), consulta Exporta políticas de seguridad y, también, Importa políticas de seguridad.
Borrar políticas de seguridad
Sigue estas instrucciones para borrar una política de seguridad de Cloud Armor. Debes quitar todos los servicios de backend de la política antes de que puedas borrarla.
Console
En la consola de Trusted Cloud , ve a la página Políticas de Cloud Armor.
En la página Políticas de seguridad, junto al nombre de la política de seguridad que deseas borrar, selecciona la casilla de verificación.
En la esquina superior derecha de la página, haz clic en
Borrar.
gcloud
Usa gcloud compute security-policies delete NAME
.
Reemplaza NAME
por el nombre de la política de seguridad:
gcloud compute security-policies delete NAME
Prueba políticas de seguridad
Recomendamos que implementes todas las reglas nuevas en el modo de vista previa y, luego, examines los registros de solicitud para verificar que las políticas y reglas se comporten como se espera.
Administra reglas de políticas de seguridad
Usa las siguientes secciones para enumerar las reglas de la política de seguridad, agregar reglas, actualizar reglas o borrar reglas.
Enumera las reglas en una política de seguridad
Usa estas instrucciones para generar una lista de las reglas en una política de seguridad de Cloud Armor.
Console
En la consola de Trusted Cloud , ve a la página Políticas de Cloud Armor.
En la página Políticas de seguridad, haz clic en el nombre de la política de seguridad. Se muestra la página Detalles de la política y las reglas de políticas se enumeran en la pestaña Reglas en el centro de la página.
gcloud
Usa el siguiente comando de gcloud
para obtener una lista de todas las reglas en una sola política de seguridad junto con una descripción de la política:
gcloud compute security-policies describe NAME \
Usa el siguiente comando de gcloud
para describir una regla con la prioridad especificada en la política de seguridad especificada:
gcloud compute security-policies rules describe PRIORITY \ --security-policy POLICY_NAME
Por ejemplo, en el siguiente comando, se describe la regla con prioridad 1,000 en la política de seguridad my-policy
:
gcloud compute security-policies rules describe 1000 \ --security-policy my-policy
Resultado:
action: deny(403) description: block traffic from 192.0.2.0/24 and 198.51.100.0/24 kind: compute#securityPolicyRule match: srcIpRanges: - '192.0.2.0/24' - '198.51.100.0/24' preview: false priority: 1000
Agrega reglas a una política de seguridad
Usa estas instrucciones para agregar reglas a una política de seguridad de Cloud Armor.
Console
En la consola de Trusted Cloud , ve a la página Políticas de Cloud Armor.
En la página Políticas de seguridad, haz clic en el nombre de la política de seguridad. Se muestra la página Detalles de la política.
En el centro de la página, haga clic en la pestaña Reglas.
Haga clic en Agregar regla.
Ingresa una descripción de la regla (opcional).
Selecciona el modo:
- Modo básico: permite o rechaza el tráfico en función de los rangos o las direcciones IP.
- Modo avanzado: permite o rechaza el tráfico según las expresiones de reglas.
En el campo Coincidencia, especifica las condiciones bajo las cuales se aplica la regla:
Modo básico: Ingresa entre uno (1) y 10 rangos de direcciones IP que deben coincidir en la regla. Puedes agregar un máximo de 10 rangos de direcciones IP. Para conocer los límites, consulta Cuotas y límites de Cloud Armor.
Modo avanzado: ingresa una expresión o subexpresiones que se deben evaluar en las solicitudes entrantes. Para obtener información sobre cómo escribir las expresiones y leer los siguientes ejemplos, consulta la referencia del lenguaje de reglas personalizadas.
La siguiente expresión coincide con las solicitudes de la dirección IP
1.2.3.4
y contiene la stringexample
en el encabezado del usuario-agente:inIpRange(origin.ip, '1.2.3.4/32') && has(request.headers['user-agent']) && request.headers['user-agent'].contains('example')
La siguiente expresión coincide con las solicitudes que tienen una cookie con un valor específico:
has(request.headers['cookie']) && request.headers['cookie'].contains('cookie_name=cookie_value')
La siguiente expresión coincide con las solicitudes de la región
AU
:origin.region_code == 'AU'
La siguiente expresión coincide con las solicitudes de la región
AU
que no están en el rango de IP especificado:origin.region_code == "AU" && !inIpRange(origin.ip, '1.2.3.0/24')
La siguiente expresión coincide con las solicitudes si el URI coincide con una expresión regular:
request.path.matches('/example_path/')
La siguiente expresión coincide con las solicitudes si el valor decodificado en Base64 del encabezado de
user-id
contiene un valor específico:has(request.headers['user-id']) && request.headers['user-id'].base64Decode().contains('myValue')
En la siguiente expresión, se usa un conjunto de expresiones preconfiguradas para establecer coincidencias con los ataques de SQLi:
evaluatePreconfiguredWaf('sqli-stable')
En Acción, selecciona Permitir o Rechazar.
Si configuras una regla para rechazar, selecciona un mensaje Rechazar estado.
Si deseas habilitar el modo de vista previa para la regla, selecciona la casilla de verificación Habilitar.
En el campo Prioridad, ingresa un número entero positivo.
Haga clic en Add.
gcloud
Usa el comando de gcloud compute security-policies rules create PRIORITY
.
Reemplaza PRIORITY
con la prioridad de la regla en la política:
gcloud compute security-policies rules create PRIORITY \ --security-policy POLICY_NAME \ --description DESCRIPTION \ --src-ip-ranges IP_RANGES | --expression EXPRESSION \ --action=[ allow | deny-403 | deny-404 | deny-502 ] \ --preview
Por ejemplo, el siguiente comando agrega una regla para bloquear el tráfico de los rangos de direcciones IP 192.0.2.0/24 y 198.51.100.0/24. La regla tiene una prioridad de 1,000 y es una regla en una política llamada my-policy
.
gcloud compute security-policies rules create 1000 \ --security-policy my-policy \ --description "block traffic from 192.0.2.0/24 and 198.51.100.0/24" \ --src-ip-ranges "192.0.2.0/24","198.51.100.0/24" \ --action "deny-403"
Usa la marca --expression
para especificar una condición en la referencia del lenguaje de reglas personalizadas.
El siguiente comando agrega una regla para permitir el tráfico desde la dirección IP 1.2.3.4
y contiene la string example
en el encabezado del usuario-agente:
gcloud compute security-policies rules create 1000 \ --security-policy my-policy \ --expression "inIpRange(origin.ip, '1.2.3.4/32') && has(request.headers['user-agent']) && request.headers['user-agent'].contains('example')" \ --action allow \ --description "Block User-Agent 'example'"
Con el siguiente comando, se agrega una regla para bloquear solicitudes si la cookie de la solicitud contiene un valor específico:
gcloud compute security-policies rules create 1000 \ --security-policy my-policy \ --expression "has(request.headers['cookie']) && request.headers['cookie'].contains('80=BLAH')" \ --action deny-403 \ --description "Cookie Block"
Con el siguiente comando, se agrega una regla para bloquear solicitudes de la región AU
:
gcloud compute security-policies rules create 1000 \ --security-policy my-policy \ --expression "origin.region_code == 'AU'" \ --action deny-403 \ --description "AU block"
Con el siguiente comando, se agrega una regla para bloquear las solicitudes de la región AU
que no están en el rango de IP especificado:
gcloud compute security-policies rules create 1000 \ --security-policy my-policy \ --expression "origin.region_code == "AU" && !inIpRange(origin.ip, '1.2.3.0/24')" \ --action deny-403 \ --description "country and IP block"
Con el siguiente comando, se agrega una regla para bloquear solicitudes con un URI que coincide con una expresión regular:
gcloud compute security-policies rules create 1000 \ --security-policy my-policy \ --expression "request.path.matches('/example_path/')" \ --action deny-502 \ --description "regex block"
Con el siguiente comando, se agrega una regla para bloquear solicitudes si el valor decodificado en Base64 del encabezado de user-id
contiene un valor específico:
gcloud compute security-policies rules create 1000 \ --security-policy my-policy \ --expression "has(request.headers['user-id']) && request.headers['user-id'].base64Decode().contains('myValue')" \ --action deny-403 \ --description "country and IP block"
Con el siguiente comando, se agrega una regla que usa un conjunto de expresiones preconfiguradas para mitigar los ataques de SQLi:
gcloud compute security-policies rules create 1000 \ --security-policy my-policy \ --expression "evaluatePreconfiguredWaf('sqli-stable')" \ --action deny-403
Actualiza una sola regla en una política de seguridad
Sigue estas instrucciones para actualizar una sola regla en una política de seguridad de Cloud Armor. Para actualizar varias reglas de forma atómica, consulta la actualización de varias reglas de forma atómica en una política de seguridad.
Console
En la consola de Trusted Cloud , ve a la página Políticas de Cloud Armor.
En la página Políticas de seguridad, haz clic en el nombre de la política de seguridad. Se muestra la página Detalles de la política.
En el centro de la página, haga clic en la pestaña Reglas.
Haz clic en
Editar junto a la regla que deseas actualizar. Se abrirá la página Editar regla.Realiza los cambios y, luego, haz clic en Actualizar.
gcloud
Usa este comando para actualizar una regla con la prioridad especificada de una política de seguridad designada. Solo puedes actualizar una política de seguridad a la vez con este comando:
gcloud compute security-policies rules update PRIORITY [ \ --security-policy POLICY_NAME \ --description DESCRIPTION \ --src-ip-ranges IP_RANGES | --expression EXPRESSION \ --action=[ allow | deny-403 | deny-404 | deny-502 ] \ --preview ]
Por ejemplo, con el siguiente comando, se actualiza una regla con una prioridad de 1,111 para permitir el tráfico del rango de direcciones IP 192.0.2.0/24:
gcloud compute security-policies rules update 1111 \ --security-policy my-policy \ --description "allow traffic from 192.0.2.0/24" \ --src-ip-ranges "192.0.2.0/24" \ --action "allow"
Para obtener más información sobre este comando, consulta gcloud compute security-policies rules update
.
Para actualizar la prioridad de una regla, debes usar la API de REST. Para obtener más información, consulta securityPolicies.patchRule
.
Actualiza varias reglas de forma atómica en una política de seguridad
Con una actualización atómica, se aplican cambios a varias reglas en una sola actualización. Si actualizas las reglas una por una, es posible que veas comportamientos no deseados porque puede que las reglas antiguas y las nuevas funcionen en conjunto durante un período breve.
Para actualizar varias reglas de forma atómica, exporta la política de seguridad actual a un archivo JSON o YAML y, luego, modifica el archivo. Usa el archivo modificado para crear una política de seguridad nueva y, luego, cambia la política de seguridad para los servicios de backend relevantes.
gcloud
Exporta la política que deseas actualizar, como se muestra en el siguiente ejemplo:
gcloud compute security-policies export my-policy \ --file-name my-file \ --file-format yaml
La política exportada será similar al siguiente ejemplo:
description: my description fingerprint: PWfLGDWQDLY= id: '123' name: my-policy rules: - action: deny(404) description: my-rule-1 match: expr: expression: evaluatePreconfiguredWaf('xss-stable') versionedExpr: SRC_IPS_V1 preview: false priority: 1 - action: allow description: my-rule-2 match: config: srcIpRanges: - '1.2.3.4' versionedExpr: SRC_IPS_V1 preview: false priority: 2 - action: deny description: default rule kind: compute#securityPolicyRule match: config: srcIpRanges: - '*' versionedExpr: SRC_IPS_V1 preview: false priority: 2147483647 selfLink: https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy
Usa cualquier editor de texto para modificar la política. Por ejemplo, puedes modificar las prioridades de las reglas existentes y agregar una regla nueva:
description: my description fingerprint: PWfLGDWQDLY= id: '123' name: my-policy rules: - action: deny(404) description: my-rule-1 match: expr: expression: evaluatePreconfiguredWaf('xss-stable') versionedExpr: SRC_IPS_V1 preview: false priority: 1 - action: allow description: my-new-rule match: config: srcIpRanges: - '1.2.3.1' versionedExpr: SRC_IPS_V1 preview: false priority: 10 - action: allow description: my-rule-2 match: config: srcIpRanges: - '1.2.3.4' versionedExpr: SRC_IPS_V1 preview: false priority: 11 - action: deny description: default rule kind: compute#securityPolicyRule match: config: srcIpRanges: - '*' versionedExpr: SRC_IPS_V1 preview: false priority: 2147483647 selfLink: https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy
Crea una nueva política de seguridad de Cloud Armor y especifica el nombre y el formato del archivo modificado, como se muestra en el siguiente ejemplo:
gcloud compute security-policies create new-policy \ --file-name modified-policy \ --file-format yaml
Quita la política de seguridad anterior del servicio de backend relevante, como se muestra en el siguiente ejemplo:
gcloud compute backend-services update my-backend \ --security-policy ""
Agrega la nueva política de seguridad al servicio de backend, como se muestra en el siguiente ejemplo:
gcloud compute backend-services update my-backend \ --security-policy new-policy
Si no deseas usar la política anterior, bórrala:
gcloud compute security-policies delete my-policy
Borra reglas de una política de seguridad
Sigue estas instrucciones para borrar reglas de una política de seguridad de Cloud Armor.
Console
En la consola de Trusted Cloud , ve a la página Políticas de Google Cloud Armor.
Haz clic en el nombre de la política de seguridad. Se muestra la página Detalles de la política.
En el centro de la página, en la pestaña Reglas, selecciona la casilla de verificación junto a la regla que deseas borrar.
Haz clic en
Borrar.
gcloud
Usa este comando para quitar una regla con la prioridad especificada de una política de seguridad designada. Solo puedes modificar una política de seguridad a la vez, pero puedes borrar varias reglas al mismo tiempo:
gcloud compute security-policies rules delete PRIORITY [...] [ --security-policy POLICY_NAME \ ]
Por ejemplo:
gcloud compute security-policies rules delete 1000 \ --security-policy my-policy
Cómo adjuntar y quitar políticas de seguridad
Usa las siguientes secciones para adjuntar y quitar políticas de seguridad de los servicios de backend y los buckets de backend.
Vincula una política de seguridad a un servicio de backend
Usa estas instrucciones para vincular una política de seguridad de Cloud Armor a un servicio de backend. Una política de seguridad se puede vincular a más de un servicio de backend, pero un servicio de backend puede tener sólo una de cada tipo de política de seguridad vinculada.
Console
En la consola de Trusted Cloud , ve a la página Políticas de Cloud Armor.
En la página Políticas de seguridad, haz clic en el nombre de la política de seguridad. Se muestra la página Detalles de la política.
En el medio de la página, haz clic en la pestaña Destinos.
Haz clic en Aplicar política a un destino nuevo.
Haga clic en Agregar destino.
En la lista Destino, selecciona un objetivo y, luego, haz clic en Agregar.
gcloud
Cuando adjuntas una política de seguridad de backend a un servicio de backend, usa el comando gcloud compute backend-services
y la marca --security-policy
:
gcloud compute backend-services update my-backend \ --security-policy my-policy
Cuando adjuntes una política de seguridad perimetral a un servicio de backend, usa el comando gcloud compute backend-services
y la marca --edge-security-policy
:
gcloud compute backend-services update my-backend \ --edge-security-policy my-policy
Quita una política de seguridad de un servicio de backend
Usa estas instrucciones para quitar una política de seguridad de backend de Cloud Armor o una política de seguridad perimetral de un servicio de backend.
Console
En la consola de Trusted Cloud , ve a la página Políticas de Cloud Armor.
En la página Políticas de seguridad, haz clic en el nombre de la política de seguridad. Se muestra la página Detalles de la política.
En el medio de la página, haz clic en la pestaña Destinos.
Selecciona el servicio de backend de destino del que deseas quitar la política.
Haz clic en Quitar.
En el mensaje Quitar objetivo, haz clic en Quitar.
gcloud
Cuando quites una política de seguridad de backend, usa el comando gcloud compute
backend-services
y la marca --security-policy
:
gcloud compute backend-services update my-backend \ --security-policy ""
Cuando quites una política de seguridad perimetral, usa el comando gcloud compute
backend-services
y la marca --edge-security-policy
:
gcloud compute backend-services update my-backend \ --edge-security-policy ""