19
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【2026年最新版】Gemini CLIで行うべきセキュリティ設定 10選

19
Posted at

はじめに

スクリーンショット 2026-03-14 22.30.44.png

こんばんは、mirukyです。
別記事でClaude Codeのセキュリティ設定についてまとめましたが、自分はかつてGemini CLIも使用してみたことがあるので、これを機に再度触ってまとめてみることにしました。

皆さんご存知の通り、Gemini CLIはGoogleが提供するオープンソースのAIコーディングエージェントですが、シェルコマンドの実行やファイルの読み書きができるため、セキュリティ設定を怠ると思わぬリスクを招きます。

本記事では、Gemini CLIを安全に使うために今すぐ設定すべき10項目を、公式ドキュメントに基づいて紹介します。

本記事は2026年3月時点のGemini CLI公式ドキュメント(GitHub: google-gemini/gemini-cli)に基づいています。

① サンドボックスを有効化する

最も重要な設定です。Gemini CLIはデフォルトでサンドボックスが無効になっています。有効化すると、ツール実行がOS レベルで隔離され、ファイルシステムやネットワークへのアクセスが制限されます。

有効化には3つの方法があります:

# 方法1: 起動時フラグ(最も優先度が高い)
gemini --sandbox
gemini -s

# 方法2: 環境変数
export GEMINI_SANDBOX=true
// 方法3: ~/.gemini/settings.json(永続的)
{
  "tools": {
    "sandbox": "docker"
  }
}

サンドボックスの種類は以下の4つです:

方式 OS 特徴
Seatbelt(sandbox-exec) macOS デフォルト。プロファイルで細かく制御可能
Docker / Podman 全OS コンテナベース。カスタムDockerfileも利用可能
gVisor(runsc) Linux 最も強力な隔離。カーネルレベルで仮想化
LXC / LXD Linux 実験的。軽量コンテナ

--yoloモード使用時はサンドボックスが自動有効化されますが、通常使用時はデフォルト無効です。まだ有効化していない方は、最優先で設定してください。

② macOSではSeatbeltプロファイルを強化する

macOSのデフォルトプロファイルはpermissive-open(最も緩い設定)です。セキュリティを重視するなら、restrictive以上のプロファイルに切り替えましょう。

# restrictive-open: デフォルトで操作を拒否、ネットワークは許可
export SEATBELT_PROFILE=restrictive-open

# strict-open: 読み書きともワーキングディレクトリに制限、ネットワークは許可
export SEATBELT_PROFILE=strict-open

# strict-proxied: 最も厳しい設定。ネットワークもプロキシ経由に制限
export SEATBELT_PROFILE=strict-proxied

6つのプロファイルの違い:

プロファイル 書き込み制限 読み取り制限 ネットワーク
permissive-open プロジェクトフォルダのみ 制限なし 直接
permissive-proxied プロジェクトフォルダのみ 制限なし プロキシ経由
restrictive-open デフォルト拒否 デフォルト拒否 直接
restrictive-proxied デフォルト拒否 デフォルト拒否 プロキシ経由
strict-open ワーキングディレクトリのみ ワーキングディレクトリのみ 直接
strict-proxied ワーキングディレクトリのみ ワーキングディレクトリのみ プロキシ経由

カスタムプロファイルを作成する場合は、.gemini/sandbox-macos-<プロファイル名>.sbに配置します。

③ YOLOモードを無効化する

--yoloフラグ(--approval-mode=yolo)は、すべてのツール実行を自動承認するモードです。チーム開発では特に、このモードを完全に使用不可にしておくべきです。

// ~/.gemini/settings.json または システム設定ファイル
{
  "security": {
    "disableYoloMode": true
  }
}

この設定をシステム設定ファイル(後述の⑩)に配置すると、ユーザー側で上書きできません。

代わりに--approval-mode=auto_edit(編集ツールのみ自動承認)やplan(読み取り専用モード)を活用しましょう。

④ 「Always Allow」オプションを無効化する

ツール実行の確認ダイアログで「Always allow」を選択すると、以降そのツールは確認なしで実行されます。これが蓄積すると、意図しない操作が自動承認されるリスクが高まります。

{
  "security": {
    "disableAlwaysAllow": true
  }
}

さらに厳格にするなら、Adminセキュアモードで一括制御できます:

{
  "admin": {
    "secureModeEnabled": true
  }
}

admin.secureModeEnabled: trueは、YOLOモードと「Always allow」の両方を一括で無効化します。

⑤ 実行可能なツールをホワイトリストで制限する

tools.core設定で、使用可能なツールをホワイトリスト方式で制限できます。ブロックリスト方式(tools.exclude)よりも安全です。

{
  "tools": {
    "core": [
      "ReadFileTool",
      "GlobTool",
      "ShellTool(ls)",
      "ShellTool(cat)",
      "ShellTool(grep)",
      "ShellTool(git status)",
      "ShellTool(git diff)"
    ]
  }
}

また、tools.allowedで特定のコマンドのみ確認ダイアログをスキップできます:

{
  "tools": {
    "allowed": [
      "run_shell_command(git status)",
      "run_shell_command(npm test)"
    ]
  }
}

ホワイトリスト(tools.core)が推奨です。ブロックリスト(tools.exclude)は既知の危険コマンドしかブロックできず、巧妙な回避が可能です。

⑥ 環境変数のリダクション(秘匿化)を有効化する

Gemini CLIには、シェルコマンド実行時に環境変数に含まれるシークレットを自動的にリダクション(マスク) する機能があります。

{
  "security": {
    "environmentVariableRedaction": {
      "enabled": true,
      "blocked": [
        "DATABASE_URL",
        "INTERNAL_API_KEY"
      ],
      "allowed": [
        "MY_PUBLIC_CONFIG"
      ]
    }
  }
}

デフォルトのリダクションルール:

  • 変数名ベース: TOKEN, SECRET, PASSWORD, KEY, AUTH, CREDENTIAL等を含む変数名を検出
  • 値ベース: RSA秘密鍵、GitHubトークン、AWSキー、Stripeキー等のパターンマッチ
  • 固定ブロックリスト: CLIENT_ID, DB_URI, DATABASE_URL, CONNECTION_STRINGは常に秘匿

PATH, HOME, USER, SHELLなどのシステム変数やGEMINI_CLI_で始まる変数は自動的に除外されます。

公式ドキュメントでは代替キー名としてsecurity.allowedEnvironmentVariables(許可リスト)とsecurity.blockedEnvironmentVariables(ブロックリスト)も定義されています。どちらの記法でも設定可能です。

⑦ Trusted Foldersでフォルダ信頼性を管理する

Gemini CLIでは、プロジェクトフォルダの信頼レベルを管理できます。この機能はデフォルトで有効です(security.folderTrust.enabled: true)。信頼されていないフォルダでは以下が自動的に無効化されます:

  • ワークスペース設定ファイルの読み込み
  • 環境変数の読み込み
  • ツールの自動承認
  • メモリの自動読み込み
  • MCPサーバーへの接続
  • カスタムコマンドの読み込み
  • 拡張機能の管理

信頼設定は~/.gemini/trustedFolders.jsonに保存されます。セッション中に/permissionsコマンドで信頼レベルを変更できます。もし無効化されている場合は、以下で再有効化できます:

// ~/.gemini/settings.json
{
  "security": {
    "folderTrust": {
      "enabled": true
    }
  }
}

出所不明のリポジトリをクローンした場合、初回起動時にフォルダの信頼確認ダイアログが表示されます。安易に「Trust」を選択しないことが重要です。

⑧ BeforeToolフックでカスタム安全チェックを追加する

Hooksを使えば、ツール実行の前後にカスタムスクリプトを実行できます。BeforeToolフックを使えば、ツール実行前に独自のバリデーションを挟めます。

// ~/.gemini/settings.json
{
  "hooks": {
    "BeforeTool": [
      {
        "command": ".gemini/hooks/validate-tool.sh",
        "description": "Validate tool execution for security"
      }
    ]
  }
}

フックスクリプトの例(危険なコマンドをブロック):

#!/bin/bash
# .gemini/hooks/validate-tool.sh

# stdinからツール情報を読み取り
TOOL_INPUT=$(cat /dev/stdin)
COMMAND=$(echo "$TOOL_INPUT" | jq -r '.command // empty')

# rm -rf をブロック
if echo "$COMMAND" | grep -q 'rm -rf'; then
  echo "Blocked: rm -rf commands are not allowed" >&2
  exit 1
fi

# 本番環境への接続をブロック
if echo "$COMMAND" | grep -q 'production'; then
  echo "Blocked: production access is not allowed" >&2
  exit 1
fi

exit 0

Gemini CLIのフックは以下のライフサイクルポイントで利用可能です:

フック タイミング
BeforeTool / AfterTool ツール実行の前後
BeforeAgent / AfterAgent エージェントループの開始・終了
BeforeModel / AfterModel LLMリクエストの前後
SessionStart / SessionEnd セッションの開始・終了
PreCompress チャット履歴圧縮の前
Notification 通知イベント発生時
BeforeToolSelection ツール選択の前

⑨ MCPサーバーをホワイトリストで管理する

MCPサーバーは外部ツールを統合する強力な機能ですが、信頼できないサーバーは深刻なセキュリティリスクになります。mcp.allowedでホワイトリストを設定しましょう。

{
  "mcp": {
    "allowed": ["corp-tools", "code-analyzer"]
  },
  "mcpServers": {
    "corp-tools": {
      "command": "/usr/local/bin/corp-tools.sh",
      "timeout": 5000,
      "includeTools": ["code-search", "get-ticket-details"]
    },
    "code-analyzer": {
      "command": "node",
      "args": ["analyzer-server.js"],
      "excludeTools": ["delete-file", "execute-arbitrary"]
    }
  }
}

ポイント:

  • mcp.allowedを必ず設定:省略すると、ユーザーが自由にサーバーを追加可能
  • includeToolsでツール単位のホワイトリストを使う(最小権限の原則)
  • excludeToolsincludeToolsより優先:両方に含まれるツールは除外される
  • サーバーエイリアスにアンダースコア(_)を使わない:ポリシーエンジンのFQN解析が誤動作する

管理者はadmin.mcp.enabled: falseで、MCPサーバーの使用自体を完全に禁止できます。

⑩ Enterprise:システム設定ファイルで組織ポリシーを強制する

チームや組織でGemini CLIを使う場合は、システム設定ファイルで組織ポリシーを一括管理できます。システム設定ファイルは最高の優先度を持ち、ユーザーやプロジェクトの設定で上書きできません。

設定ファイルの優先度:

優先度 ファイル 説明
1(低) System Defaults システム全体のデフォルト値
2 User Settings ~/.gemini/settings.json
3 Project Settings .gemini/settings.json
4(高) System Overrides 管理者が強制する設定

システム設定ファイルのパス:

OS System Overrides のパス
macOS /Library/Application Support/GeminiCli/settings.json
Linux /etc/gemini-cli/settings.json
Windows C:\ProgramData\gemini-cli\settings.json

組織管理者向けの推奨設定例:

{
  "tools": {
    "sandbox": "docker",
    "core": [
      "ReadFileTool",
      "GlobTool",
      "ShellTool(ls)",
      "ShellTool(cat)",
      "ShellTool(grep)"
    ]
  },
  "security": {
    "disableYoloMode": true,
    "disableAlwaysAllow": true,
    "environmentVariableRedaction": {
      "enabled": true
    }
  },
  "mcp": {
    "allowed": ["corp-tools"]
  },
  "mcpServers": {
    "corp-tools": {
      "command": "/opt/gemini-tools/start.sh",
      "timeout": 5000
    }
  },
  "telemetry": {
    "enabled": true,
    "target": "gcp",
    "logPrompts": false
  },
  "privacy": {
    "usageStatisticsEnabled": false
  }
}

さらに、ラッパースクリプトで環境変数を強制することもできます:

#!/bin/bash
# /usr/local/bin/gemini(ラッパースクリプト)
export GEMINI_CLI_SYSTEM_SETTINGS_PATH="/etc/gemini-cli/settings.json"

REAL_GEMINI_PATH=$(type -aP gemini | grep -v "^$(type -P gemini)$" | head -n 1)
exec "$REAL_GEMINI_PATH" "$@"

まとめ

適切なセキュリティ設定をして、思う存分Gemini CLIを満喫しましょう。
ではまた、お会いしましょう。

参考リンク

19
22
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?