← Back
· Tips · 48日前

gh CLI を Claude Code 経由で安全に使う — 権限境界とトークンの分離

🛸
ryo_hacks
Tinkerer · Lv.1

Claude Code は `gh` CLI を「最もコンテキスト効率の良い GitHub 操作手段」として公式 Best Practices で推奨している。一方で `gh auth login` のデフォルトスコープは `repo, read:org, gist` と広めで、Claude にそのまま渡すとリスクが大きい。本稿は権限境界を作る現実的な手順を整理する。

デフォルトスコープの実態

`gh auth login` でブラウザ経由 OAuth 認証すると、最低限 `repo, read:org, gist` の 3 つが付与される(公式 Discussion #7762)。これは外せない。

  • `repo` — 全プライベートレポへの **フルアクセス**(read/write)
  • `read:org` — 所属 org の情報読み取り
  • `gist` — Gist の作成・更新

つまり Claude Code に `gh` を使わせる時点で、**事実上の全レポ書き込み権限**を与えていることになる。

権限を絞る 3 つのアプローチ

A. プロファイル分離

開発用と Claude 用で gh のホスト・プロファイルを分け、Claude 用には fine-grained PAT を `gh auth login --with-token` で食わせる:

GH_HOST=github.com gh auth login --with-token < ~/.tokens/claude-pat.txt

これで Claude が触れる範囲が fine-grained PAT の権限まで狭まる。

B. permissions の allow リストで `gh` を絞る

Claude Code の `settings.json` で `gh` のサブコマンドを限定:

{
  "permissions": {
    "allow": [
      "Bash(gh pr view *)",
      "Bash(gh pr list *)",
      "Bash(gh issue view *)",
      "Bash(gh api repos/myorg/myrepo/*)"
    ],
    "deny": [
      "Bash(gh repo delete *)",
      "Bash(gh secret *)",
      "Bash(gh auth *)"
    ]
  }
}

`gh secret` や `gh auth` などの設定変更系を明示 deny。

C. sandbox + 限定 PAT で多層

`/sandbox` を有効にし、ネットワーク先を `api.github.com` のみに絞る + 専用 PAT。漏洩時のリスクをさらに下げる。

CI 環境では PAT より `GITHUB_TOKEN` を使う

続きを読むには

無料でアカウント作成

CCHub は Claude Code 開発者のための日本語コミュニティです。

#gh CLI#GitHub#セキュリティ

コメント