Claude Codeがリリースされてから、開発スタイルは劇的に変わった。ターミナルから直接AIに指示を出し、ファイル作成からテストの実行、デプロイまでを自動化できる体験は、一度味わうともう元には戻れない。しかし、自由度が高いツールには必ずリスクが伴う。特に自律型エージェントであるClaude Codeは、ユーザーの代わりにコマンドを実行する権限を持っている。もし設定を間違えれば、大切なファイルを削除したり、APIコストを青天井に膨らませたりする危険性がある。
結論から言うと、AIエージェントのセキュリティは「AIへのお願い」で済ませてはいけない。モデルの判断に頼るのではなく、実行基盤側で物理的に制御する多層防御が必須だ。この記事では、1人SaaS開発の現場で実践している、Claude Codeを安全に使い倒すためのセキュリティTipsを7つに厳選して紹介する。今日から取り入れられる内容ばかりだ。
SNS運用を自動化しませんか?
ThreadPostなら、投稿作成・画像生成・スケジュール管理までAIがサポート。
1. ブラックリスト方式による権限管理
Claude Codeを運用する上で最も基本的かつ強力なのが、ブラックリスト方式による権限管理だ。これは「やってはいけないこと」を明示的に定義し、それ以外は自由に動かせるようにする戦略を指す。
具体的には、settings.jsonのpermissionsセクションでdenyリストを作成する。例えば、rm -rfによるディレクトリの削除や、git push --forceといった取り返しのつかない操作をここに登録しておく。ホワイトリスト方式、つまり「許可することだけを書く」やり方は一見安全に見えるが、開発現場では不向きだ。なぜなら、エージェントにやってほしい作業は無限にあり、その都度許可リストを更新するのは現実的ではないからだ。
ブラックリスト方式なら、絶対に避けたいリスクだけを数十項目定義しておけば、あとはエージェントの自律性を損なわずに作業を任せられる。この「ダメなこと以外は任せる」というスタンスが、開発効率と安全性を両立させる鍵になる。
2. ツール引数マッチングによる詳細制御
最新のClaude Codeでは、コマンド文字列だけでなく、ツールに渡される引数の内容で権限を制御できる。これが「ツール引数マッチング」だ。
特に重要なのが、サブエージェントを起動するAgentツールの制御だ。これまではサブエージェントがどのモデルを使うかまで制限するのは難しかった。しかし、新しく導入された構文を使えば、Agent(model:opus)のように指定して、特定の高コストなモデルの使用を拒否できる。
例えば、メインの作業は高性能なSonnetで行い、サブエージェントには軽量なHaikuを使わせることで、意図しないコスト増を防ぐことが可能だ。ワイルドカードも使えるため、特定のドメインに対するWebFetchを制限するなど、振る舞いの粒度でガードレールを敷けるのが大きなメリットだ。
3. ハーネスによる推論と実行の分離
セキュリティの設計思想として理解しておきたいのが、ハーネスによる推論と実行の分離だ。Claude Codeにおける「ハーネス」とは、AIモデルを取り囲んで制御するインフラ層のことを指す。
重要な事実は、AIモデル自体が直接ファイルシステムを操作したり、ネットワークにアクセスしたりするわけではないということだ。モデルはあくまで「こうしたい」という意図を出力するだけで、実際にコマンドを実行するのはハーネス側の役割になる。
この分離構造があるおかげで、たとえモデルが敵対的なプロンプトによって暴走したとしても、ハーネス側に設定されたパーミッション検査を上書きすることはできない。考える側をいくら騙しても、実行する側のゲートは別の論理で閉じている。この多層構造を意識して、実行環境側の制限を固めることが、自律型エージェント運用の鉄則だ。
4. 認証による濫用防止の土台作り
APIを介して自作のツールやサービスを公開する場合、真っ先に導入すべきなのが認証だ。認証サービスを利用してログインを必須化することは、セキュリティの土台を作る作業だ。
認証がない状態、つまり匿名で誰でもAPIを叩ける状態は、攻撃者にとって格好の標的だ。無制限にリクエストを送られれば、一瞬で予算が尽きてしまう。ログインを必須にすることで、「誰が利用しているか」を特定できるようになる。
これができると、ユーザーごとにレートリミットをかけたり、異常な利用を検知して個別にブロックしたりすることが可能になる。認証は単なるユーザー管理の仕組みではなく、後続のあらゆる防御策を機能させるための前提条件だ。
5. Sliding Window方式のレートリミット
短時間の集中攻撃やバグによる無限ループから身を守るために、レートリミットの導入は欠かせない。特におすすめなのが、Sliding Window(スライディングウィンドウ)方式だ。
これは、一定時間内のリクエスト数を制限する手法だが、固定の窓よりも柔軟で強力だ。固定窓の場合、窓の境界をまたいでリクエストを送ることで、瞬間的に制限の2倍の負荷をかけることができてしまう。
Sliding Window方式なら、常に直近の数秒間や数分間を監視するため、そうした抜け道を許さない。サービスを使えば、ユーザーIDごとにこの制限を簡単に実装できる。正規のユーザーには影響を与えず、異常なアクセスだけを確実に遮断する設定を目指す。
しんたろー:
Claude Codeでコードを書く身からすると、このレートリミット設定は命綱のようなものだ。ループ処理の記述を間違えてエージェントが暴走しかけた際も、この制限のおかげで被害を最小限に抑えられた。
ここまで読んだあなたに
今なら無料で全機能をお試しいただけます。設定後はAIが投稿案を毎日生成。確認して選ぶだけ。
6. 全試行を対象とした日次利用上限
レートリミットは短時間の爆発を抑えるが、長時間かけてじわじわとリソースを消費する攻撃には無力だ。そこで必要になるのが、1ユーザーあたりの日次利用上限の設定だ。
ここでのポイントは、APIの呼び出しが成功したか失敗したかに関わらず、すべての試行をカウントすることだ。攻撃者は意図的にエラーを発生させるようなリクエストを送り、サーバーを疲弊させようとすることがある。APIコストはエラー時でも発生する場合があるため、成功時だけをカウントしていると防御に穴が開く。
この上限設定は、普通のユーザーならまず到達しない高い水準に置いておく。あくまで「これはもう正規の使い方ではない」という異常なラインを引くためのものだ。これにより、アカウントの乗っ取りや悪意あるスクリプトによる被害を食い止めることができる。
7. サービス全体の予算ガードレール
最後にして最強の砦が、サービス全体での予算ガードレールだ。これは個別のユーザー制限をすべて突破された万が一の事態に備え、1日あたりの総リクエスト数やコストに天井を設ける設定を指す。
個人開発者にとって、APIコストの青天井はサービス終了どころか生活を脅かすリスクになる。どれだけ自信のある防御を組んでいたとしても、最後に物理的な上限を設けておく必要がある。
上限に達した際にサービスが一時停止してしまうデメリットはあるが、破産するよりは遥かにマシだ。クラウドプラットフォームの予算アラートと連携させ、一定額を超えたら自動でAPIキーを無効化するような仕組みを組むと、夜も安心して眠れるようになる。
しんたろー:
1人でサービスを運営していると、セキュリティへの不安がつきまとう。しかし、こうして多層防御を固めておくことで、Claude Codeに大胆なリファクタリングを任せることができるようになる。守りを固めることは、攻めのスピードを上げるための準備だ。
セキュリティ対策の比較表
各対策の特徴と重要度をまとめた。自分の環境に合わせて、優先順位を決める参考にするといい。
| 対策名 | 守る対象 | 導入難易度 | 重要度 | 特徴 |
| :--- | :--- | :--- | :--- | :--- |
| ブラックリスト | ファイル・システム | 低 | 極高 | 絶対に禁止する操作を定義する基本の守り |
| 引数マッチング | APIコスト・モデル | 中 | 高 | サブエージェントの挙動を詳細に縛る |
| ハーネス分離 | 実行権限の全般 | 高 | 極高 | 推論と実行を物理的に分ける設計思想 |
| 認証の必須化 | 不特定多数の攻撃 | 低 | 極高 | すべての防御の土台となる身元確認 |
| レートリミット | 瞬間的な負荷 | 中 | 高 | 短時間の大量リクエストを遮断する |
| 日次利用上限 | 長期的な濫用 | 中 | 中 | 1日の利用量に天井を作り、異常を弾く |
| 予算ガードレール | 自分の財布 | 低 | 極高 | 破産を防ぐための最後の物理的な天井 |
AIエージェント運用でよくある質問
Q1:プロンプトで「禁止して」と書くだけではダメなのか
結論から言うと、プロンプトによる指示だけでは不十分だ。LLMにはコンテキストが長くなると指示を忘れたり、優先順位を間違えたりするコンテキスト劣化という現象がある。また、悪意のあるプロンプトによって、ガードレールを無効化されるリスクもゼロではない。セキュリティはモデルの良心に頼るのではなく、ハーネス側で強制的にブロックする決定論的なルールとして実装する。
Q2:ホワイトリストとブラックリスト、どちらが良いのか
開発の自由度を優先するなら、ブラックリスト方式が圧倒的におすすめだ。ホワイトリストは安全だが、新しいライブラリを入れるたびに許可リストを更新しなければならず、エージェントの良さであるスピードが失われる。rm -rfや秘密情報の読み取りなど、絶対にやってはいけないことを数十個リストアップするブラックリスト方式の方が、運用しやすく実用的だ。
Q3:APIのレートリミットは何を基準に設定すべきか
まずはログインユーザーIDを識別子にするのがベストだ。IPアドレスベースの制限は、プロキシやVPNを使われると簡単に偽装されてしまう。ログインを必須にしていれば、特定のユーザーが異常な使い方をした際に、そのユーザーだけをピンポイントで制限できる。ログイン不要なページにどうしても制限をかけたい場合は、インフラ側が付与する信頼できるIPヘッダを利用する。
Q4:サブエージェントが勝手に増殖してコストが爆発しないか
Claude Codeのツール引数マッチング機能を活用する。Agent(model:opus)をdenyに設定すれば、サブエージェントが高価なモデルを勝手に使うのを防げる。また、エージェントのネスト階層を制限する設定も有効だ。これらを組み合わせることで、木構造のように増殖するエージェントの挙動をコントロールできる。
Q5:個人開発で最低限やるべき対策はどれか
「認証の必須化」「レートリミット」「予算ガードレール」の3つは絶対に外せない。特に予算ガードレールは、自分の資産を守るための最後の命綱だ。APIコストはリクエストが成功したときだけでなく、エラーになったときでも発生する場合がある。失敗したリクエストもすべてカウントする厳格な制限を設けることで、万が一の攻撃時にも被害を最小限に食い止めることができる。
まとめ
Claude Codeのような自律型エージェントを安全に使いこなすためには、多層防御の考え方が不可欠だ。単一の対策に頼るのではなく、実行環境の制限からAPIのコスト管理まで、複数の層を重ねることで初めて安心な開発環境が手に入る。
- ブラックリストで危険なコマンドを封じる
- 引数マッチングでモデルの使用を制限する
- ハーネスの構造で実行権限を分離する
- 認証でユーザーを特定する
- レートリミットで瞬間的な暴走を止める
- 日次上限で継続的な濫用を防ぐ
- 予算ガードレールで破産を回避する
これらのTipsを一つずつ実践していけば、AIエージェントは最高の相棒になる。まずは自分のsettings.jsonを開いて、ブラックリストの設定から始める。

この記事が参考になったら、ThreadPostを試してみませんか?
投稿作成・画像生成・スケジュール管理まで、AIがサポートします。
ThreadPostをもっと知る