火曜日, 8月 19, 2025
火曜日, 8月 19, 2025
- Advertisment -
ホームニューステックニュースClaude Codeをなるべく安全に動かすためのDev Containerを構築した

Claude Codeをなるべく安全に動かすためのDev Containerを構築した



1. はじめに

Claude CodeはAnthropic社が提供するAIを活用したコーディング支援ツールです。先進的なコード生成・解析機能を持つ一方で、ネットワークアクセスとファイルシステムへの読み書きアクセスが必要なため、セキュリティ面での配慮が重要となります。

特に、Claude CodeはAIによるコード生成の性質上、以下のようなセキュリティリスクが存在します:

  • ファイルシステムリスク: AIによる予期しないファイル操作(設定ファイル、機密データ、システムファイルの変更)
  • ネットワークリスク: 外部サービスへの意図しない通信(API呼び出し、データ送信、悪意あるサーバーとの通信)

Dev Container環境でClaude Codeを実行することで、これらのリスクから完全に隔離された安全な開発環境を構築できます。コンテナによるファイルシステムの分離とネットワーク制限により、ホストシステムへの影響を遮断しながら、AIの恩恵を安全に受けることができます。

さらに、サンドボックス環境であればClaude Codeを--dangerously-skip-permissionsオプション付きで安全に実行できます。このオプションによりClaude Codeは逐一許可を求めることなく自律的に動作できるため、開発効率が向上します。

この記事では、セキュリティと使いやすさを両立させたDev Container環境の作り方を説明します。

2. 設計思想とアプローチ

この記事で紹介するDev Container環境は、Claude Codeを安全に使うための実用的な仕組みです。「セキュリティか利便性か」の二択ではなく、適切な設計により両方を実現することを目指しています。

主要な3つの特徴

Anthropic公式リファレンス実装をベースにしたFirewall設定
Claude Code公式ドキュメントのDev Containerセクションで推奨されているネットワーク制限をベースに、iptablesとipsetを組み合わせたファイアウォールを実装しています。これにより、必要最小限の通信のみを許可し、セキュリティリスクを削減します。

Docker Composeによる通知サービス連携
作業完了時の通知機能として、自作の通知アプリケーションOwattayoをDocker Composeで連携させています。これにより、Claude Codeから直接外部サービスにアクセスすることなく、通知機能を実現しています。

Dev Container Featuresによる柔軟なベースイメージ選択
カスタムDev Container Featuresを活用することで、様々なベースイメージに対応した柔軟な環境構築を可能にしています。Python、Node.js、Java等、プロジェクトに応じて最適な開発環境を選択できます。どのようなFeatureが提供されているかはDev Container公式ドキュメントのFeatureカタログを参照してください。

3. アーキテクチャの設計思想

セキュリティファーストアプローチ

この設計では「まず全部禁止、必要なものだけ許可」という考え方を使っています。ネットワークは最初にすべて遮断し、必要な通信だけを明示的に許可します。ファイルについても、Dockerコンテナでホストシステムから完全に分離し、勝手にファイルにアクセスできないようにしています。

  • ネットワーク層: iptables/ipsetによる通信制御(外部への不正通信を阻止)
  • ファイルシステム層: Dockerコンテナによる分離(ホストファイルへのアクセス制限)

これらを組み合わせることで、Claude Codeが予期しない動作をした場合でも、各層で阻止し、ホストシステムを安全に保てる仕組みになっています。

柔軟性を重視した設計

ファイアウォール、通知機能、開発環境をそれぞれ独立した部品として作ることで、後から機能を追加したり変更したりしやすくなっています。

特に通知機能を別コンテナに分離したことで、通知方法を自由に変更できる点が大きなメリットです。現在はDiscordを利用していますが、将来的にはSlack、Teams、メール等、様々な通知方法への対応も可能です。

4. Firewall機能について

本実装のファイアウォール機能は、Anthropic公式のDev Containerリファレンス実装をベースにしています。iptablesとipsetを使った堅牢なネットワーク制限により、Claude Codeが必要最小限の通信のみを行えるよう制御しています。

基本コンセプト

  • デフォルト拒否: すべての外部通信を最初に遮断
  • 許可リスト方式: 必要なドメインのみを明示的に許可
  • 動的IP対応: クラウドサービスのIP変更に自動追従

ファイアウォールの詳細な技術仕様と設定方法については、リファレンス実装のinit-firewall.shを参照してください。

注記: 本記事では、iptablesやipsetの具体的なルール設定については詳細に説明していません。これは、Anthropicが提供するDev Containerリファレンス実装を流用する方針のためです。詳細な技術仕様はリファレンス実装を参照してください。

5. Dev Container Featuresの活用

Claude Code公式Featureの使用

この設定では3種類のFeaturesを組み合わせています:

  1. プロジェクト固有のFeatures(Python/Node.js): 開発に必要な言語環境
  2. Claude Code公式Feature: Claude Code本体とその依存関係
  3. 独自のFirewall Feature: セキュリティ強化のためのLocally referenced Feature

Anthropicが提供している公式のDev Container Featureをベースにして、その上に独自のLocally referenced FeatureでFirewall設定を追加しています:

.devcontainer/devcontainer.json

{
  "name": "Claude Code in Dev Container example",
  "dockerComposeFile": "compose.yaml",
  "service": "claude-code",
  "features": {
    

    
    "ghcr.io/anthropics/devcontainer-features/claude-code:1.0": {},

    
    "./firewall": {
			"username": "vscode"
    }
  }
}

6. 通知システム(Owattayo)の活用

作業完了通知の重要性

AI支援の作業は時間がかかることが多いので、完了通知があると作業効率が向上します。バックグラウンドで動いている処理がいつ終わったかがわかれば、すぐに次の作業に移れます。

通知システムの設定方法

通知にはDiscordのウェブフックを利用していますが、ウェブフックのURLは環境変数を通じて安全に設定します:

  1. ホスト側環境変数の設定: ホストマシンにDISCORD_WEBHOOK_URL環境変数を設定

  2. Docker Compose経由での受け渡し: compose.yamlenvironmentセクションで変数を通知サービスに渡す

  3. 通知の動作フロー:

    • Claude CodeがOwattayoに通知リクエストを送信
    • OwattayoがリクエストをもとにDiscordへメッセージを投稿
    • Discordから実際の通知が配信

Stopフックとの連携実装

Claude CodeのStopフック機能と連携し、作業セッション終了時に自動的に通知を送信します。
Stopフックの定義は.claude/settings.jsonに記載しています。

.claude/settings.json

{
  "hooks": {
    "Stop": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "curl -X POST http://owattayo:8000/notify -H \"Content-Type: application/json\" -d @-"
          }
        ]
      }
    ]
  }
}

まとめ

セキュアなClaude Code環境構築の重要性

AIを使ったコーディング支援ツールが広まり、開発の生産性は向上しています。でも、新しい技術を導入するときは必ずセキュリティのリスクがついてきます。この記事で紹介したDev Container環境は、そんな問題を解決するための実用的な方法です。

特に大事なのは、「セキュリティか便利さか」のどちらかではなく、両方を上手く成り立たせることです。うまく設計すれば、しっかりとしたセキュリティを保ちながら、開発者の生産性も高めることができます。

この記事が、より安全で効率的な開発環境を作るための参考になれば嬉しいです。

参考資料



Source link

Views: 0

RELATED ARTICLES

返事を書く

あなたのコメントを入力してください。
ここにあなたの名前を入力してください

- Advertisment -