Defiende el almacenamiento en caché perimetral con Cloud Armor

1. Introducción

Las políticas de seguridad perimetral de Google Cloud Armor te permiten restringir el acceso a los objetos almacenados en caché en Google Cloud CDN y Google Cloud Storage. Algunos ejemplos de motivos para hacerlo incluyen garantizar que los usuarios no accedan a objetos en buckets de almacenamiento de ubicaciones geográficas restringidas o garantizar que tu distribución de contenido multimedia filtre los datos en las ubicaciones geográficas para las que tienes una licencia.

En este lab, crearemos un bucket de GCS, subiremos una imagen, lo vincularemos a un balanceador de cargas y, luego, habilitaremos las políticas de seguridad perimetral y de Cloud CDN.

Qué aprenderás

  • Cómo configurar un bucket de Cloud Storage con contenido que se puede almacenar en caché
  • Cómo crear una política de seguridad perimetral para proteger el contenido
  • Cómo validar que la política de seguridad perimetral funcione según lo esperado

Requisitos

  • Herramientas de redes básicas y conocimiento de HTTP
  • Conocimiento básico de la línea de comandos de Unix/Linux

2. Configuración y requisitos

Configuración del entorno de autoaprendizaje

  1. Accede a Google Cloud Console y crea un proyecto nuevo o reutiliza uno existente. Si aún no tienes una cuenta de Gmail o de Google Workspace, debes crear una.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • El Nombre del proyecto es el nombre visible de los participantes de este proyecto. Es una string de caracteres que no se utiliza en las API de Google y se puede actualizar en cualquier momento.
  • El ID del proyecto debe ser único en todos los proyectos de Google Cloud y es inmutable (no se puede cambiar después de configurarlo). Cloud Console genera automáticamente una string única, que, por lo general, no importa cuál sea. En la mayoría de los codelabs, debes hacer referencia al ID del proyecto (suele ser PROJECT_ID). Por lo tanto, si no te gusta, genera otro aleatorio o prueba con uno propio y comprueba si está disponible. Después de crear el proyecto, este ID se “congela” y no se puede cambiar.
  • Además, hay un tercer valor, el Número de proyecto, que usan algunas API. Obtén más información sobre estos tres valores en la documentación.
  1. A continuación, deberás habilitar la facturación en Cloud Console para usar las API o los recursos de Cloud. Ejecutar este codelab no debería costar mucho, tal vez nada. Si quieres cerrar los recursos para no se te facture más allá de este instructivo, sigue las instrucciones de “limpieza” que se encuentran al final del codelab. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de USD 300.

Inicia Cloud Shell

Si bien Google Cloud y Spanner se pueden operar de manera remota desde tu laptop, en este codelab usarás Google Cloud Shell, un entorno de línea de comandos que se ejecuta en la nube.

En GCP Console, haga clic en el ícono de Cloud Shell en la barra de herramientas superior derecha:

bce75f34b2c53987.png

El aprovisionamiento y la conexión al entorno deberían tomar solo unos minutos. Cuando termine el proceso, debería ver algo como lo siguiente:

f6ef2b5f13479f3a.png

Esta máquina virtual está cargada con todas las herramientas de desarrollo que necesitarás. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud, lo que permite mejorar considerablemente el rendimiento de la red y la autenticación. Puedes realizar todo tu trabajo en este lab usando simplemente un navegador.

Antes de comenzar

En Cloud Shell, asegúrate de que el ID del proyecto esté configurado

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
PROJECT_ID=[YOUR-PROJECT-NAME]
echo $PROJECT_ID

Habilita las APIs

Habilita todos los servicios necesarios

gcloud services enable compute.googleapis.com
gcloud services enable logging.googleapis.com
gcloud services enable monitoring.googleapis.com

3. Crea un bucket de Cloud Storage

En la consola de Cloud, vaya al menú de navegación > Cloud Storage > Navegador. Haz clic en CREAR BUCKET:

baf3d3c74282ecba.png

Reglas de nomenclatura para los buckets:

  • No incluyas información sensible en el nombre del bucket, ya que el espacio de nombres del bucket es global y tiene visibilidad pública.
  • Los nombres de buckets solo deben contener letras en minúscula, números, guiones (-), guiones bajos (_) y puntos (.). Los nombres que contengan puntos requieren verificación.
  • Deben comenzar y terminar con un número o una letra.
  • Pueden contener entre 3 y 63 caracteres. Los nombres que contienen puntos pueden tener hasta 222 caracteres, pero cada componente separado por un punto no puede tener más de 63 caracteres.
  • No se pueden representar como una dirección IP en notación decimal punteada (por ejemplo, 192.168.5.4).
  • No pueden comenzar con el prefijo "goog".
  • No pueden contener “google” ni otras palabras similares a “google”.
  • Además, para garantizar el cumplimiento de los estándares del DNS y la compatibilidad en el futuro, no debes usar guiones bajos (_) ni un punto adyacente a otro punto o a un guion. Por ejemplo, “..”, “-.” o “.-” no son nombres válidos en DNS.

Haz clic en CONTINUAR.

Tipo de ubicación: región

Ubicación: Elige una región lejana.

Haz clic en CONTINUAR.

Clase de almacenamiento predeterminada: Estándar

Haz clic en CONTINUAR.

Desmarca la casilla de verificación Aplicar la prevención de acceso público a este bucket en Impedir acceso público.

Elige Detallado en Control de acceso.

Haz clic en CONTINUAR.

Después de configurar tu bucket, haz clic en CREAR:

Eso es todo. Acabas de crear un bucket de Cloud Storage.

4. Sube un objeto al bucket

Ahora, suba un objeto al bucket.

Primero, descarga esta imagen en una instancia temporal en Cloud Shell. En el siguiente ejemplo, se usa la imagen de la página principal de Google.

Desde Cloud Shell

wget --output-document google.png https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png

Usa el comando gsutil cp para subir la imagen de la ubicación en la que guardaste el bucket que creaste:

Desde Cloud Shell

gsutil cp google.png gs://YOUR-BUCKET-NAME

Ahora puedes quitar la imagen que descargaste:

Desde Cloud Shell

rm google.png

Ubica tu objeto, haz clic en los tres puntos en el lado derecho y edita los permisos para que sean públicos.

821aad82d8633922.png

30a975d3ad22d33d.png

5. Crea un balanceador de cargas

A continuación, crearemos un balanceador de cargas HTTP.

Navega a Herramientas de redes >> Servicios de red >> Balanceo de cargas >> Crear un balanceador de cargas >> Balanceador de cargas HTTP >> Internet a mis VMs >> Balanceador de cargas de HTTP(S) clásico

Primero, crea un nombre para el balanceador de cargas que crearás.

Crear bucket de backend

Crea un nuevo bucket de backend que sea el bucket que acabas de crear y selecciona Enabled CDN and Cache Static Content. Haz clic en Crear.

ed392a56538d499e.png

Crea reglas de host y ruta de acceso

Navega a Reglas de host y ruta de acceso en el lado izquierdo. Usaremos una regla simple de host/ruta de acceso y enviaremos cualquier solicitud al bucket.

8c1a664e0d1f15b0.png

Crear configuración de frontend

Selecciona la configuración del frontend. Para la configuración de frontend, usaremos HTTP (aunque HTTPS también funcionará si tienes un certificado) y una dirección IP efímera, y nos aseguraremos de que hayas seleccionado la red de nivel Premium.

2597a5e63d618622.png

Haz clic en Crear

Obtener IP del balanceador de cargas

Obtén la IP del balanceador de cargas en la consola. Para ello, haz clic en el nombre del balanceador de cargas en la lista de balanceadores de cargas de tu proyecto.

9b757362d806e835.png

Consulta el balanceador de cargas

Después de un par de minutos, intenta consultar el balanceador de cargas del objeto que subiste. Necesitarás la dirección IP del balanceador de cargas y el nombre de la imagen. El comando está estructurado de la siguiente manera:

Desde la terminal

curl -svo /dev/null http://LOAD_BALANCER_IP/google.png

Salida

armanrye-macbookpro% curl -svo /dev/null http://34.98.81.123/google.png
*   Trying 34.98.81.123...
* TCP_NODELAY set
* Connected to 34.98.81.123 (34.98.81.123) port 80 (#0)
> GET /google.png HTTP/1.1
> Host: YOUR_IP
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 200 OK
< X-GUploader-UploadID: ADPycdtoILI76KVsvBvdVGvSfzaxys1m3zYqCepBrmJxAI48ni24cWCRIdNu-53PX3DS6iycxp6xwFbMpwtcHHZQUQmEBxAgng
< Expires: Mon, 13 Dec 2021 22:58:26 GMT
< Date: Mon, 13 Dec 2021 21:58:26 GMT
< Cache-Control: public, max-age=3600
< Last-Modified: Mon, 13 Dec 2021 21:45:57 GMT
< ETag: "8f9327db2597fa57d2f42b4a6c5a9855"
< x-goog-generation: 1639431957957903
< x-goog-metageneration: 2
< x-goog-stored-content-encoding: identity
< x-goog-stored-content-length: 5969
< Content-Type: image/png
< x-goog-hash: crc32c=TeiHTA==
< x-goog-hash: md5=j5Mn2yWX+lfS9CtKbFqYVQ==
< x-goog-storage-class: STANDARD
< Accept-Ranges: bytes
< Content-Length: 5969
< Server: UploadServer

Valida que el contenido se entregue desde la CDN o mediante la supervisión del balanceo de cargas. Deberías poder acercarte a una tasa de aciertos del 100%. Si necesitas ejecutar algunas consultas, puedes hacer lo siguiente

Desde la terminal

#for i in `seq 1 50`; do curl http://%loadbalncer-IP%/google.png; done

Confirma el contenido que entrega Cloud CDN

Para validar que estás entregando tráfico desde CDN, navega a Servicios de red >> CDN

a52d0ba4c084aa05.png

6. Borra el objeto de GCS

Ahora que se propagó la caché, borremos el objeto del bucket, lo que refuerza que estamos aplicando la política a la caché y no al backend.

Navega a Cloud Storage >> %nombre del bucket % >> objetos

Selecciona la imagen y bórrala.

a1cc1bb9a0ff41df.png

7. Crea una política de seguridad perimetral para la caché de CDN

Navega a Seguridad de red >> Cloud Armor y haz clic en Crear política

Selecciona lo siguiente:

Tipo de política: política de seguridad perimetral

Acción predeterminada: Rechazar

7a12374be33026fd.png

b7c4efc091272358.png

77ddbcddd07b65d2.png

Aplica la política a tu bucket de backend.

8. Valida la política de seguridad perimetral

Ahora que creamos una política de seguridad perimetral frente a nuestro bucket de backend, validemos que funcione según lo esperado.

Consulta la política de seguridad

Después de unos minutos, podrás verificar que la política de Cloud Armor se esté ejecutando. Desde la línea de comandos, si ejecutas el siguiente comando, obtendrás un error 403

Desde la terminal

curl -svo /dev/null http://LOAD_BALANCER_IP/google.png

Salida

curl -svo /dev/null http://34.98.81.123/google.png
*   Trying 34.98.81.123...
* TCP_NODELAY set
* Connected to 34.98.81.123 (34.98.81.123) port 80 (#0)
> GET /google.png HTTP/1.1
> Host: YOUR_IP
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 403 Forbidden
< X-GUploader-UploadID: ADPycdtS6FtJOGIsiWYDrAAE8VFeQuNutcvbGoQe2t8EZxsuspVtmCjyiTv_P3CNktroHMOGFXkTCfG-Jj-rUO60ZGPpEbpqcw
< Content-Type: application/xml; charset=UTF-8
< Content-Length: 111
< Date: Mon, 13 Dec 2021 23:09:35 GMT
< Expires: Mon, 13 Dec 2021 23:09:35 GMT
< Cache-Control: private, max-age=0
< Server: UploadServer
<

Investiga los registros

A continuación, puedes revisar los registros para ver la política de seguridad perimetral aplicada. Navega a Operaciones >> Registro >> Explorador de registros

Ingresa el siguiente fragmento en la consulta y haz clic en Ejecutar.

14972af5ae6c182a.png

resource.type:(http_load_balancer) AND jsonPayload.enforcedEdgeSecurityPolicy.name:(%SECURITY_POLICY_NAME%)

Observa la respuesta 403 y la política de seguridad aplicada

cddc48ca93ad79ca.png

Quita la política de seguridad

Quita la política de seguridad y consulta el objeto de la caché.

Navega a Seguridad de red >> Cloud Armor >> %NOMBRE DE LA POLÍTICA% >> destinos y quita el bucket de destino.

350655729a89eb33.png

Confirmar que se quitó la política

Después de unos minutos, envía otro curl al recurso en el bucket de almacenamiento. Recibirás una respuesta 200 esta vez.

Desde la terminal

curl -svo /dev/null http://LOAD_BALANCER_IP/google.png

Salida

armanrye-macbookpro% curl -svo /dev/null http://34.98.81.123/google.png

*   Trying 34.98.81.123...
* TCP_NODELAY set
* Connected to 34.98.81.123 (34.98.81.123) port 80 (#0)
> GET /google.png HTTP/1.1
> Host: YOUR_IP
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 200 OK
< X-GUploader-UploadID: ADPycdtI7f49P3MSuZSZ8vl6RwfwmnIDJ59EeSKp7UPvLPawdaiRHXiNWLtseQTxUxceWOvSLvpYmT3pWVkV4qeIP7M
< Date: Mon, 13 Dec 2021 23:06:46 GMT
< Last-Modified: Mon, 13 Dec 2021 21:45:57 GMT
< ETag: "8f9327db2597fa57d2f42b4a6c5a9855"
< x-goog-generation: 1639431957957903
< x-goog-metageneration: 2
< x-goog-stored-content-encoding: identity
< x-goog-stored-content-length: 5969
< Content-Type: image/png
< x-goog-hash: crc32c=TeiHTA==
< x-goog-hash: md5=j5Mn2yWX+lfS9CtKbFqYVQ==
< x-goog-storage-class: STANDARD
< Accept-Ranges: bytes
< Content-Length: 5969
< Server: UploadServer
< Age: 1621
< Cache-Control: public,max-age=3600
<
{ [775 bytes data]
* Connection #0 to host 34.98.81.123 left intact
* Closing connection 0

¡Felicitaciones! Completaste este lab sobre las políticas de seguridad perimetral de Cloud Armor.

©2020 Google LLC. Todos los derechos reservados. Google y el logotipo de Google son marcas de Google LLC. El resto de los nombres de productos y empresas pueden ser marcas de las respectivas empresas a las que están asociados.

9. Limpieza del lab

Navega a Seguridad de red >> Cloud Armor >> %POLICY NAME% y selecciona Eliminar

21eefb5f375e8fee.png

Navega a Cloud Storage, selecciona el bucket que creaste y haz clic en Borrar.

ef2fa8d45c1d3452.png

Navega a Herramientas de redes >> Servicios de red >> Balanceo de cargas. Selecciona el balanceador de cargas que creaste y haz clic en Borrar.

ee2e78c10f4104eb.png

10. ¡Felicitaciones!

Completaste el codelab Protege el almacenamiento en caché perimetral con Cloud Armor.

Temas abordados

  • Cómo configurar un bucket de Cloud Storage y el balanceador de cargas de Cloud asociado
  • Cómo crear una política de seguridad perimetral de Cloud Armor
  • Cómo validar que la política de seguridad perimetral funcione según lo previsto.

Próximos pasos

  • Intenta configurar una política de seguridad perimetral con un acierto de caché de un recurso de Compute Engine.