Blog

ブログ

セキュリティ

AI開発環境のセキュリティ

🔐 AI開発環境のセキュリティ整理メモ

最近のAI開発ツールは、単なる補助ツールではなく、

  • コードを読む
  • ファイル編集
  • ターミナル実行
  • Git操作
  • Browser操作
  • MCP接続

までできる。かなり権限の強い「作業員」に近い。

なので、

  • どこまで読める?
  • どこまで実行できる?
  • 漏れたらどこまで被害が広がる?

を考える必要がある。

🗂 やったこと

  • APIキーを .env に集約
  • .zshrc から読み込み
  • Claude Code の deny / allow 設定追加
  • .env や SSH鍵の読み取り制限
  • 危険コマンド禁止
  • サンドボックス有効化

APIキーを1箇所にまとめる

APIキーを:

~/.claude/.env

にまとめる構成にした。

.zshrc には直接キーを書かず、

source ~/.claude/.env

だけを書く。

メリット

  • 管理場所が固定される
  • .zshrc が汚れない
  • 消し忘れ防止
  • キー差し替えが楽

🚫 deny とは

「AIにやらせないことリスト」

例えば:”Read(*.env)”なら、

.env を読むな という意味。

他にも:

"Bash(git push *)"

なら、

git push するな

さらに:

"Bash(rm -rf *)"

なら、

危険な削除コマンド禁止

という感じ。

SSH鍵もブロック

例えば:

"Read(~/.ssh/**)"

SSH鍵はかなり危険。

もし読めると、

  • サーバーログイン
  • deploy
  • Git接続

まで繋がる可能性がある。

防ぎたいもの

deny で主に防ぎたいのは:

  • 勝手な削除
  • sudo実行
  • 勝手なpush
  • force push
  • 外部送信
  • 秘密情報読み取り

など。

✅ allow とは

「やってOKなことリスト」

例えば:

"Bash(git status)"

なら、

git status はOK

という意味。

つまり:

  • deny = 禁止事項
  • allow = 許可事項

という整理。

allow の考え方

重要なのは、

「必要なことだけ許可する」

こと。

例えば:

  • status確認
  • テスト実行
  • prettier
  • eslint

など、最低限の操作だけ通す。

📦 サンドボックスとは

「AIを檻の中で動かす」

イメージ。

deny との違い

deny は「これはやるな!」というルール。

サンドボックスは「そもそも危ない場所へ行けない」状態を作る。

例えば

普通にAIを動かすと:

  • どのファイルでも触れる
  • 色んなコマンド実行可能
  • 外部アクセス可能

みたいになりがち。

でもサンドボックスを使うと:

  • このフォルダだけ
  • このコマンドだけ
  • 外部通信禁止

みたいに、行動範囲そのものを制限できる。

イメージすると

  • deny = 禁止ルール
  • allow = 許可リスト
  • サンドボックス = 檻

という感じ。

🛡 なぜ両方必要?

例えば:

"Bash(rm -rf *)"

を deny しても、

別ルートで危険操作できる可能性がある。

だから:

  • deny で危険操作を禁止
  • サンドボックスで触れる範囲を制限

という二段構えになる。

⚠️ わかったこと

.env を完全には防げない場合がある

例えば:

"Read(*.env)"

は、

  • ./.env
  • .env.local

などには効く。

でも:

~/.claude/.env

みたいなグローバル側には効かないことがある。

「全部禁止」は逆に危険

試しに強めの deny を追加したら、

  • Pythonスクリプト
  • Bash経由処理
  • 自動化

まで壊れた。

つまり、

セキュリティを強くしすぎると実務が止まる

問題がある。

🧠 結局大事なのは

重要なのは、

「完全防御」ではなく「被害範囲を小さくする」

こと。

例えば

  • AI共通領域に強い鍵を置かない
  • 本番tokenを置かない
  • API権限を最小化
  • deploy権限を分離
  • AI用tokenを分ける

みたいな考え方。

🔗 最近怖いのは「連携」

単体AIというより:

  • MCP
  • npm
  • GitHub Actions
  • Browser操作
  • 自動deploy

みたいな、

AI + 自動化 + 外部権限

の組み合わせが危険。

例えば:

  • .env 読める
  • Git pushできる
  • deployできる

まで繋がると、被害範囲が一気に広がる。

✨ 今の考え方

「AIを使うな」ではなく、

  • どこまで読めるか
  • どこまで実行できるか
  • 漏れた時どこまで被害が広がるか

を整理しておくのが大事そう。

最近のAI時代のセキュリティって、

「AIが危険」

というより、

「強い権限を持った存在が増えた」

に近い感覚。