Utiliser l'extension de sécurité Gemini CLI pour les revues de demandes d'extraction GitHub

1. Introduction

L'extension Gemini CLI Security est une extension Gemini CLI Open Source conçue par Google qui analyse le code pour détecter les risques et les failles de sécurité. Vous pouvez utiliser l'extension Security avec Gemini CLI pour identifier les problèmes de sécurité en local, comme vous le feriez avec n'importe quelle autre extension Gemini CLI. Vous pouvez également l'invoquer pour examiner les demandes d'extraction sur GitHub. Dans cet atelier de programmation, nous allons voir comment utiliser l'extension Security dans votre dépôt GitHub.

Objectifs de l'atelier

  • Configurer une authentification sécurisée de GitHub vers Google Cloud
  • Créer un workflow GitHub Actions qui appelle l'extension de sécurité Gemini CLI
  • Effectuer un examen de sécurité sur une demande d'extraction nouvelle ou existante à l'aide de GitHub Actions

Points abordés

  • Utiliser la fédération d'identité de charge de travail pour une authentification sécurisée de GitHub Actions à Google Cloud
  • Découvrez les avantages de l'utilisation d'un pool d'identités de charge de travail et d'un fournisseur d'identité de charge de travail par rapport à une clé API Gemini pour l'authentification.
  • Effectuer un examen de sécurité avec des demandes d'extraction
  • Interpréter les examens de sécurité renvoyés par l'extension Sécurité

Prérequis

  • Un navigateur Web
  • Un compte et un dépôt GitHub
  • Un projet Google Cloud

Cet atelier de programmation s'adresse aux développeurs qui connaissent le workflow CI/CD sur GitHub. Vous n'êtes pas censé connaître Gemini CLI ni ses extensions. Pour découvrir comment fonctionnent les extensions, consultez l'atelier de programmation Premiers pas avec les extensions Gemini CLI.

Dans cet atelier de programmation, vous allez apprendre à configurer l'extension de sécurité Gemini CLI dans votre dépôt GitHub. Nous ne vous suggérerons pas de code pour ouvrir une demande d'extraction dans votre dépôt afin de déclencher la détection d'une faille de sécurité.

2. Avant de commencer

Créer ou sélectionner un projet

  1. Dans la console Google Cloud, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
  2. Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment valider la facturation.
  3. Ouvrez Cloud Shell, un environnement de ligne de commande exécuté dans Google Cloud. Cliquez sur Activer Cloud Shell en haut de la console Google Cloud.

Image du bouton "Activer Cloud Shell"

  1. Une fois connecté à Cloud Shell, vérifiez que vous êtes authentifié et que le projet est défini sur votre ID de projet à l'aide de la commande suivante :
gcloud auth list
  1. Exécutez la commande suivante pour vérifier que la commande gcloud est configurée pour utiliser votre projet.
gcloud config list project
  1. Si votre projet n'est pas défini, utilisez la commande suivante pour le définir :
gcloud config set project ${GOOGLE_CLOUD_PROJECT}

3. Configurer l'authentification de GitHub vers Google Cloud

Fonctionnement

Workflow GitHub Actions

La fédération d'identité de charge de travail est la méthode recommandée pour s'authentifier auprès de Google Cloud à partir de GitHub Actions.

  1. Pour chaque exécution de workflow job GitHub Actions, GitHub en tant que fournisseur d'identité externe émet un jeton Web JSON (JWT) signé. Ce jeton contient des "revendications" telles que repository, workflow et job_workflow_ref, qui servent de carte d'identité numérique pour ce coureur spécifique. Dans cet atelier, vous allez créer un workflow GitHub Actions avec un job qui utilise l'action google-github-actions/run-gemini-cli. Cette action demandera un jeton JWT à GitHub et l'enverra au service de jetons de sécurité (STS) dans Google Cloud.
  2. Vous configurerez un pool d'identités de charge de travail et un fournisseur dans Google Cloud en définissant l'URL de l'émetteur sur l'URL officielle du service de jetons GitHub https://token.actions.githubusercontent.com et en définissant vos "mappages d'attributs", qui incluent généralement les noms de dépôt et de branche. Google Cloud STS valide le JWT par rapport aux règles du pool d'identités de charge de travail. Si tout est correct, y compris les mappages d'attributs, le STS échange le jeton GitHub contre un jeton d'accès fédéré Google Cloud de courte durée.
  3. L'action google-github-actions/run-gemini-cli de votre workflow GitHub Actions peut désormais utiliser le jeton d'accès fédéré Google Cloud éphémère pour "emprunter l'identité" d'un compte de service connecté au pool d'identités de charge de travail. Le compte de service associé doit disposer des rôles et autorisations IAM nécessaires pour accéder aux ressources et services Google Cloud.

Avantages de l'utilisation de la fédération d'identité de charge de travail par rapport à la clé API Gemini

Il est possible d'authentifier les appels Gemini CLI provenant de GitHub Actions à l'aide d'une clé API Gemini. Pour ce faire, vous devez créer un secret GitHub Actions nommé GEMINI_API_KEY avec la valeur de clé appropriée. Toutefois, cette action est déconseillée pour les raisons de sécurité suivantes :

  • Les clés API Gemini peuvent disposer d'autorisations étendues à partir de leurs liaisons de rôle IAM respectives. Lorsqu'ils sont compromis, ils permettent d'accéder à un large éventail de ressources et de services Google Cloud. La fédération d'identité de charge de travail utilise des comptes de service et des jetons d'accès éphémères, ce qui renforce considérablement l'authentification.
  • Il est également difficile de gérer les clés API Gemini à grande échelle. Identifier les workflows qui utilisent une clé exposée prend du temps. La rotation manuelle des clés prend également du temps. En revanche, vous pouvez facilement rechercher, modifier et supprimer les pools et les fournisseurs Workload Identity associés à votre dépôt depuis la console Cloud.
  • Avec les clés API Gemini, vous devez toujours vérifier que vous ne les exposez pas accidentellement dans les journaux d'accès ou de débogage. Avec la fédération d'identité de charge de travail, vous ne stockez pas de secrets de workflows GitHub Actions, mais des variables, qui sont intrinsèquement moins sensibles.

Configurer GitHub Actions et Google Cloud

  1. Dans Cloud Shell, connectez-vous à votre compte GitHub.
gh auth login
  1. Créez un fichier setup_workload_identity.sh, puis copiez et collez le script d'installation depuis le dépôt google-github-actions/run-gemini-cli.
  2. Transformez le script en exécutable.
chmod +x setup_workload_identity.sh
  1. Exécutez le script.
./setup_workload_identity.sh --repo {OWNER/REPO} --project {GOOGLE_CLOUD_PROJECT}

4. Créer un workflow GitHub Actions

  1. Extrayez un dépôt GitHub dont vous êtes propriétaire.
git clone {YOUR_REPO}
cd {YOUR REPO}
  1. Créez un workflow GitHub Actions qui appelle la commande à barre oblique /security:analyze-github-pr en copiant un exemple de script de workflow yml à partir du dépôt /gemini-cli-extensions/security.
git checkout -b workflow
mkdir .github/ && cd .github/
mkdir workflows/ && cd workflows/
curl -L https://raw.githubusercontent.com/gemini-cli-extensions/security/refs/heads/main/.github/workflows/gemini-review.yml -o gemini-review.yml
  1. Transférez le workflow GitHub Actions vers votre origine distante sur GitHub.
git add .github/workflows/gemini-review.yml
git commit -m "add new gha workflow"
git push --set-upstream origin workflow

5. Exécuter le workflow d'analyse de sécurité sur les demandes d'extraction nouvelles et existantes

Créez une demande d'extraction dans votre dépôt GitHub ou publiez un commentaire @gemini-cli /review en tant que propriétaire ou contributeur du dépôt. Cela lancera un examen de sécurité sur la demande d'extraction. L'extension de sécurité Gemini CLI du workflow GitHub Actions que vous avez envoyé à votre dépôt taguera tous les problèmes de sécurité qu'elle trouvera par catégories de gravité : "Critique", "Élevée", "Moyenne" et "Faible".

Voici un exemple d'examen de sécurité sur une nouvelle demande d'extraction et un exemple d'examen de sécurité sur une demande d'extraction existante.

6. Pour aller plus loin

Nous vous encourageons à explorer la liste croissante de commandes personnalisées offrant de nouvelles fonctionnalités de sécurité dans l'extension Gemini CLI Security et à commencer à l'utiliser dans vos workflows. Exemple :

  • /security:scan-deps fait des références croisées entre les dépendances de votre projet et OSV.dev.

Consultez les notes de version pour découvrir les dernières fonctionnalités et les corrections de bugs.

7. Félicitations

Félicitations, vous avez configuré votre dépôt GitHub pour utiliser l'extension de sécurité Gemini CLI afin d'analyser les demandes d'extraction pour détecter les risques et les failles de sécurité.