Configura políticas de seguridad

Media CDN usa las políticas de seguridad de Google Cloud Armor para evitar tráfico desde su lugar a los servicios. Puedes permitir o rechazar solicitudes según el lo siguiente:

  • Direcciones y rangos IPv4 e IPv6 (CIDR)
  • Código de país (ubicación geográfica)
  • Filtrado de capa 7

Estas capacidades te permiten restringir las descargas de contenido a los usuarios en ubicaciones específicas en las que tienes restricciones de licencias de contenido, solo permiten que las direcciones IP corporativas accedan a los extremos de pruebas o de etapa de pruebas, y rechazan una lista de direcciones IP maliciosas conocidas de cliente.

Puedes decorar las solicitudes que Google Cloud Armor permite insertando encabezados con nombres y valores configurables.

Las políticas de seguridad de Google Cloud Armor se aplican a todo el contenido que se entrega Media CDN, incluidos el contenido almacenado en caché y los errores de caché.

Las políticas de seguridad de Google Cloud Armor se configuran Servicio Media CDN: Todas las solicitudes destinadas a la dirección IP de ese servicio Se aplica la política de seguridad de manera coherente en la dirección IP (o los nombres de host). Se les pueden aplicar políticas de seguridad diferentes a los distintos servicios. crear varios servicios para distintas ubicaciones geográficas, según sea necesario.

Para obtener una protección más detallada del contenido a nivel de usuario, te recomendamos usar las URL y cookies firmadas junto con una política de Google Cloud Armor.

Media CDN no considera el encabezado referer durante la evaluación de reglas de las políticas de seguridad de borde de filtrado de encabezados de la capa 7 cuando se establece en cualquiera de los siguientes valores:

  • Varias URLs
  • Una URL relativa
  • URLs absolutas válidas que contengan información del usuario o un componente de fragmento

Configura políticas de seguridad

Usa las siguientes instrucciones para configurar una política de seguridad.

Antes de comenzar

Para adjuntar una política de seguridad de Google Cloud Armor a un servicio de CDN de Media, asegúrate de lo siguiente:

También necesitas los siguientes permisos de Identity and Access Management para autorizar, crear y Conectar políticas de seguridad a un servicio de Media CDN:

  • compute.securityPolicies.addAssociation
  • compute.securityPolicies.create
  • compute.securityPolicies.delete
  • compute.securityPolicies.get
  • compute.securityPolicies.list
  • compute.securityPolicies.update
  • compute.securityPolicies.use

Usuarios que necesitan adjuntar un certificado existente a una Media CDN solo requieren los siguientes permisos de IAM:

  • compute.securityPolicies.get
  • compute.securityPolicies.list
  • compute.securityPolicies.use

El rol roles/networkservices.edgeCacheUser incluye todos estos permisos.

Crear una política de seguridad

Las políticas de seguridad de Google Cloud Armor están compuestas por varias reglas, en las que cada regla define un conjunto de criterios coincidentes (una expresión) para una solicitud y una. Por ejemplo, una expresión puede contener lógica de coincidencia para clientes que se encuentran en la India, con la acción asociada allow. Si una solicitud no coincide con la regla, Google Cloud Armor continúa evaluando la siguiente regla hasta que se prueben todas.

Las políticas de seguridad tienen una regla predeterminada con una acción allow. Predeterminado permite solicitudes que no coinciden con las reglas anteriores. Esto se puede cambiar Regla deny cuando deseas allow solo las solicitudes que coinciden con las reglas anteriores y rechazar todas las demás.

En el siguiente ejemplo, se muestra cómo crear una regla que bloquee a todos los clientes ubicados en Australia con un HTTP 403 y permita todas las demás solicitudes.

gcloud

Para crear una política nueva de tipo CLOUD_ARMOR_EDGE, usa la Comando gcloud compute security-policies create:

gcloud compute security-policies create block-australia \
    --type="CLOUD_ARMOR_EDGE" --project="PROJECT_ID"

Esto crea una política con una regla de permiso predeterminada como mínimo prioridad (priority: 2147483647):

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/securityPolicies/block-australia].

Luego, puedes agregar una regla con una prioridad más alta:

gcloud compute security-policies rules create 1000 \
    --security-policy=block-australia --description "block AU" \
    --expression="origin.region_code == 'AU'" --action="deny-403"

Esta es la salida:

Updated [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/securityPolicies/block-australia].

Terraform

resource "google_compute_security_policy" "default" {
  name        = "block-australia"
  type        = "CLOUD_ARMOR_EDGE"
  description = "block AU"

  rule {
    action      = "deny(403)"
    description = "block AU"
    priority    = "1000"
    match {
      expr {
        expression = "origin.region_code == 'AU'"
      }
    }
  }
  rule {
    action   = "allow"
    priority = "2147483647"
    match {
      versioned_expr = "SRC_IPS_V1"
      config {
        src_ip_ranges = ["*"]
      }
    }
    description = "default rule"
  }
}

Si inspeccionas la política, verás las dos reglas: la primera bloquea las solicitudes que se originan en Australia (origin.region_code == 'AU') y la segunda, la de menor prioridad, que permite que todo el tráfico no coincida con la regla de prioridad más alta (o reglas).

kind: compute#securityPolicy
name: block-australia
rules:
- action: deny(403)
  description: block AU
  kind: compute#securityPolicyRule
  match:
    expr:
      expression: origin.region_code == 'AU'
  preview: false
  priority: 1000
- action: allow
  description: default rule
  kind: compute#securityPolicyRule
  match:
    config:
      srcIpRanges:
      - '*'
    versionedExpr: SRC_IPS_V1
  preview: false
  priority: 2147483647
  ruleNumber: '1'
type: CLOUD_ARMOR_EDGE

Agrega reglas a una política de seguridad

Las políticas de seguridad de Google Cloud Armor son conjuntos de reglas que coinciden Atributos de capa 7 para proteger las aplicaciones externas o de Google Cloud. Cada regla se evalúa con respecto al tráfico entrante.

Estos atributos se pueden usar para solicitudes HTTP en las políticas de seguridad: request.headers, request.method, request.path, request.scheme y request.query Para obtener más información sobre cómo escribir expresiones para reglas de políticas de seguridad, consulta la referencia del lenguaje de reglas personalizadas de Google Cloud Armor.

Una regla de política de seguridad de Google Cloud Armor consiste en una condición de coincidencia y una acción que se realiza cuando se cumple esa condición.

gcloud

Para crear una regla para una política de seguridad, usa el comando 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

Adjunta una política a un servicio

gcloud

Para adjuntar una política existente de Google Cloud Armor Media CDN, usa el Comando gcloud edge-cache services update:

gcloud edge-cache services update MY_SERVICE \
    --edge-security-policy=SECURITY_POLICY

Actualiza una regla en una política de seguridad

Sigue estas instrucciones para actualizar una sola regla en una política de seguridad de Google Cloud Armor. También puedes actualizar de manera atómica varias reglas en una política de seguridad de Google.

gcloud

Usa el comando gcloud compute security-policies rules update:

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 actualizar la prioridad de una regla, debes usar la API de REST. Para obtener más información, consulta el método securityPolicies.patchRule.

Visualiza un adjunto de política

Para revisar qué política se adjunta a un servicio existente, inspecciona (describe) ese servicio.

gcloud

Para ver la política de Google Cloud Armor que está adjunta a un servicio de Media CDN, usa el comando gcloud edge-cache services describe:

gcloud edge-cache services describe MY_SERVICE

El campo edgeSecurityPolicy del servicio describe la política adjunta:

name: "MY_SERVICE"
edgeSecurityPolicy: "SECURITY_POLICY

Quita una política

Para quitar una política existente, actualiza el servicio asociado y pasa un valor como la política.

gcloud

Usa el comando gcloud edge-cache services update:

gcloud edge-cache services update MY_SERVICE 
--edge-security-policy=""

El campo edgeSecurityPolicy ahora se omite del resultado de la gcloud edge-cache services describe MY_SERVICE .

Ejemplos

Considera los siguientes caso de uso de ejemplo detallado.

Ejemplo: Identifica solicitudes bloqueadas

Debes tener habilitado el registro para un Edge determinado Servicio de caché para registrar solicitudes bloqueadas.

Las solicitudes permitidas o denegadas por una política de filtro se registran en Logging. A fin de filtrar las solicitudes rechazadas, la siguiente consulta de Logging para la configuración prod-video-service vería de la siguiente manera:

resource.type="edge_cache_service"
jsonPayload.statusDetails="denied_by_security_policy"

Ejemplo: Personaliza códigos de respuesta

Las reglas de Google Cloud Armor se pueden configurar para que muestren un código de estado específico como la acción asociada con una regla determinada. En la mayoría de los casos, es mejor devuelve un código HTTP 403 (deny-403) para indicar claramente que el cliente que la regla bloquea.

Los códigos de estado admitidos son los siguientes:

  • HTTP 403 (Prohibido)
  • HTTP 404 (No encontrado)
  • HTTP 502 (Puerta de enlace incorrecta)

En el ejemplo siguiente, se muestra cómo configurar el código de estado que se muestra:

Para especificar uno de [allow | deny-403 | deny-404 | deny-502] como la acción asociada con la regla, ejecuta el siguiente comando. En este ejemplo, se configura la regla para que devuelva un error HTTP 502.

gcloud compute security-policies rules create 1000 \
    --security-policy=block-australia --description "block AU" \
    --expression="origin.region_code == 'AU'" --action="deny-502"

Cada regla en una política de seguridad puede definir una respuesta de código de estado diferente.

Ejemplo: Rechaza clientes fuera de un país, excepto las direcciones IP permitidas

Un caso común en la entrega de contenido multimedia es denegar las conexiones de los clientes que están fuera de la región para la que tienes licencias de contenido o mecanismos de pago.

Por ejemplo, podría permitir que solo clientes de la India y clientes que se encuentran en la India cualquier dirección IP que esté en la lista de entidades permitidas, incluidas las de socios de contenido y tus propios empleados, dentro del rango 192.0.2.0/24, y rechaza todas las demás.

Mediante el lenguaje de reglas personalizadas de Google Cloud Armor, la siguiente expresión lo logra:

origin.region_code == "IN" || inIpRange(origin.ip, '192.0.2.0/24')

Esta expresión está configurada como una regla allow, con un valor predeterminado de deny configurada para coincidir con el resto de los clientes. Políticas de seguridad siempre tienen una regla predeterminada. Esto se suele configurar para default deny tráfico que no permitir explícitamente. En otros casos, podría optar por bloquear una parte del tráfico y default allow el resto del tráfico.

En el resultado de la política de seguridad, ten en cuenta lo siguiente:

  • La regla de prioridad más alta (priority: 0) permite el tráfico de India OR de la lista definida de direcciones IP.
  • La regla de prioridad más baja representa un default deny. El motor de reglas rechaza a todos los clientes que las reglas de mayor prioridad no evalúan como verdaderas.
  • Puedes combinar varias reglas usando operadores booleanos.

La política permite el tráfico de clientes en India y les permite a los clientes de un rango de IP definido y rechaza todo el resto del tráfico.

Cuando veas los detalles de la política, el resultado se parecerá al siguiente:

kind: compute#securityPolicy
name: allow-india-only
type: "CLOUD_ARMOR_EDGE"
rules:
- action: allow
  description: ''
  kind: compute#securityPolicyRule
  match:
    expr:
      expression: origin.region_code == "IN" || inIpRange(origin.ip, '192.0.2.0/24')
  preview: false
  priority: 0
- action: deny(403)
  description: Default rule, higher priority overrides it
  kind: compute#securityPolicyRule
  match:
    config:
      srcIpRanges:
      - '*'
    versionedExpr: SRC_IPS_V1
  preview: false
  priority: 2147483647

También puedes establecer un encabezado de respuesta personalizado con la variable de encabezado {region_code} Este encabezado se puede inspeccionar con JavaScript y reflejarse en el cliente.

Ejemplo: Bloquea clientes maliciosos por dirección y rangos de IP

Mediante el lenguaje de reglas personalizadas de Google Cloud Armor, la siguiente expresión lo logra:

inIpRange(origin.ip, '192.0.2.2/32') || inIpRange(origin.ip, '192.0.2.170/32')

Puedes bloquear rangos de IP hasta una máscara /8 en IPv4 y una /32 en IPv6. Un caso común para las plataformas de transmisión es bloquear los rangos de IP de salida de los proxies o proveedores de VPN a fin de minimizar la elusión de las licencias de contenido:

inIpRange(origin.ip, '192.0.2.0/24') || inIpRange(origin.ip, '198.51.100.0/24') || inIpRange(origin.ip, '203.0.113.0/24') || inIpRange(origin.ip, '2001:DB8::B33F:2002/64')

Se admiten los rangos de direcciones IPv4 e IPv6.

Ejemplo: Solo permitir una lista fija de ubicaciones geográficas

Si tienes una lista de códigos de país, puedes usar el operador booleano OR || para combinar condiciones de coincidencia.

Con el lenguaje de reglas personalizadas de Google Cloud Armor, la siguiente expresión permite a los usuarios identificados que provienen de Australia o Nueva Zelanda:

origin.region_code == "AU" || origin.region_code == "NZ"

Además, se puede combinar con expresiones origin.ip o inIpRange(origin.ip, '...') para permitir que los verificadores, socios y tus rangos de IP corporativos. incluso si no provienen de una de las ubicaciones geográficas especificadas.

Hay la cantidad documentada de subexpresiones con una expresión personalizada Si necesitas combinar más subexpresiones, define varias reglas en una sola política.

Ejemplo: Bloquear clientes de un conjunto específico de países

Un ejemplo menos común podría ser bloquear a los clientes de un conjunto determinado de países, pero permitir las solicitudes de todos los demás países.

Para ello, crea una política que bloquee el país y cualquier cliente en el que no se pueda determinar su región y, luego, dirígete a una regla de permiso predeterminada para todas las demás solicitudes.

En el siguiente ejemplo, también se describe una política que bloquea a los clientes de Canadá. como cualquier cliente con la ubicación desconocida, pero que permite todo el resto del tráfico:

  kind: compute#securityPolicy
  name: block-canada
  type: "CLOUD_ARMOR_EDGE"
  rules:
  - action: deny(403)
    description: ''
    kind: compute#securityPolicyRule
    match:
      expr:
        expression: origin.region_code == "CA" || origin.region_code == "ZZ"
    preview: false
    priority: 0
  - action: allow
    description: Default rule, higher priority overrides it
    kind: compute#securityPolicyRule
    match:
      config:
        srcIpRanges:
        - '*'
      versionedExpr: SRC_IPS_V1
    preview: false
    priority: 2147483647

Ejemplo: Cómo rechazar solicitudes de contenido almacenado en caché con encabezados específicos

Una política de seguridad perimetral se aplica a todas las solicitudes segmentadas para cualquier servicio de Media CDN al que esté vinculada la política. La aplicación de esta política se aplica antes que cualquier caché búsqueda. Se rechazan las solicitudes que la política de seguridad perimetral no permite con el código de estado configurado.

La siguiente expresión coincide con las solicitudes de la dirección IP 1.2.3.4 que contengan la cadena user1 en el encabezado user-agent:

inIpRange(origin.ip, '1.2.3.4/32') && request.headers['user-agent'].contains('user1')

El siguiente comando agrega la regla de filtrado 105 a la política de seguridad perimetral my-edge-policy, que está adjunta a un servicio de Media CDN:

gcloud compute security-policies rules create 105 \
    --security-policy my-edge-policy \
    --expression = "inIpRange(origin.ip, '1.2.3.4/32') && request.headers['user-agent'].contains('charlie')" \
    --action= deny-403 \
    --description="block requests from IP addresses in which the user-agent header contains the string charlie"
    

Registra acciones de aplicación

Cada registro de solicitudes brinda detalles sobre qué política de seguridad se aplicó la solicitud y si se permitió (ALLOW) o se rechazó (DENY).

Para habilitar el registro, asegúrate de que logConfig.enable esté configurado como true en tu servicio. Los servicios sin registros habilitados no registran eventos de la política de seguridad.

Cuando un cliente se encuentra fuera de Estados Unidos y se aplica una política de seguridad llamada deny-non-us-clients, que rechaza las solicitudes que se originan fuera de EE.UU., esta es la entrada de registro de una solicitud rechazada:

enforcedSecurityPolicy:
  name: deny-non-us-clients
  outcome: DENY

Los servicios sin una política de Google Cloud Armor adjunta contienen no_policy como el valor de enforcedSecurityPolicy.name y un outcome de ALLOW. Para Por ejemplo, una entrada de registro de solicitud para un servicio sin una la política adjunta tiene los siguientes valores:

enforcedSecurityPolicy:
  name: no_policy
  outcome: ALLOW

Comprende las clasificaciones de GeoIP

Media CDN depende de la clasificación de IP interna de Google fuentes de datos para obtener una ubicación (región, estado, provincia o ciudad) de una IP web. Si migras o divides el tráfico entre varios proveedores, un pequeño número de direcciones IP puede asociarse en diferentes ubicaciones.

  • Google Cloud Armor usa códigos de región ISO 3166-1 alfa 2 para asociar un cliente a una ubicación geográfica.
  • Por ejemplo, US para los Estados Unidos o AU para Australia.
  • En algunos casos, una región corresponde a un país, pero no siempre es así. Por ejemplo, el código US incluye todos los estados de Estados Unidos, un distrito y seis áreas periféricas.
  • Para obtener más información, consulta unicode_region_subtag en el estándar técnico de Unicode.
  • Para los clientes en los que no se puede derivar la ubicación, origin.region_code se establece en ZZ.

Puedes agregar datos geográficos a los encabezados de respuesta a un extremo de Media CDN (con routing.routeRules[].headerActions[].responseHeadersToAdd[]) o reflejar los datos geográficos proporcionados a un . Cloud Function para validar las diferencias entre las fuentes de datos geoIP durante la integración y pruebas iniciales.

Además, los registros de solicitudes de Media CDN incluyen clientRegion y otros datos específicos del cliente que puedes validar en tus fuentes de datos existentes.

¿Qué sigue?