arrow_back

Implémenter des liaisons de stratégie IAM basées sur le principe du moindre privilège dans Cloud Run [APPRUN]

Accédez à plus de 700 ateliers et cours

Implémenter des liaisons de stratégie IAM basées sur le principe du moindre privilège dans Cloud Run [APPRUN]

Atelier 1 heure universal_currency_alt 5 crédits show_chart Débutant
info Cet atelier peut intégrer des outils d'IA pour vous accompagner dans votre apprentissage.
Accédez à plus de 700 ateliers et cours

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 :

  • IAM
  • Cloud Run

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

  1. 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.

    Panneau d'identifiants

  2. 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.
  3. Sur la page "Sélectionner un compte", cliquez sur Utiliser un autre compte. La page de connexion s'affiche.

    Boîte de dialogue "Sélectionner un compte" avec l'option "Utiliser un autre compte" encadrée.

  4. 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).
  1. 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. Menu de la console Cloud

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.

  1. Dans la barre d'outils située en haut à droite dans la console Cloud, cliquez sur le bouton "Ouvrir Cloud Shell".

    Icône Cloud Shell encadrée

  2. 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 :

ID de projet mis en évidence dans le terminal Cloud Shell

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.

  1. Activez l'API Cloud Run :

    gcloud services enable run.googleapis.com
  2. Créez une variable d'environnement LOCATION :

    LOCATION={{{project_0.default_region|REGION}}}
  3. 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.

  1. 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
  2. Attribuez l'URL du nouveau service à une variable d'environnement :

    BILLING_SERVICE_URL=$(gcloud run services list \ --format='value(URL)' \ --filter="billing-service")
  3. 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é.
  4. Dans le menu de navigation (menu de navigation) de la console Google Cloud, cliquez sur Cloud Run.

  5. Cliquez sur le lien vers le service billing-service.

  6. Pour afficher les journaux, cliquez sur Journaux.

  7. Ajoutez le filtre de journal minBalance pour afficher le solde minimal reçu dans la requête envoyée au service.

  8. Pour revenir à la page d'informations sur le service, cliquez sur <- Informations sur le service.

  9. Sélectionnez billing-service en cochant la case située à gauche de la coche verte.

    La page Cloud Run, qui inclut le service de facturation sélectionné.

    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.

    Diagramme de Quickway Parking, où le service de facturation est accessible publiquement.

    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 :

Diagramme de Quickway Parking, où le service de facturation nécessite une authentification.

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 :

  1. Supprimez le service déployé existant :

    gcloud run services delete billing-service
  2. Si vous y êtes invité, saisissez Y, puis appuyez sur Entrée.

  3. 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.

  4. 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.

  1. Dans le menu de navigation (menu de navigation) de la console Google Cloud, sélectionnez IAM et administration > Comptes de service.

  2. 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.

  3. Nommez le compte de service Billing Initiator.

    Page &quot;Créer un compte de service&quot; avec le bouton &quot;Créer et continuer&quot; en surbrillance.

  4. Pour créer le compte, cliquez sur Créer et continuer, puis passez à l'étape Accorder l'accès.

  5. 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.

    Le bouton &quot;Continuer&quot; mis en surbrillance.

  6. 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 que vous venez de créer s&#39;affiche, avec son état et sa description.

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.

  1. Dans le menu du terminal Cloud Shell, ouvrez un nouveau shell dans un onglet distinct en cliquant sur Ajouter (ajouter).

    Exécutez les commandes restantes de cette tâche dans cette fenêtre Cloud Shell.

  2. 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
  3. 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")
  4. 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}
  5. Autorisez l'accès à Cloud Run avec un compte de service :

    gcloud auth activate-service-account --key-file=key.json

Appeler le service

  1. 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}'
  2. Dans le menu de navigation (menu de navigation) de la console Google Cloud, cliquez sur Cloud Run.

  3. Cliquez sur le lien vers le service billing-service.

  4. Pour afficher les journaux, cliquez sur Journaux.

  5. 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 :

Diagramme des exigences montrant l&#39;accès à un deuxième service de facturation interne.

Déployer un deuxième service

  1. Ouvrez un troisième onglet ou une troisième fenêtre de terminal Cloud Shell.

  2. Créez une variable d'environnement LOCATION :

    LOCATION={{{project_0.default_region|REGION}}}
  3. 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
  4. 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

  1. 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
  2. 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.

  1. Passez à la première fenêtre de terminal Cloud Shell.

  2. 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
  3. 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
  4. 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

  1. Revenez au deuxième onglet ou à la deuxième fenêtre de terminal Cloud Shell.

  2. 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.
  1. Passez à la troisième fenêtre de terminal Cloud Shell.

  2. 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.

Avant de commencer

  1. Les ateliers créent un projet Google Cloud et des ressources pour une durée déterminée.
  2. Les ateliers doivent être effectués dans le délai imparti et ne peuvent pas être mis en pause. Si vous quittez l'atelier, vous devrez le recommencer depuis le début.
  3. En haut à gauche de l'écran, cliquez sur Démarrer l'atelier pour commencer.

Utilisez la navigation privée

  1. Copiez le nom d'utilisateur et le mot de passe fournis pour l'atelier
  2. Cliquez sur Ouvrir la console en navigation privée

Connectez-vous à la console

  1. Connectez-vous à l'aide des identifiants qui vous ont été attribués pour l'atelier. L'utilisation d'autres identifiants peut entraîner des erreurs ou des frais.
  2. Acceptez les conditions d'utilisation et ignorez la page concernant les ressources de récupération des données.
  3. Ne cliquez pas sur Terminer l'atelier, à moins que vous n'ayez terminé l'atelier ou que vous ne vouliez le recommencer, car cela effacera votre travail et supprimera le projet.

Ce contenu n'est pas disponible pour le moment

Nous vous préviendrons par e-mail lorsqu'il sera disponible

Parfait !

Nous vous contacterons par e-mail s'il devient disponible

Un atelier à la fois

Confirmez pour mettre fin à tous les ateliers existants et démarrer celui-ci

Utilisez la navigation privée pour effectuer l'atelier

Ouvrez une fenêtre de navigateur en mode navigation privée pour effectuer cet atelier. Vous éviterez ainsi les conflits entre votre compte personnel et le compte temporaire de participant, qui pourraient entraîner des frais supplémentaires facturés sur votre compte personnel.