Présentation
Le principe du moindre privilège stipule qu'une ressource ne doit avoir accès qu'à l'ensemble exact des ressources dont elle a besoin pour fonctionner. Par exemple, si un service effectue la sauvegarde automatisée d'une base de données, il doit être limité à des autorisations en lecture seule sur une seule base de données. De même, si un service est uniquement chargé de chiffrer des données, il ne doit pas disposer des autorisations nécessaires pour les déchiffrer.
Dans Cloud Run, si un service est déployé alors qu'aucun compte de service n'a été spécifié, un compte de service par défaut est utilisé. Par défaut, le compte de service utilisé est le compte de service Compute Engine, qui dispose du rôle "Éditeur" étendu sur le projet. En raison de l'héritage des liaisons de stratégie, ce compte de service dispose des autorisations de lecture et d'écriture sur la plupart des ressources de votre projet. Bien que pratique, cette approche présente un risque de sécurité inhérent, car les ressources peuvent être créées, modifiées ou supprimées avec ce compte de service.
Pour atténuer ce risque et implémenter le principe du moindre privilège, vous devez créer un compte de service qui servira d'identité au service, et accorder à ce compte l'ensemble minimal d'autorisations nécessaires au fonctionnement du service.
Objectifs
Dans cet atelier, vous apprendrez à effectuer les tâches suivantes :
- Configurer votre environnement et activer l'API Cloud Run
- Créer et déployer un service Cloud Run public
- Tester le service avec des requêtes non authentifiées
- Créer un compte de service avec les autorisations minimales
- Utiliser la gcloud CLI pour vous authentifier avec le compte de service et appeler un service Cloud Run
- Implémenter le principe du moindre privilège en accordant l'ensemble minimal d'autorisations requises pour appeler un service sur Cloud Run
Prérequis
Ces ateliers nécessitent des connaissances intermédiaires sur Google Cloud. Bien que les étapes requises soient abordées dans le contenu, il est préférable d'être familiarisé avec l'un des produits suivants :
Préparation
Avant de cliquer sur le bouton "Démarrer l'atelier"
Remarque : Lisez ces instructions.
Les ateliers sont minutés, et vous ne pouvez pas les mettre en pause. Le minuteur, qui démarre lorsque vous cliquez sur Démarrer l'atelier, indique combien de temps les ressources Google Cloud resteront accessibles.
Cet atelier pratique Qwiklabs vous permet de suivre vous-même les activités dans un véritable environnement cloud, et non dans un environnement de simulation ou de démonstration. Des identifiants temporaires vous sont fournis pour vous permettre de vous connecter à Google Cloud le temps de l'atelier.
Conditions requises
Pour réaliser cet atelier, vous devez :
- avoir accès à un navigateur Internet standard (nous vous recommandons d'utiliser Chrome) ;
- disposer de suffisamment de temps pour effectuer l'atelier en une fois.
Remarque : Si vous possédez déjà votre propre compte ou projet Google Cloud, veillez à ne pas l'utiliser pour réaliser cet atelier.
Remarque : Si vous utilisez un Pixelbook, veuillez exécuter cet atelier dans une fenêtre de navigation privée.
Démarrer votre atelier et vous connecter à la console
-
Cliquez sur le bouton Démarrer l'atelier. Si l'atelier est payant, un pop-up s'affiche pour vous permettre de sélectionner un mode de paiement.
Sur la gauche, vous verrez un panneau contenant les identifiants temporaires à utiliser pour cet atelier.

-
Copiez le nom d'utilisateur, puis cliquez sur Ouvrir la console Google.
L'atelier lance les ressources, puis la page Sélectionner un compte dans un nouvel onglet.
Remarque : Ouvrez les onglets dans des fenêtres distinctes, placées côte à côte.
-
Sur la page "Sélectionner un compte", cliquez sur Utiliser un autre compte. La page de connexion s'affiche.

-
Collez le nom d'utilisateur que vous avez copié dans le panneau "Détails de connexion". Copiez et collez ensuite le mot de passe.
Remarque : Vous devez utiliser les identifiants fournis dans le panneau "Détails de connexion", et non vos identifiants Google Cloud Skills Boost. Si vous possédez un compte Google Cloud, ne vous en servez pas pour cet atelier (vous éviterez ainsi que des frais vous soient facturés).
- Accédez aux pages suivantes :
- Acceptez les conditions d'utilisation.
- N'ajoutez pas d'options de récupération ni d'authentification à deux facteurs (ce compte est temporaire).
- Ne vous inscrivez pas aux essais offerts.
Après quelques instants, la console Cloud s'ouvre dans cet onglet.
Remarque : Vous pouvez afficher le menu qui contient la liste des produits et services Google Cloud en cliquant sur le menu de navigation en haut à gauche.
Activer Google Cloud Shell
Google Cloud Shell est une machine virtuelle qui contient de nombreux outils pour les développeurs. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud.
Google Cloud Shell vous permet d'accéder à vos ressources Google Cloud grâce à une ligne de commande.
-
Dans la barre d'outils située en haut à droite dans la console Cloud, cliquez sur le bouton "Ouvrir Cloud Shell".

-
Cliquez sur Continuer.
Le provisionnement et la connexion à l'environnement prennent quelques instants. Une fois connecté, vous êtes en principe authentifié et le projet est défini sur votre ID_PROJET. Par exemple :

gcloud est l'outil de ligne de commande pour Google Cloud. Il est préinstallé sur Cloud Shell et permet la complétion par tabulation.
- Vous pouvez lister les noms des comptes actifs à l'aide de cette commande :
gcloud auth list
Résultat :
Credentialed accounts:
- @.com (active)
Exemple de résultat :
Credentialed accounts:
- google1623327_student@qwiklabs.net
- Vous pouvez lister les ID de projet à l'aide de cette commande :
gcloud config list project
Résultat :
[core]
project =
Exemple de résultat :
[core]
project = qwiklabs-gcp-44776a13dea667a6
Remarque : Pour consulter la documentation complète sur gcloud, accédez au guide de présentation de la gcloud CLI.
Tâche 1 : Configurer l'environnement
Configurez des variables d'environnement dans Cloud Shell pour rendre le processus de provisionnement plus flexible.
-
Activez l'API Cloud Run :
gcloud services enable run.googleapis.com
-
Créez une variable d'environnement LOCATION :
LOCATION={{{project_0.default_region|REGION}}}
-
Définissez la région Cloud Run par défaut :
gcloud config set run/region $LOCATION
Tâche 2 : Créer et déployer un service public
Conditions requises
L'entreprise Quickway Parking dispose d'un service de facturation Cloud Run qu'elle souhaite sécuriser davantage. Dans cette tâche, vous allez :
- Déployer le service de facturation à partir d'une image
- Tester le service en l'appelant sans aucune authentification
Déployer l'application avec Cloud Run
L'équipe de développement de Quickway dispose déjà d'une image de l'application de facturation disponible sur Google Cloud.
-
Déployez l'image de l'application de facturation dans Cloud Run :
gcloud run deploy billing-service \
--image gcr.io/qwiklabs-resources/gsp723-parking-service \
--region $LOCATION \
--allow-unauthenticated
-
Attribuez l'URL du nouveau service à une variable d'environnement :
BILLING_SERVICE_URL=$(gcloud run services list \
--format='value(URL)' \
--filter="billing-service")
-
Appelez le service sans aucune autorisation :
curl -X POST -H "Content-Type: application/json" $BILLING_SERVICE_URL -d '{"userid": "1234", "minBalance": 100}'
Le service ne génère aucune sortie lorsqu'il est appelé.
-
Dans le menu de navigation (
) de la console Google Cloud, cliquez sur Cloud Run.
-
Cliquez sur le lien vers le service billing-service.
-
Pour afficher les journaux, cliquez sur Journaux.
-
Ajoutez le filtre de journal minBalance
pour afficher le solde minimal reçu dans la requête envoyée au service.
-
Pour revenir à la page d'informations sur le service, cliquez sur <- Informations sur le service.
-
Sélectionnez billing-service en cochant la case située à gauche de la coche verte.

L'équipe de sécurité a repéré quelque chose dans les paramètres de sécurité. Voyez-vous ce qui les inquiète dans la configuration ci-dessus ?
Examinez de plus près l'authentification appliquée. Actuellement, tous les internautes peuvent appeler le service de facturation. Cela est indiqué par l'identité allUsers qui dispose du rôle Demandeur Cloud Run.

Lors du déploiement initial du service de facturation, l'autorisation --allow-unauthenticated
a été utilisée, ce qui signifie que le service est accessible au public et peut être appelé sans authentification.
Type |
Autorisation |
Description |
Accès par URL |
--allow-unauthenticated |
Rend le service accessible au public (les utilisateurs non authentifiés peuvent y accéder). |
Compte principal appelant |
allUsers |
Autorise tout le monde à appeler/déclencher le service. |
En supprimant l'autorisation --allow-unauthenticated
, vous pouvez utiliser les autorisations par défaut de Cloud Run pour sécuriser le service ou spécifier explicitement l'autorisation no-allow-unauthenticated
.
Type |
Autorisation |
Description |
Accès par URL |
--no-allow-unauthenticated |
Sécurise le service avec l'authentification (seuls les utilisateurs authentifiés peuvent y accéder). |
Compte principal appelant |
aucun |
N'autorise personne à appeler/déclencher le service. |
Remarque : N'oubliez pas qu'avec Google Cloud, vous devez toujours essayer d'utiliser le principe du moindre privilège dans votre solution.
En apportant ces modifications, l'équipe de sécurité sera beaucoup plus satisfaite de la conception globale.
Cliquez sur Vérifier ma progression pour valider la tâche exécutée.
Déployer un service Cloud Run public
Tâche 3 : Authentifier les requêtes de service
L'équipe met à jour la conception de l'application pour montrer comment les modifications vont fonctionner :

Les principales modifications sont les suivantes :
- Supprimer l'accès public non authentifié au service de facturation
- Créer un compte de service avec les autorisations appropriées pour appeler le service de facturation
Mettre à jour le service pour exiger une authentification
Maintenant que vous en savez plus sur les autorisations utilisées avec Cloud Run, corrigez les autorisations d'authentification appliquées au service de facturation :
-
Supprimez le service déployé existant :
gcloud run services delete billing-service
-
Si vous y êtes invité, saisissez Y, puis appuyez sur Entrée.
-
Redéployez le service de facturation avec l'autorisation --no-allow-authenticated
:
gcloud run deploy billing-service \
--image gcr.io/qwiklabs-resources/gsp723-parking-service \
--region $LOCATION \
--no-allow-unauthenticated
En redéployant le service, vous empêchez tout accès non authentifié à son URL de service. De plus, l'autorisation d'accès permettant d'appeler le service a été supprimée.
-
Patientez quelques secondes, puis appelez à nouveau le service de facturation comme précédemment :
curl -X POST -H "Content-Type: application/json" $BILLING_SERVICE_URL -d '{"userid": "1234", "minBalance": 100}'
Comme prévu, le résultat est une erreur d'autorisation, car le service nécessite désormais une authentification.
Créer un compte de service
Pour appeler le service de facturation, vous aurez besoin d'une identité ou d'un compte de service disposant des autorisations appropriées, et de lier cette identité au service.
Vous pouvez le faire dans la console Google Cloud ou avec l'interface de ligne de commande gcloud. Dans cet atelier, vous allez utiliser la console Google Cloud pour créer le compte de service et configurer la nouvelle liaison de stratégie pour le service de facturation.
-
Dans le menu de navigation (
) de la console Google Cloud, sélectionnez IAM et administration > Comptes de service.
-
Pour créer un compte de service qui fournira un accès authentifié, cliquez sur Créer un compte de service en haut de la page.
-
Nommez le compte de service Billing Initiator
.

-
Pour créer le compte, cliquez sur Créer et continuer, puis passez à l'étape Accorder l'accès.
-
Pour accorder au compte de service Billing Initiator l'autorisation d'appeler le service de facturation, sélectionnez le menu déroulant Rôle, faites défiler la partie gauche jusqu'à Cloud Run
, puis sélectionnez le rôle Demandeur Cloud Run
.

-
Pour terminer la configuration du compte de service, cliquez sur Continuer, puis sur Terminé.
Le nouveau compte de service s'affiche en haut de la liste des comptes de service dans la console.

Le compte de service Billing Initiator a été créé avec l'autorisation d'appeler un service Cloud Run, à l'aide d'une liaison de stratégie IAM sur votre projet.
Cliquez sur Vérifier ma progression pour valider la tâche exécutée.
Créer un compte de service
Tâche 4 : Appeler le service avec authentification
Maintenant que vous disposez d'un compte de service doté de l'autorisation appropriée, vous pouvez l'utiliser pour appeler votre service Cloud Run.
S'authentifier avec gcloud
La première étape consiste à définir le compte de service dans gcloud afin qu'il puisse être utilisé pour s'authentifier auprès du service.
-
Dans le menu du terminal Cloud Shell, ouvrez un nouveau shell dans un onglet distinct en cliquant sur Ajouter (
).
Exécutez les commandes restantes de cette tâche dans cette fenêtre Cloud Shell.
-
Récupérez l'adresse e-mail du compte de service et enregistrez-la dans une variable d'environnement :
BILLING_INITIATOR_EMAIL=$(gcloud iam service-accounts list --filter="Billing Initiator" --format="value(EMAIL)"); echo $BILLING_INITIATOR_EMAIL
-
Dans ce terminal Cloud Shell, attribuez l'URL du service de facturation à une variable d'environnement :
BILLING_SERVICE_URL=$(gcloud run services list \
--format='value(URL)' \
--filter="billing-service")
-
Pour authentifier gcloud à l'aide du compte de service, générez un fichier de clé :
gcloud iam service-accounts keys create key.json --iam-account=${BILLING_INITIATOR_EMAIL}
-
Autorisez l'accès à Cloud Run avec un compte de service :
gcloud auth activate-service-account --key-file=key.json
Appeler le service
-
Appelez le service de facturation Cloud Run avec un jeton d'identité généré à partir du compte de service :
curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-identity-token)" \
$BILLING_SERVICE_URL -d '{"userid": "1234", "minBalance": 500}'
-
Dans le menu de navigation (
) de la console Google Cloud, cliquez sur Cloud Run.
-
Cliquez sur le lien vers le service billing-service.
-
Pour afficher les journaux, cliquez sur Journaux.
-
Ajoutez le filtre de journal minBalance
pour afficher le solde minimal mis à jour qui a été reçu dans la requête envoyée au service.
Cliquez sur Vérifier ma progression pour valider la tâche exécutée.
Appeler un service Cloud Run avec authentification
Tâche 5 : Implémenter le principe du moindre privilège
Vous avez utilisé un compte de service doté des autorisations appropriées pour appeler un service Cloud Run qui était auparavant accessible à tous. Mais avez-vous utilisé les privilèges minimaux absolus qui sont nécessaires pour appeler ce service spécifique ?
Pour vous en assurer, déployez un deuxième service de facturation qui ne devrait être accessible qu'à d'autres services internes privés, tels que Cloud Scheduler.
Voici un diagramme de cette exigence :

Déployer un deuxième service
-
Ouvrez un troisième onglet ou une troisième fenêtre de terminal Cloud Shell.
-
Créez une variable d'environnement LOCATION :
LOCATION={{{project_0.default_region|REGION}}}
-
Pour simuler un deuxième service, déployez l'image de l'application de facturation sur Cloud Run :
gcloud run deploy billing-service-2 \
--image gcr.io/qwiklabs-resources/gsp723-parking-service \
--region $LOCATION \
--no-allow-unauthenticated
-
Attribuez l'URL du nouveau service à une variable d'environnement :
BILLING_SERVICE_2_URL=$(gcloud run services list \
--format='value(URL)' \
--filter="billing-service-2")
Appeler le deuxième service avec l'identité du compte de service
-
Dans ce troisième terminal Cloud Shell, autorisez l'accès à Cloud Run avec le même compte de service :
gcloud auth activate-service-account --key-file=key.json
-
Appelez le deuxième service Cloud Run avec un jeton d'identité généré à partir du compte de service :
curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-identity-token)" \
$BILLING_SERVICE_2_URL -d '{"userid": "1234", "minBalance": 900}'
Pourquoi avez-vous réussi ? Tout simplement parce que lorsque vous avez créé le compte de service, les autorisations "Demandeur Cloud Run" lui ont été accordées sur le projet. En raison de l'héritage, les ressources du projet, telles que les deux services Cloud Run, héritent de ces autorisations. Par conséquent, le compte de service peut être utilisé pour appeler les services.
Limiter les autorisations des comptes de service
Pour implémenter pleinement le principe du moindre privilège, le compte de service ne doit disposer d'autorisations que sur le service dont il a besoin.
Dans cette sous-tâche, vous allez supprimer l'autorisation précédemment accordée au compte de service sur le projet, puis ajouter les autorisations appropriées qui sont nécessaires pour appeler le service de facturation d'origine.
-
Passez à la première fenêtre de terminal Cloud Shell.
-
Dans ce terminal Cloud Shell, récupérez l'adresse e-mail du compte de service et enregistrez-la dans une variable d'environnement :
BILLING_INITIATOR_EMAIL=$(gcloud iam service-accounts list --filter="Billing Initiator" --format="value(EMAIL)"); echo $BILLING_INITIATOR_EMAIL
-
Supprimez l'autorisation du compte de service pour le projet :
gcloud projects remove-iam-policy-binding $GOOGLE_CLOUD_PROJECT \
--member=serviceAccount:${BILLING_INITIATOR_EMAIL} \
--role=roles/run.invoker
-
Ajoutez l'autorisation au compte de service sur le service de facturation :
gcloud run services add-iam-policy-binding billing-service --region $LOCATION \
--member=serviceAccount:${BILLING_INITIATOR_EMAIL} \
--role=roles/run.invoker --platform managed
Appeler les services
-
Revenez au deuxième onglet ou à la deuxième fenêtre de terminal Cloud Shell.
-
Patientez quelques secondes, puis appelez le premier service de facturation Cloud Run avec un jeton d'identité généré à partir du compte de service :
curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-identity-token)" \
$BILLING_SERVICE_URL -d '{"userid": "1234", "minBalance": 700}'
La propagation des autorisations mises à jour prend quelques secondes. Une fois ce délai écoulé, l'appel devrait aboutir.
-
Passez à la troisième fenêtre de terminal Cloud Shell.
-
Essayez d'appeler le deuxième service Cloud Run avec un jeton d'identité généré à partir du même compte de service :
curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-identity-token)" \
$BILLING_SERVICE_2_URL -d '{"userid": "1234", "minBalance": 500}'
Vous devriez maintenant recevoir une erreur d'autorisation indiquant que le compte de service ne dispose que de l'ensemble minimal d'autorisations requis pour appeler le premier service.
Cliquez sur Vérifier ma progression pour valider la tâche exécutée.
Utiliser le principe du moindre privilège pour appeler un service Cloud Run
Félicitations !
Dans cet atelier, vous avez vu comment reconfigurer un service déployé pour sécuriser son accès. Vous avez également implémenté le principe du moindre privilège en accordant des autorisations d'accès aux ressources sur Google Cloud. Vous avez effectué les tâches suivantes :
- Déployer un service sur Cloud Run
- Utiliser gcloud CLI pour mettre à jour le service afin qu'il exige une authentification
- Créer un compte de service avec les autorisations requises pour appeler le service
- Définir les autorisations minimales requises pour appeler un service spécifique sur Cloud Run, en implémentant le principe du moindre privilège
Suivez la série de vidéos Serverless Expeditions pour découvrir comment utiliser ces produits dans votre projet.
Terminer l'atelier
Une fois l'atelier terminé, cliquez sur Terminer l'atelier. Google Cloud Skills Boost supprime les ressources que vous avez utilisées, puis efface le compte.
Si vous le souhaitez, vous pouvez noter l'atelier. Sélectionnez un nombre d'étoiles, saisissez un commentaire, puis cliquez sur Envoyer.
Le nombre d'étoiles correspond à votre degré de satisfaction :
- 1 étoile = très insatisfait(e)
- 2 étoiles = insatisfait(e)
- 3 étoiles = ni insatisfait(e), ni satisfait(e)
- 4 étoiles = satisfait(e)
- 5 étoiles = très satisfait(e)
Si vous ne souhaitez pas donner votre avis, vous pouvez fermer la boîte de dialogue.
Pour soumettre des commentaires, suggestions ou corrections, veuillez accéder à l'onglet Assistance.
Copyright 2020 Google LLC Tous droits réservés. Google et le logo Google sont des marques de Google LLC. Tous les autres noms d'entreprises et de produits peuvent être des marques des entreprises auxquelles ils sont associés.