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

1. はじめに

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

演習内容

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

学習内容

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

必要なもの

  • ウェブブラウザ
  • 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 のセキュリティ トークン サービス(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 連携を使用するメリット

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

  • Gemini API キーには、それぞれの IAM ロール バインディングから幅広い権限を付与できます。侵害されると、幅広い Google Cloud リソースとサービスへのアクセスが可能になります。Workload Identity 連携では、サービス アカウントと有効期間の短いアクセス トークンを使用するため、認証が大幅に強化されます。
  • Gemini API キーは、大規模な管理も困難です。公開されたキーを使用しているワークフローを特定するのに時間がかかります。キーを手動でローテーションするにも時間がかかります。一方、Cloud コンソールから、リポジトリに関連付けられた 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:scan-deps は、プロジェクトの依存関係を OSV.dev と相互参照します。

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

7. 完了

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