1. Présentation
Dans cet atelier, vous allez déployer le portail des employés qui permet aux employés d'afficher, de mettre à jour et de supprimer des commandes depuis l'application Cymbal Eats. Vous allez utiliser Identity-Aware Proxy (IAP) pour sécuriser l'accès au portail sans passer par un réseau privé virtuel (VPN). IAP simplifie l'implémentation d'un modèle d'accès zéro confiance et prend moins de temps qu'un VPN pour les télétravailleurs, que ce soit sur site ou dans le cloud. Vous bénéficiez ainsi d'un point de contrôle unique pour gérer l'accès à vos applications.
Qu'est-ce qu'Identity-Aware Proxy ?
Identity-Aware Proxy (IAP) est un service Google Cloud qui intercepte les requêtes envoyées à votre application, authentifie l'utilisateur qui les envoie à l'aide de Google Identity Service et ne les laisse passer que si elles proviennent d'un utilisateur autorisé à accéder à l'application. En outre, il peut modifier les en-têtes des requêtes pour inclure des informations sur l'utilisateur authentifié.
Objectifs de l'atelier
- Configurer un groupe de points de terminaison du réseau sans serveur (NEG)
- Configurer un équilibreur de charge
- Activer IAP pour restreindre l'accès
- Restreindre l'accès à l'aide d'IAP
2. Préparation
Configuration de l'environnement d'auto-formation
- Connectez-vous à la console Google Cloud, puis créez un projet ou réutilisez un projet existant. (Si vous ne possédez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.)
- Le nom du projet est le nom à afficher pour les participants au projet. Il s'agit d'une chaîne de caractères non utilisée par les API Google. Vous pouvez le modifier à tout moment.
- L'ID du projet est unique parmi tous les projets Google Cloud et non modifiable une fois défini. La console Cloud génère automatiquement une chaîne unique. généralement, vous ne vous souciez
pas de ce que c’est. Dans la plupart des ateliers de programmation, vous devrez référencer l'ID du projet (il est généralement identifié comme
PROJECT_ID
). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre au hasard. Vous pouvez également essayer la vôtre pour voir si elle est disponible. Il ne peut pas être modifié après cette étape et restera actif pendant toute la durée du projet. - Pour votre information, il existe une troisième valeur, le numéro de projet, utilisé par certaines API. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
- Vous devez ensuite activer la facturation dans la console Cloud pour utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour arrêter les ressources afin d'éviter que des frais ne vous soient facturés au-delà de ce tutoriel, vous pouvez supprimer les ressources que vous avez créées ou l'ensemble du projet. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai gratuit pour bénéficier d'un crédit de 300 $.
Configuration de l'environnement
- Créer des variables d'environnement liées au projet et aux ressources
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
- Activer les API de service IAP et Cloud Resource Manager
gcloud services enable \
iap.googleapis.com \
cloudresourcemanager.googleapis.com \
cloudidentity.googleapis.com \
compute.googleapis.com
- Clonez le dépôt de l'exemple d'application et accédez au répertoire.
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/employee-ui
- Déployez le portail des employés à l'aide du script de configuration. Attendez que le script soit terminé avant de passer à l'étape suivante
./setup.sh
Exemple de résultat :
... 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
- Cliquez sur le lien "Service URL" (URL du service).
3. Configurer un groupe de points de terminaison du réseau sans serveur (NEG)
Vous allez créer un groupe de points de terminaison du réseau sans serveur( NEG sans serveur) pour le service Cloud Run de l'UI de l'employé. Les NEG sans serveur vous permettent d'utiliser des applications sans serveur Google Cloud avec un équilibrage de charge HTTP(S) externe.
- Créez un groupe de points de terminaison du réseau pour le service d'UI des employés.
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
Exemple de résultat
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].
Créer un service de backend et ajouter le NEG sans serveur
Un service de backend définit la manière dont Cloud Load Balancing répartit le trafic. La configuration du service de backend contient un ensemble de valeurs, telles que le protocole utilisé pour se connecter aux backends, divers paramètres de distribution et de session, les vérifications de l'état et les délais avant expiration. Ces paramètres permettent de contrôler précisément le comportement de votre équilibreur de charge.
- Créer un service de backend
gcloud compute backend-services create employee-ui-iap-backend \
--global
Exemple de résultat
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
- Ajouter le NEG sans serveur en tant que backend au service 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
Exemple de résultat
Updated [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/backendServices/employee-ui-iap-backend].
- Créer un mappage d'URL pour acheminer les requêtes entrantes vers le service 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. Configurer les composants de l'équilibreur de charge
Le schéma suivant montre que l'équilibreur de charge utilise un backend NEG sans serveur pour diriger les requêtes vers un service Cloud Run sans serveur.
Réserver une adresse IP statique
- Réserver une adresse IPv4 statique et stocker le domaine
gcloud compute addresses create employee-ui-iap-ip \
--network-tier=PREMIUM \
--ip-version=IPV4 \
--global
Exemple de résultat
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/addresses/employee-ui-iap-ip].
- Stocker le domaine nip.io
export DOMAIN=$(gcloud compute addresses list --filter employee-ui-iap-ip --format='value(ADDRESS)').nip.io
Créer une ressource de certificat SSL géré par Google
- Créer une ressource de certificat SSL géré par Google
gcloud compute ssl-certificates create employee-ui-iap-cert \
--description=employee-ui-iap-cert \
--domains=$DOMAIN \
--global
Exemple de résultat
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
Créer un proxy HTTPS cible
- Créer le proxy HTTPS cible pour acheminer les requêtes vers votre mappage d'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
Exemple de résultat
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:
Configurer des règles de transfert
- Créer une règle de transfert pour acheminer les requêtes entrantes vers le 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
Exemple de résultat :
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/forwardingRules/employee-ui-iap-forwarding-rule].
Limiter le trafic d'entrée au service Cloud Run
Restreignez le trafic entrant pour qu'il n'accepte que les requêtes internes et les requêtes provenant de l'équilibrage de charge HTTP(S).
- Mettre à jour le service pour n'autoriser que le trafic entrant provenant des requêtes internes et des requêtes via l'équilibreur de charge HTTP(S)
gcloud run services update employee-ui-service \
--ingress internal-and-cloud-load-balancing \
--region $REGION
Exemple de résultat :
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
- Cliquez sur le lien URL du service.
L'accès à l'URL du service Cloud Run apparaît désormais comme interdit.
5. Activer Cloud Identity-Aware Proxy (IAP) sur l'équilibreur de charge
IAP vous permet d'établir une couche d'autorisation centrale pour les applications accessibles via HTTPS. Vous pouvez utiliser un modèle de contrôle des accès au niveau de l'application plutôt que des pare-feu au niveau du réseau.
Configurer l'écran d'autorisation OAuth
Une marque correspond à l'écran de consentement OAuth qui contient les informations de branding destinées aux utilisateurs. Les marques peuvent être réservées aux utilisateurs internes ou publics. Une marque interne permet à un membre de la même organisation Google Workspace que le projet d'accéder au flux OAuth. Une marque publique rend le flux OAuth accessible à toute personne ayant accès à Internet.
- Créer une marque
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
Exemple de résultat
Created [462858740426]. applicationTitle: Cymbal Eats name: projects/462858740426/brands/462858740426 orgInternalOnly: true
Créer un client OAuth IAP
- Créer un client en utilisant le nom de la marque de l'étape précédente
gcloud alpha iap oauth-clients create \
projects/$PROJECT_ID/brands/$PROJECT_NUMBER \
--display_name=cymbal-eats-employee-ui
Exemple de résultat
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]
- Stocker le nom, l'ID et le code secret du client
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)')
- Dans la console Cloud, sélectionnez le projet dans le menu déroulant de sélection.
- Accédez à l'écran de consentement OAuth dans la console Cloud.
- Cliquez sur EXTERNE sous "Type d'utilisateur".
- Sélectionner "Test" pour l'état de publication
- Cliquez sur CONFIRMER.
6. Restreindre l'accès avec IAP
Limitez l'accès au service de backend à l'aide d'IAP, puis vérifiez que l'application est inaccessible.
- Activer IAP sur le service 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
Vérifier la configuration IAP
- Vérifier que le certificat SSL est ACTIF
gcloud compute ssl-certificates list --format='value(MANAGED_STATUS)'
- Obtenir l'URL du service
echo https://$DOMAIN
Exemple de résultat :
https://34.102.234.98.nip.io
- Cliquez sur l'URL du service pour ouvrir le portail des employés.
- Connectez-vous à l'aide des identifiants qui vous ont été attribués pour cet atelier.
- Fermer le navigateur
Accorder aux utilisateurs l'accès au portail des employés
- Ajoutez une liaison de stratégie IAM pour le rôle
'roles/iap.httpsResourceAccessor'
de l'utilisateur créé à l'étape précédente
gcloud iap web add-iam-policy-binding \
--resource-type=backend-services \
--service=employee-ui-iap-backend \
--member=user:$USER_EMAIL \
--role='roles/iap.httpsResourceAccessor'
Exemple de résultat :
Updated IAM policy for backend service [projects/462858740426/iap_web/compute/services/employee-ui-iap-backend].
Tester l'accès aux services
Vérifier que l'accès au portail des employés a été accordé
- Obtenir l'URL du service
echo https://$DOMAIN
Exemple de résultat :
https://34.102.234.98.nip.io
- Cliquez sur l'URL du service pour ouvrir le portail des employés.
Vous devriez à présent avoir accès au portail des employés.
(Facultatif) Déployez toutes les dépendances. Le déploiement de ces microservices peut prendre environ 20 minutes.
unset ORDER_SERVICE_URL
unset INVENTORY_SERVICE_URL
unset MENU_SERVICE_URL
cd ~/cymbal-eats
./setup.sh
./get-site-urls.sh
7. Félicitations !
Félicitations, vous avez terminé cet atelier de programmation.
Étapes suivantes :
Découvrez d'autres ateliers de programmation Cymbal Eats:
- Déclencher Cloud Workflows avec Eventarc
- Déclencher le traitement des événements depuis Cloud Storage
- Se connecter au service Cloud SQL privé depuis Cloud Run
- Se connecter à des bases de données entièrement gérées depuis Cloud Run
- Déclencher des jobs Cloud Run avec Cloud Scheduler
- Déployer une application sur Cloud Run en toute sécurité
- Sécuriser le trafic d'entrée Cloud Run
- Se connecter à une instance privée AlloyDB depuis GKE Autopilot
Effectuer un nettoyage
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez chaque ressource individuellement.
Supprimer le projet
Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.