1. Introducción
Las políticas de seguridad perimetrales de Google Cloud Armor te permiten restringir el acceso a objetos almacenados en caché en Google Cloud CDN y Google Cloud Storage. Entre los motivos para hacerlo, se incluyen garantizar que tus usuarios no accedan a objetos en buckets de almacenamiento desde ubicaciones geográficas restringidas o asegurarse de que tu distribución de medios esté filtrando según las ubicaciones geográficas para las que tienes licencia.
En este lab, crearemos un bucket de GCS, subiremos una imagen a él, lo vincularemos a un balanceador de cargas y, luego, habilitaremos Cloud CDN y políticas de seguridad perimetral en él.
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 previsto
Requisitos
- Conocimientos básicos de redes y HTTP
- Conocimiento básico de la línea de comandos de Unix/Linux
2. Configuración y requisitos
Configuración del entorno de autoaprendizaje
- 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.



- 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.
- 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:

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:

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 tu 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:

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 con 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.
- 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 que esté lejos de ti.
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 el acceso público.
Elige Preciso 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 a tu 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 Google 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 la guardaste al 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
Busca tu objeto, haz clic en los tres puntos que se encuentran a la derecha y edita los permisos para que sean públicos.


5. Crea un balanceador de cargas
A continuación, crearemos un balanceador de cargas HTTP.
Navega a Networking >> Network services >> Load Balancing >> Create Load Balancer >> HTTP Load Balancer >> Internet to my VMs >> Classic HTTP(S) Load Balancer.
Primero, crea un nombre para el balanceador de cargas que crearás.
Crear bucket de backend
Crea un bucket de backend nuevo que sea el bucket que acabas de crear y selecciona Habilitar CDN y Almacenar en caché contenido estático. Haz clic en Crear.

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

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

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

Consulta el balanceador de cargas
Después de unos minutos, intenta consultar en el balanceador de cargas el objeto que subiste. Necesitarás la dirección IP del balanceador de cargas y el nombre de la imagen. El comando se estructura 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 tu contenido se esté entregando desde la CDN a través de la CDN o la supervisión del balanceo de cargas. Deberías obtener una tasa de aciertos cercana a un 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 entregado por Cloud CDN
Para validar que entregas tráfico desde la CDN, navega a Servicios de red >> CDN.

6. Borra el objeto de GCS
Ahora que la caché se completó, borremos el objeto del bucket para reforzar 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.

7. Crea una política de seguridad perimetral para tu 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



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 funciona según lo esperado.
Comprueba la política de seguridad
Después de unos minutos, podrás verificar que la política de Cloud Armor se esté ejecutando. En la línea de comandos, ejecutar el siguiente comando generará 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 consultar los registros para ver la política de seguridad perimetral aplicada. Navega a Operaciones >> Logging >> Explorador de registros.
Ingresa el siguiente fragmento en la consulta y haz clic en Ejecutar.

resource.type:(http_load_balancer) AND jsonPayload.enforcedEdgeSecurityPolicy.name:(%SECURITY_POLICY_NAME%)
Observa la respuesta 403 y la política de seguridad aplicada

Quita la política de seguridad
Quita la política de seguridad y consulta el objeto desde la caché.
Navega a Seguridad de red >> Cloud Armor >> %NOMBRE DE LA POLÍTICA% >> destinos y quita el bucket de destino.

Confirmar que se quitó la política
Después de unos minutos, envía otro curl al recurso en el bucket de almacenamiento. Esta vez, obtendrás una respuesta 200.
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. Borra el lab
Navega a Seguridad de red >> Cloud Armor >> %NOMBRE DE LA POLÍTICA% y selecciona borrar.

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

Navega a Networking >> Network services >> Load Balancing. Selecciona el balanceador de cargas que creaste y haz clic en Borrar.

10. ¡Felicitaciones!
Completaste el codelab sobre cómo defender el almacenamiento en caché perimetral con Cloud Armor.
Temas abordados
- Cómo configurar un bucket de almacenamiento en Cloud y un 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.