1. Présentation
Dans cet atelier, vous allez déployer le portail des employés qui leur permet de consulter, 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 utiliser de réseau privé virtuel (VPN). L'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 travailleurs à distance, à la fois sur site et dans les environnements cloud. Il offre 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 effectue la requête à l'aide de Google Identity Service et transmet la requête seulement si elle provient d'un utilisateur autorisé à accéder à l'application. De plus, IAP peut modifier les en-têtes de la requête pour inclure des informations sur l'utilisateur authentifié.
Objectifs de l'atelier
- Configurer un groupe de points de terminaison du réseau (NEG) sans serveur
- 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 mettre à jour à 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 (en général, vous n'y accordez d'importance particulière). Dans la plupart des ateliers de programmation, vous devrez indiquer l'ID de votre projet (généralement identifié par
PROJECT_ID
). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre de manière aléatoire. Vous pouvez également en spécifier un et voir s'il est disponible. Après cette étape, l'ID n'est plus modifiable et restera donc le même pour toute la durée du projet. - Pour information, il existe une troisième valeur (le numéro de projet) que certaines API utilisent. 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 désactiver les ressources et éviter ainsi que des frais ne vous soient facturés après ce tutoriel, vous pouvez supprimer le projet ou les ressources que vous avez créées. 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 du service IAP et du service Cloud Resource Manager
gcloud services enable \
iap.googleapis.com \
cloudresourcemanager.googleapis.com \
cloudidentity.googleapis.com \
compute.googleapis.com
- Cloner le dépôt de l'application exemple et accéder 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 la fin de l'exécution du script 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 "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 des employés. 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 répartition et de gestion des sessions, les vérifications d'é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 de NEG sans serveur pour envoyer 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éez le proxy HTTPS cible pour rediriger 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].
Restreindre l'entrée au service Cloud Run
Limitez le trafic entrant à n'accepter que les requêtes internes et les requêtes provenant de l'équilibrage de charge HTTP(S).
- Mettez à 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 est désormais signalé 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 des applications au lieu de pare-feu au niveau du réseau.
Configurer l'écran d'autorisation OAuth
Une marque est l'écran de consentement OAuth qui contient des informations sur la marque pour les utilisateurs. Les marques peuvent être limité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 à tous les internautes.
- 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éez un client à l'aide du 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 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 Cloud Console, sélectionnez le projet dans le menu déroulant de sélection des projets.
- Accédez à l'écran de consentement OAuth dans Cloud Console.
- Cliquez sur "MAKE EXTERNAL" (RENDRE EXTERNE) sous "User Type" (Type d'utilisateur).
- Définissez l'état de publication sur "Test".
- 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 l'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 de l'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 de l'atelier.
- Fermer le navigateur
Accorder l'accès au portail des employés à un utilisateur
- Ajouter 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
Confirmer 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 maintenant 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 les autres ateliers de programmation Cymbal Eats:
- Déclencher des workflows Cloud avec Eventarc
- Déclencher le traitement des événements à partir de Cloud Storage
- Se connecter à CloudSQL 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 des applications de manière sécurisée sur Cloud Run
- Sécuriser le trafic entrant Cloud Run
- Se connecter à AlloyDB privé 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.