1. Descripción general
En este lab, implementarás el portal de empleados que les permite ver, actualizar y borrar pedidos en la app de Cymbal Eats. Usarás Identity Aware Proxy (IAP) para proteger el acceso al portal sin usar una red privada virtual (VPN). IAP simplifica la implementación de un modelo de acceso de confianza cero y lleva menos tiempo que una VPN para los trabajadores remotos, tanto en entornos locales como en la nube, con un único punto de control para administrar el acceso a tus aplicaciones.
¿Qué es Identity-Aware Proxy?
Identity-Aware Proxy (IAP) es un servicio de Google Cloud que intercepta las solicitudes enviadas a tu aplicación, autentica al usuario que hace la solicitud con el servicio de identidad de Google y solo deja pasar las solicitudes si provienen de un usuario autorizado para acceder a la aplicación. Además, puedes modificar los encabezados de las solicitudes para que incluyan información sobre el usuario autenticado.
Qué aprenderás
- Cómo configurar un grupo de extremos de red (NEG) sin servidores
- Cómo configurar un balanceador de cargas
- Cómo habilitar IAP para restringir el acceso
- Cómo restringir el acceso con IAP
2. Configuración y requisitos
Cómo configurar el entorno a tu propio ritmo
- 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 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.
- 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
- Crea variables de entorno relacionadas con proyectos y recursos
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export REGION=us-east1
export ORDER_SERVICE_URL=order-service
export INVENTORY_SERVICE_URL=inventory-service
export MENU_SERVICE_URL=menu-service
- Habilita las APIs del servicio de IAP y de Cloud Resource Manager
gcloud services enable \
iap.googleapis.com \
cloudresourcemanager.googleapis.com \
cloudidentity.googleapis.com \
compute.googleapis.com
- Clona el repositorio de la app de ejemplo y navega al directorio
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/employee-ui
- Implementa el portal de empleados con la secuencia de comandos de configuración. Espera a que se complete la secuencia de comandos antes de continuar con el siguiente paso.
./setup.sh
Resultado de ejemplo
... Done. Service [employee-ui-service] revision [employee-ui-service-00001-quw] has been deployed and is serving 100 percent of traffic. Service URL: https://employee-ui-service-gbtuuy5eda-uk.a.run.app
- Haz clic en el vínculo URL del servicio.
3. Configura un grupo de extremos de red (NEG) sin servidores
Crearás un grupo de extremos de red sin servidores( NEG sin servidores) para el servicio de IU de Cloud Run de los empleados. Los NEG sin servidores te permiten usar apps sin servidores de Google Cloud con balanceo de cargas de HTTP(S) externo.
- Crea un grupo de extremos de red para el servicio de IU del empleado.
gcloud compute network-endpoint-groups create employee-ui-iap-neg \
--project $PROJECT_ID \
--region=$REGION \
--network-endpoint-type=serverless \
--cloud-run-service=employee-ui-service
Resultado de ejemplo:
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/regions/us-east1/networkEndpointGroups/employee-ui-iap-neg]. Created network endpoint group [employee-ui-iap-neg].
Crea un servicio de backend y agrega el NEG sin servidores
Un servicio de backend define cómo Cloud Load Balancing distribuye el tráfico. La configuración del servicio de backend contiene un conjunto de valores, como el protocolo que se usa para conectarse a backends, varios parámetros de configuración de distribución y sesión, verificaciones de estado y tiempos de espera. Esta configuración proporciona un control detallado sobre el comportamiento de tu balanceador de cargas.
- Crear un servicio de backend
gcloud compute backend-services create employee-ui-iap-backend \
--global
Resultado de ejemplo:
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/backendServices/employee-ui-iap-backend]. NAME: employee-ui-iap-backend BACKENDS: PROTOCOL: HTTP
- Agrega el NEG sin servidores como un backend al servicio de backend
gcloud compute backend-services add-backend employee-ui-iap-backend \
--global \
--network-endpoint-group=employee-ui-iap-neg \
--network-endpoint-group-region=$REGION
Resultado de ejemplo:
Updated [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/backendServices/employee-ui-iap-backend].
- Crea un mapa de URL para enrutar las solicitudes entrantes al servicio de backend
gcloud compute url-maps create employee-ui-iap-url-map \
--default-service employee-ui-iap-backend
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/urlMaps/employee-ui-iap-url-map]. NAME: employee-ui-iap-url-map DEFAULT_SERVICE: backendServices/employee-ui-iap-backend
4. Configura los componentes del balanceador de cargas
En el siguiente diagrama, se muestra que el balanceador de cargas usa un backend de NEG sin servidores para dirigir las solicitudes a un servicio de Cloud Run sin servidores.
Reserva una dirección IP estática
- Reserva una dirección IPv4 estática y almacena el dominio
gcloud compute addresses create employee-ui-iap-ip \
--network-tier=PREMIUM \
--ip-version=IPV4 \
--global
Resultado de ejemplo:
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/addresses/employee-ui-iap-ip].
- Almacena el dominio nip.io
export DOMAIN=$(gcloud compute addresses list --filter employee-ui-iap-ip --format='value(ADDRESS)').nip.io
Crea un recurso de certificado SSL administrado por Google
- Crea un recurso de certificado SSL administrado por Google
gcloud compute ssl-certificates create employee-ui-iap-cert \
--description=employee-ui-iap-cert \
--domains=$DOMAIN \
--global
Resultado de ejemplo:
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/sslCertificates/employee-ui-iap-cert]. NAME: employee-ui-iap-cert TYPE: MANAGED CREATION_TIMESTAMP: 2022-04-18T06:39:37.474-07:00 EXPIRE_TIME: MANAGED_STATUS: PROVISIONING 34.102.234.98.nip.io: PROVISIONING
Crea un proxy HTTPS de destino
- Crea el proxy HTTPS de destino para enrutar las solicitudes a tu mapa de URL
gcloud compute target-https-proxies create employee-ui-iap-http-proxy \
--ssl-certificates employee-ui-iap-cert \
--url-map employee-ui-iap-url-map
Resultado de ejemplo:
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/targetHttpsProxies/employee-ui-iap-http-proxy]. NAME: employee-ui-iap-http-proxy SSL_CERTIFICATES: employee-ui-iap-cert URL_MAP: employee-ui-iap-url-map CERTIFICATE_MAP:
Configura reglas de reenvío
- Crea una regla de reenvío para enrutar las solicitudes entrantes al proxy
gcloud compute forwarding-rules create employee-ui-iap-forwarding-rule \
--load-balancing-scheme=EXTERNAL \
--network-tier=PREMIUM \
--address=employee-ui-iap-ip \
--global \
--ports=443 \
--target-https-proxy employee-ui-iap-http-proxy
Resultado de ejemplo
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/forwardingRules/employee-ui-iap-forwarding-rule].
Restringe la entrada al servicio de Cloud Run
Restringir el tráfico de entrada para que solo acepte solicitudes internas y solicitudes que provengan del balanceo de cargas HTTP(S)
- Actualizar el servicio para permitir solo el tráfico de entrada de solicitudes internas y solicitudes a través del balanceador de cargas HTTP(S)
gcloud run services update employee-ui-service \
--ingress internal-and-cloud-load-balancing \
--region $REGION
Resultado de ejemplo
OK Deploying... Done. OK Creating Revision... OK Routing traffic... Done. Service [employee-ui-service] revision [employee-ui-service-00001-quw] has been deployed and is serving 100 percent of traffic. Service URL: https://employee-ui-service-gbtuuy5eda-uk.a.run.app
- Haz clic en el vínculo URL del servicio.
El acceso a la URL del servicio de Cloud Run ahora se muestra como prohibido.
5. Habilita Cloud Identity-Aware Proxy (IAP) en el balanceador de cargas
IAP te permite establecer una capa de autorización central para las aplicaciones a las que se accede a través de HTTPS. Puedes usar un modelo de control de acceso a nivel de aplicación en lugar de firewalls a nivel de red.
Configura la pantalla de consentimiento de OAuth
Una marca es la pantalla de consentimiento de OAuth que contiene información de desarrollo de la marca de los usuarios. Es posible que las marcas estén restringidas a usuarios internos o públicos. Una marca interna permite que un miembro de la misma organización de Google Workspace que el proyecto acceda al flujo de OAuth. Una marca pública hace que el flujo de OAuth sea accesible para cualquier persona con acceso a Internet.
- Crea una marca
export USER_EMAIL=$(gcloud config list account --format "value(core.account)")
gcloud alpha iap oauth-brands create \
--application_title="Cymbal Eats" \
--support_email=$USER_EMAIL
Resultado de ejemplo:
Created [462858740426]. applicationTitle: Cymbal Eats name: projects/462858740426/brands/462858740426 orgInternalOnly: true
Crea un cliente de OAuth para IAP
- Crea un cliente con el nombre de la marca del paso anterior
gcloud alpha iap oauth-clients create \
projects/$PROJECT_ID/brands/$PROJECT_NUMBER \
--display_name=cymbal-eats-employee-ui
Resultado de ejemplo:
Created [462858740426-tkpv8n03opijg7erd3s9ccued2pfllsd.apps.googleusercontent.com]. displayName: cymbal-eats-employee-ui name: projects/462858740426/brands/462858740426/identityAwareProxyClients/462858740426-tkpv8n03opijg7erd3s9ccued2pfllsd.apps.googleusercontent.com secret: [secret-removed]
- Almacena el nombre, el ID y el secreto del cliente
export CLIENT_NAME=$(gcloud alpha iap oauth-clients list \
projects/$PROJECT_NUMBER/brands/$PROJECT_NUMBER --format='value(name)' \
--filter="displayName:cymbal-eats-employee-ui")
export CLIENT_ID=${CLIENT_NAME##*/}
export CLIENT_SECRET=$(gcloud alpha iap oauth-clients describe $CLIENT_NAME --format='value(secret)')
- En la consola de Cloud, selecciona el proyecto en el menú desplegable de selección de proyectos.
- Ve a la pantalla de consentimiento de OAuth en la consola de Cloud.
- Haz clic en CREAR EXTERNO en Tipo de usuario.
- Selecciona Testing (Prueba) como el estado de publicación (Publishing status).
- Haz clic en CONFIRMAR.
6. Restringe el acceso con IAP
Restringe el acceso al servicio de backend con IAP y, luego, verifica que no se pueda acceder a la aplicación.
- Habilita IAP en el servicio de backend
gcloud iap web enable --resource-type=backend-services \
--oauth2-client-id=$CLIENT_ID \
--oauth2-client-secret=$CLIENT_SECRET \
--service=employee-ui-iap-backend
Verifica la configuración de IAP
- Verifica que el certificado SSL esté ACTIVO
gcloud compute ssl-certificates list --format='value(MANAGED_STATUS)'
- Obtener URL del servicio
echo https://$DOMAIN
Resultado de ejemplo
https://34.102.234.98.nip.io
- Haz clic en la URL del servicio para abrir el portal del empleado.
- Accede con tus credenciales del lab.
- Cierra el navegador.
Otorga acceso de usuario al portal de empleados
- Agrega una vinculación de política de IAM para la función de
'roles/iap.httpsResourceAccessor'
en el usuario creado en el paso anterior
gcloud iap web add-iam-policy-binding \
--resource-type=backend-services \
--service=employee-ui-iap-backend \
--member=user:$USER_EMAIL \
--role='roles/iap.httpsResourceAccessor'
Resultado de ejemplo
Updated IAM policy for backend service [projects/462858740426/iap_web/compute/services/employee-ui-iap-backend].
Prueba el acceso a los servicios
Confirma que se haya otorgado acceso al portal de empleados
- Obtener URL del servicio
echo https://$DOMAIN
Resultado de ejemplo
https://34.102.234.98.nip.io
- Haz clic en la URL del servicio para abrir el portal del empleado.
Ahora deberías tener acceso al portal para empleados.
(Opcional) Implementa todas las dependencias. La implementación de estos microservicios puede tardar unos 20 minutos.
unset ORDER_SERVICE_URL
unset INVENTORY_SERVICE_URL
unset MENU_SERVICE_URL
cd ~/cymbal-eats
./setup.sh
./get-site-urls.sh
7. ¡Felicitaciones!
¡Felicitaciones! Completaste el codelab.
¿Qué sigue?
Explora otros codelabs de Cymbal Eats:
- Activa Cloud Workflows con Eventarc
- Activa el procesamiento de eventos desde Cloud Storage
- Conéctate a Cloud SQL privado desde Cloud Run
- Conéctate a bases de datos completamente administradas desde Cloud Run
- Activa trabajos de Cloud Run con Cloud Scheduler
- Implementa de forma segura en Cloud Run
- Protege el tráfico de entrada de Cloud Run
- Conéctate a cuentas privadas de AlloyDB desde GKE Autopilot
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.