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

1. Introduction

L'extension de sécurité Gemini CLI est une extension Open Source Gemini CLI conçue par Google qui analyse le code pour détecter les risques et les failles de sécurité. Vous pouvez utiliser l'extension de sécurité 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'appeler pour examiner les demandes d'extraction sur GitHub. Dans cet atelier de programmation, nous allons voir comment utiliser l'extension de sécurité 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 vers Google Cloud
  • Découvrir les avantages d'utiliser un pool d'identités de charge de travail et un fournisseur d'identité de charge de travail plutôt qu'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 de sécurité

Prérequis

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

Cet atelier de programmation est destiné aux développeurs qui connaissent le workflow CI/CD sur GitHub. Vous n'avez pas besoin de connaître Gemini CLI ni ses extensions. Si vous souhaitez 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 du sélecteur de 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 vérifier 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 de GitHub Actions vers Google Cloud.

  1. Pour chaque workflow d'exécution de tâche GitHub Actions, GitHub en tant que fournisseur d'identité externe émet un JWT (jeton Web JSON) signé. Ce jeton contient des "revendications" telles que repository, workflow, et job_workflow_ref, qui servent de carte d'identité numérique pour ce runner spécifique. Dans cet atelier, vous allez créer un workflow GitHub Actions avec une tâche qui utilise l'action google-github-actions/run-gemini-cli, qui demandera un JWT à GitHub et enverra ce jeton au Security Token Service (STS) dans Google Cloud.
  2. Vous allez configurer 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 éphémère.
  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 connecté doit disposer des rôles et autorisations IAM nécessaires pour accéder aux ressources et services Google Cloud.

Avantages 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, ce qui implique de créer un secret GitHub Actions nommé GEMINI_API_KEY avec la valeur de clé appropriée. Toutefois, cette approche 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'elles sont compromises, elles ouvrent l'accès à 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.
  • Les clés API Gemini sont également difficiles à gérer à 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 fournisseurs d'identités de charge de travail 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 de configuration à partir du dépôt google-github-actions/run-gemini-cli.
  2. Rendez le script 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 yml de workflow à 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 un workflow d'analyse de sécurité sur des demandes d'extraction nouvelles et existantes

Démarrez une nouvelle demande d'extraction dans votre dépôt GitHub ou publiez un nouveau 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 validé dans votre dépôt balisera tous les problèmes de sécurité qu'elle détecte par catégories de gravité, de "Critique" à "Élevé", "Moyen" 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 une liste croissante de commandes personnalisées offrant de nouvelles fonctionnalités de sécurité dans l'extension de sécurité Gemini CLI et à commencer à l'utiliser dans vos workflows. Exemple :

  • /security:scan-deps croise les dépendances de votre projet avec OSV.dev.

Consultez également les notes de version pour connaître les dernières fonctionnalités et 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é.