GitHub PR レビューに Gemini CLI セキュリティ拡張機能を使用する

1. はじめに

Gemini CLI セキュリティ拡張機能は、Google が構築したオープンソースの Gemini CLI 拡張機能で、コードを分析してセキュリティ リスクと脆弱性を特定します。Gemini CLI で Security 拡張機能を使用すると、他の Gemini CLI 拡張機能と同様に、セキュリティの問題をローカルで特定できます。また、GitHub で Pull Request を確認するために呼び出すこともできます。この Codelab では、GitHub リポジトリで Security 拡張機能を使用する方法について説明します。

演習内容

  • GitHub から Google Cloud への安全な認証を構成する
  • Gemini CLI セキュリティ拡張機能を呼び出す GitHub Actions ワークフローを作成する
  • GitHub Actions を使用して、新規または既存の PR でセキュリティ レビューを実行する

学習内容

  • Workload Identity 連携を使用して GitHub Actions から Google Cloud への安全な認証を行う方法
  • 認証に Gemini API キーではなく Workload Identity プールと Workload Identity プロバイダを使用するメリットについて学習する
  • PR でセキュリティ レビューを実行する方法
  • Security 拡張機能から返されたセキュリティ レビューを解釈する方法

必要なもの

  • ウェブブラウザ
  • GitHub アカウントとリポジトリ
  • Google Cloud プロジェクト

この Codelab は、GitHub の CI/CD ワークフローに精通しているデベロッパーを対象としています。Gemini CLI や Gemini CLI 拡張機能に精通している必要はありません。拡張機能の仕組みについては、Codelab: Gemini CLI 拡張機能を使ってみるをご覧ください。

この Codelab では、GitHub リポジトリに Gemini CLI セキュリティ拡張機能を設定する方法について説明します。セキュリティの脆弱性の検出結果をトリガーするためにリポジトリに対して PR を開くコードは提案されません。

2. 始める前に

プロジェクトを作成または選択する

  1. Google Cloud コンソールのプロジェクト選択ページで、Google Cloud プロジェクトを選択または作成します。
  2. Cloud プロジェクトに対して課金が有効になっていることを確認します。課金を確認する方法をご覧ください。
  3. Google Cloud で動作するコマンドライン環境である Cloud Shell を開きます。Google Cloud コンソールの上部にある [Cloud Shell をアクティブにする] をクリックします。

[Cloud Shell をアクティブにする] ボタンの画像

  1. Cloud Shell に接続したら、次のコマンドを使用して、認証済みであることと、プロジェクトがプロジェクト ID に設定されていることを確認します。
gcloud auth list
  1. 次のコマンドを実行して、プロジェクトを使用するように gcloud コマンドが構成されていることを確認します。
gcloud config list project
  1. プロジェクトが設定されていない場合は、次のコマンドを使用して設定します。
gcloud config set project ${GOOGLE_CLOUD_PROJECT}

3. GitHub から Google Cloud への認証を設定する

仕組み

GitHub Actions ワークフロー

Workload Identity 連携は、GitHub Actions から Google Cloud への認証に推奨される方法です。

  1. GitHub Actions のすべてのワークフロー 実行 ジョブに対して、外部 ID プロバイダとしての GitHub が署名付き JWT(JSON Web Token)を発行します。このトークンには、repositoryworkflowjob_workflow_ref などの「クレーム」が含まれており、特定のランナーのデジタル ID カードとして機能します。このラボでは、google-github-actions/run-gemini-cli アクションを使用するジョブを含む GitHub Actions ワークフローを作成します。このアクションは、GitHub から JWT をリクエストし、このトークンを Google Cloud の Security Token Service(STS)に送信します。
  2. 発行者 URL を公式の GitHub トークン サービス URL https://token.actions.githubusercontent.com に設定し、「属性マッピング」(通常はリポジトリ名とブランチ名を含む)を定義することで、Google Cloud で Workload Identity プールプロバイダを構成します。Google Cloud STS は、Workload Identity プールのルールに対して JWT を検証します。属性マッピングを含むすべての項目がチェックされると、STS は GitHub トークンを有効期間の短い Google Cloud フェデレーション アクセス トークンと交換します。
  3. これで、GitHub Actions ワークフローの google-github-actions/run-gemini-cli アクションで、有効期間の短い Google Cloud 連携アクセス トークンを使用して、Workload Identity プールに接続されたサービス アカウントの権限を借用できるようになりました。接続されたサービス アカウントには、Google Cloud のリソースとサービスにアクセスするために必要な IAM ロールと権限が必要です。

Gemini API キーよりも Workload Identity 連携を使用するメリット

GitHub Actions から発信された Gemini CLI 呼び出しを Gemini API キーを使用して認証できます。これには、適切なキー値を持つ GEMINI_API_KEY という名前の新しい GitHub Actions シークレットを作成する必要があります。ただし、セキュリティ上の理由から、この方法は推奨されません。

  • Gemini API キーには、それぞれの IAM ロール バインディングから広範な権限が付与される可能性があります。侵害されると、幅広い Google Cloud リソースとサービスへのアクセスが可能になります。Workload Identity 連携では、サービス アカウントと有効期間の短いアクセス トークンが使用されるため、認証が大幅に強化されます。
  • Gemini API キーも、大規模な管理が困難です。公開されたキーを使用しているワークフローを特定するには時間がかかります。鍵を手動でローテーションする場合も時間がかかります。一方、Cloud Console からリポジトリに関連付けられた Workload Identity プールとプロバイダを簡単に検索、編集、削除できます。
  • Gemini API キーを使用する場合は、アクセスログやデバッグログで誤って公開されていないことを常に確認する必要があります。Workload Identity 連携では、GitHub Actions ワークフローのシークレットは保存されず、本質的に機密性の低い変数のみが保存されます。

GitHub Actions と Google Cloud を構成する

  1. Cloud Shell で GitHub アカウントにログインします。
gh auth login
  1. 新しいファイル setup_workload_identity.sh を作成し、google-github-actions/run-gemini-cli リポジトリから設定スクリプトをコピーして貼り付けます。
  2. スクリプトを実行可能にします。
chmod +x setup_workload_identity.sh
  1. スクリプトを実行します。
./setup_workload_identity.sh --repo {OWNER/REPO} --project {GOOGLE_CLOUD_PROJECT}

4. GitHub Actions ワークフローを作成する

  1. 所有している GitHub リポジトリをチェックアウトします。
git clone {YOUR_REPO}
cd {YOUR REPO}
  1. /gemini-cli-extensions/security リポジトリからワークフローのサンプル yml スクリプトをコピーして、スラッシュ コマンド /security:analyze-github-pr を呼び出す GitHub Actions ワークフローを作成します。
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. GitHub のリモート オリジンに GitHub Actions ワークフローを push します。
git add .github/workflows/gemini-review.yml
git commit -m "add new gha workflow"
git push --set-upstream origin workflow

5. 新規および既存の PR でセキュリティ分析ワークフローを実行します。

GitHub リポジトリで新しい PR を開始するか、リポジトリのオーナーまたはコントリビューターとして新しいコメント「@gemini-cli /review」を投稿します。これにより、PR のセキュリティ レビューが開始されます。リポジトリに commit した GitHub Actions ワークフローの Gemini CLI セキュリティ拡張機能は、検出したセキュリティ問題を重大度カテゴリ(「重大」、「高」、「中」、「低」)でタグ付けします。

新しい PR のセキュリティ レビューのと、既存の PR のセキュリティ レビューのを次に示します。

6. さらに詳しく

Gemini CLI Security 拡張機能の新しいセキュリティ機能を備えたカスタム コマンドのリストは増え続けています。ぜひお試しいただき、ワークフローでご活用ください。次に例を示します。

  • /security:scan-deps は、プロジェクトの依存関係と OSV.dev を相互参照します。

最新の機能やバグの修正については、リリースノートもご確認ください。

7. 完了

お疲れさまでした。これで、Gemini CLI セキュリティ拡張機能を使用して PR のセキュリティ リスクと脆弱性を分析するように GitHub リポジトリを構成できました。