Protege el tráfico de entrada de Cloud Run

1. Descripción general

En este lab, se muestra cómo restringir el acceso a un servicio de Cloud Run y permitir solo solicitudes de una carga de trabajo que se ejecuta de manera local o en la VPC de tu proyecto. Hay dos capas de control de acceso que puedes usar: la configuración de entrada y las políticas de Identity and Access Management (IAM).

5aed47d10595c878.png

Configuración de entrada

La configuración de entrada te permite filtrar solicitudes en función de su origen de red (interno o externo). De forma predeterminada, se permite el paso de todas las solicitudes, incluidas las de la Internet pública.

Política de IAM

Las políticas de IAM te permiten filtrar solicitudes según la identidad del remitente y se suelen usar para autenticar solicitudes de servicio a servicio.

En este lab, aprenderás cómo y cuándo usar la configuración de entrada.

Los hosts locales se conectan a través de la VPC

En este lab, simularemos una carga de trabajo local. Para conectar un host local a Cloud Run, debes configurar el Acceso privado a Google para hosts locales. Esto incluye la configuración de una puerta de enlace de Cloud VPN en la red de VPC, como se muestra a continuación.

31611f6a2f12fd0c.png

Simular una carga de trabajo local con un servidor de salto en la VPC

En este lab, simularás el envío de solicitudes desde un host local. Para ello, enviarás solicitudes desde una máquina virtual de Compute Engine en la VPC, como se muestra aquí.

aebf22740c7a84f0.png

La máquina virtual de Compute Engine que usarás como servidor de acceso directo tiene el mismo origen de red que la puerta de enlace de Cloud VPN, por lo que puedes usarlo para simular el envío de solicitudes desde una carga de trabajo local.

2. Configuración y requisitos

Cómo configurar el entorno a tu propio ritmo

  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.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • El Nombre del proyecto es el nombre visible de los participantes de este proyecto. Es una cadena de caracteres que no se utiliza en las APIs de Google. Puedes actualizarla en cualquier momento.
  • El ID del proyecto es único en todos los proyectos de Google Cloud y es inmutable (no se puede cambiar después de configurarlo). La consola de Cloud genera automáticamente una cadena única. por lo general, no te importa qué es. En la mayoría de los codelabs, deberás hacer referencia al ID del proyecto (por lo general, se identifica como PROJECT_ID). Si no te gusta el ID generado, puedes generar otro aleatorio. También puedes probar el tuyo propio y ver si está disponible. No se puede cambiar después de este paso y se mantendrá mientras dure el proyecto.
  • Para tu información, hay un tercer valor, un número de proyecto, que usan algunas APIs. 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 la consola de Cloud para usar las APIs o los recursos de Cloud. Ejecutar este codelab no debería costar mucho, tal vez nada. Para cerrar recursos y evitar que se te facture más allá de este instructivo, puedes borrar los recursos que creaste o borrar todo el proyecto. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de USD 300.

Configuración del entorno

  1. Establece una variable de entorno para el ID del proyecto para usarla en comandos posteriores:
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export ZONE=us-central1-a
  1. Habilita las APIs necesarias para ejecutar este lab.
gcloud services enable \
  run.googleapis.com \
  cloudbuild.googleapis.com \
  compute.googleapis.com \
  artifactregistry.googleapis.com
  1. Clona el repositorio de la app de ejemplo y navega al directorio
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git

cd cymbal-eats/partner-registration-service
  1. Configura la región y la zona predeterminadas para Compute Engine y Cloud Run
gcloud config set compute/region ${REGION}
gcloud config set run/region ${REGION}
gcloud config set compute/zone ${ZONE}

3. Implemente el servicio

Primero, implementarás el servicio y lo dejarás accesible de forma pública. Una vez que hayas verificado que puedes enviar solicitudes desde tu navegador, bloquearemos el servicio y solo aceptaremos solicitudes de fuentes de red internas.

Cuando ejecutes el siguiente comando, sigue estas instrucciones:

  • Ubicación del código fuente (...): Verifica que estás en el directorio partner-registration-service y presiona Intro para aceptar el valor predeterminado
  • Nombre del servicio (partner-registration-service): Presiona Intro para aceptar el valor predeterminado.
  • ¿Quieres permitir invocaciones no autenticadas de [partner-registration-service] (s/N)? Y
gcloud run deploy 

Cuando se complete el comando, se mostrará la URL de tu servicio de Cloud Run. El resultado se verá similar a esta lista:

Service [partner-registration-service] revision [partner-registration-service-00001-haz] has been deployed and is serving 100 percent of traffic.
Service URL: https://partner-registration-service-ssssssssss-uc.a.run.app

Abre la URL del servicio en tu navegador. Deberías ver este resultado:

Partner registration service: RUNNING

Configura el servicio para permitir solo solicitudes internas

Ahora, usarás la configuración de entrada del servicio de Cloud Run para permitir solo solicitudes de fuentes internas. Las fuentes internas incluyen recursos en redes de VPC que están en el mismo proyecto (o perímetro de los Controles del servicio de VPC) que el servicio de Cloud Run, lo que lo hace perfecto para nuestro caso de uso.

Además, las solicitudes de otros productos de Google Cloud se consideran internas, incluso si no son parte de la VPC. Esos productos incluyen, por ejemplo, Pub/Sub y Workflows.

Las solicitudes de estas fuentes permanecen en la Red de Google, incluso si acceden a tu servicio en la URL run.app y el acceso público está prohibido.

Actualiza el servicio para permitir solo solicitudes internas:

gcloud run services update partner-registration-service --ingress=internal

Si vuelves a abrir la URL del servicio, aparecerá el mensaje "Error: Forbidden - Access is forbidden".

Dado que el navegador envía la solicitud desde un origen de red externo y no desde un origen interno al proyecto de Google Cloud, esto es exactamente lo que esperas que suceda. Tu servicio ahora es más seguro.

4. Crea una máquina virtual de Compute Engine como servidor de salto

El siguiente paso es simular solicitudes de un servidor local a través de una puerta de enlace de Cloud VPN, creando una instancia de Compute Engine en la VPC para usarla como servidor de salto:

gcloud compute instances create jump-server --scopes=https://www.googleapis.com/auth/cloud-platform

El resultado de este comando debería ser similar al siguiente:

NAME         ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP   STATUS
jump-server  us-central1-a  n1-standard-1               10.128.0.10  34.170.108.8  RUNNING

Envía una solicitud de la instancia de Compute Engine al servicio

Ahora, abrirás una terminal en la máquina virtual y enviarás una solicitud directamente desde la máquina en la red de VPC.

Si el siguiente comando te solicita que configures SSH en Cloud Shell, sigue las instrucciones:

gcloud compute ssh jump-server

Obtén la URL del servicio de Cloud Run con este comando:

gcloud run services describe partner-registration-service --region us-central1

Las primeras líneas del resultado deberían verse de la siguiente manera:

✔ Service partner-registration-service in region us-central1

URL:     https://partner-registration-service-ssssssssss-uc.a.run.app
Ingress: internal

Ahora, copia la URL y envía una solicitud desde la instancia de Compute Engine con curl. Esta solicitud debería tener éxito, ya que la instancia de VM se ejecuta en la red de VPC de tu proyecto, es una fuente interna.

export SERVICE_URL=https://

curl ${SERVICE_URL}

El resultado debería decir lo siguiente:

Partner registration service: RUNNING

5. ¿Qué pasa con el control de acceso basado en IAM?

En este lab, se mostró cómo y cuándo usar la configuración de entrada. La configuración de entrada es un excelente primer paso si quieres conectar una carga de trabajo local a Cloud Run.

El control de acceso basado en IAM requiere más esfuerzo de implementar, especialmente si se llama desde un host local:

  • IAM requiere que administres credenciales de cuenta de servicio de larga duración en el host
  • IAM requiere cambios de código para firmar solicitudes con las credenciales de la cuenta de servicio.

Google recomienda un enfoque de varias capas para el control de acceso. Usar la configuración de entrada para restringir el acceso solo a los hosts internos es un excelente primer paso, pero ¡no te quedes ahí!

6. ¡Felicitaciones!

¡Felicitaciones! Completaste el codelab.

¿Qué sigue?

Explora otros codelabs de Cymbal Eats:

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

Borra el proyecto

La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.

Referencias útiles

Aquí hay recursos adicionales que te ayudarán a aprender más sobre las dos capas de control de acceso en Cloud Run.