安全な隔離(権限・secret・AIの影響範囲を狭める):30章アウトライン
※参照元の要点:rootless / docker groupの注意 / Compose secrets / Build secrets / AI拡張のプロンプトインジェクション対策など(公式/一次情報中心)📚🔒 Docker GitHub OpenAI Microsoft
第1部:まず“被害半径”の地図を作る🗺️💥(1〜5)
1. なぜ隔離が必要?「個人開発で起きがちな事故」あるある😇💣
- どんな事故が起きるか(秘密漏れ・削除・踏み台)をざっくり
- この教材で守る“最低ライン”を決める🛡️
2. Dockerの境界線:ホスト/デーモン/コンテナ/ネット🌍🚧
- どこで何が起きる?を図で理解
- “守る場所”を間違えないための地図作り🧠
3. 3原則:最小権限・最小共有・最小公開✂️🔐📤
- 「必要な分だけ」に削る発想
- 迷った時の判断基準(削って困ったら足す)🧩
4. “安全デフォルト”の作り方:テンプレ→例外だけ追加📦✨
- まず安全寄りの雛形を固定
- 例外はコメント付きで残す(未来の自分を助ける)📝
5. 最初に捨てる危険カード:privileged/docker.sock/秘密直書き🗑️⚠️
- これは“最終手段”だよ、のリスト化
- 代替案を先に知っておく(焦ってやらない)🏃♂️💨
第2部:ホスト側の隔離(権限の入口)🚪🔒(6〜10)
6. Windows環境の“権限の場所”を把握しよう🪟🧩
- Docker Desktop/WSL2で「どこがLinuxなの?」を整理
- “ホストに影響する操作”を見分ける👀
7. docker groupは実質つよい(=root相当)って話💪😱
- 「追加したら便利」だけど“強い権限”になる理由
- チーム/個人での運用ルール(最小人数・PC分離など) (Docker Documentation)
8. Rootless mode入門:デーモンも非rootで動かす発想🧑🚀🔒
- 何が嬉しい?(デーモン側の事故の軽減)
- どんな制約がある?(できないこともある) (Docker Documentation)
9. ユーザー名前空間(userns)の考え方だけ押さえる🧠🧷
- “中のroot≠外のroot”を理解する
- 難しい設定は深入りせず、概念を持つのが目的👌
10. 「デーモンが握る力」を知る:攻撃面(attack surface)入門🎯🧨
- どの操作がホスト級なのかを分類
- “強い操作”は手順を固定して誤爆を防ぐ🧯
第3部:コンテナの権限を絞る(中の世界の最小権限)👤🔧(11〜15)
11. USERでroot回避:Nodeアプリを“普通ユーザー”で走らせる🙂👟
- rootで動かすと何が怖い?
- 書き込みが必要な場所を先に決める📁
12. 書き込み先の設計:/tmp・アップロード・ログ置き場を分ける🧺🗂️
- “書ける場所”を最小化する
- 変な場所に書こうとして落ちる問題を潰す🛠️
13. read-only root filesystem:基本は読めるだけ📖🔒
- “アプリが書けない”のが基本になると強い
- 例外(キャッシュ等)は専用領域へ🧊
14. Linux capabilitiesを減らす:できることを最小化🧤✂️
- 「rootじゃなくても危ない操作」はある
- cap_drop/cap_addの発想だけでOK👌
15. privilegedは最後の最後:使う前にチェックリスト🛑🧾
- 何が一気に危険になるのかを理解
- 代替(デバイス限定・別方式)を先に検討🔁
第4部:ファイル共有(マウント)とデータの被害半径📦🧷(16〜20)
16. bind mountの危険ポイント:“ホストの大事な場所”を渡さない🙅♂️💽
- 「便利=強い」なので最小共有
- 共有していいフォルダの基準を作る📏
17. 読み取り専用マウントで“壊せない”にする📎🔒
- コード共有は基本roで考える
- 書き込みが必要なら専用フォルダだけrw✅
18. docker.sockを渡すと何が起きる?(だいたい最強権限)🐙🔥
- “コンテナからDocker操作”=ホスト級になりがち
- どうしても必要なら「隔離専用コンテナ」に閉じ込める📦🧱
19. ボリューム権限(UID/GID)とDBデータの守り方🗃️🛡️
- “誰が書けるか”を設計に入れる
- 消していいデータ/ダメなデータを分ける🧠
20. configs / env / files の整理術:どれに何を置く?🧰🧩
- “設定”と“秘密”と“ただの値”を仕分け
- チームで揉めない置き場所ルールを作る📌
第5部:Secrets(秘密情報)を安全に扱う🔑🧪(21〜25)
21. Compose secrets実践:秘密はファイルで渡す(/run/secrets)📄🔐
- 使い方の基本(サービス単位で権限を渡す)
- “見える範囲”を最小にする発想 (Docker Documentation)
22. ログ・エラー・デバッグで漏らさない(ここで漏れる)🫣🧯
- console.logや例外スタックに出さない
- “秘密っぽい文字列”を検知する習慣づけ🔍
23. ビルド時の秘密:BuildKit secretsで“レイヤに残さない”🏗️🤫
- Dockerfileに書くと残る、が基本
- “ビルド中だけ見える”を使う (Docker Documentation)
24. private repoや社内パッケージ:SSH/トークンを安全に使う🧷🔑
- 依存取得が一番漏れやすい😵
- “ビルド専用の一時鍵/一時トークン”にする🕒
25. ローテーション&失効:漏れた前提の復旧手順を作る🚑🔁
- 「変えられる設計」が安全
- 事故対応のチェックリスト化(焦らない)🧾
第6部:ネットワーク隔離 + AI時代の安全運用🤖🛡️(26〜30)
26. ポート公開は最小限:公開するのは“入口だけ”🚪🌐
- APIだけ外へ、DBは外へ出さない
- “とりあえず全部公開”を卒業🎓
27. Compose networks:内部ネットワークで閉じ込める🕸️🔒
- “同じネット内だけ通す”設計
- サービス名で繋ぐ基本(迷子にならない)🧭
28. サービス間の境界:DB/Redisを“内部専用”に固定する🍱🔐
- 接続元を限定する考え方
- テスト用・開発用の分離もここで扱う🧪
29. AI拡張の被害半径を小さくする:プロンプト注入&秘密の扱い🤖⚠️🧱
- 「AIに見せていい範囲」を先に決める(フォルダ/ログ/設定)
- “危険な指示が混ざる”前提で、レビューと権限を設計に入れる (The GitHub Blog)
30. 最終成果:安全デフォルト・テンプレ完成🎉📦 + 自己点検チェック✅
- “新規PJで毎回使う”テンプレ(Compose/Dockerfile/運用ルール)
- 5分セルフ監査(権限/共有/公開/秘密/AI)で事故を減らす🕔🔍
必要なら、この30章アウトラインをベースにして、第1章から順番に「詳細な教育コンテンツ」(図解、演習、よくある詰まりポイント、VS Codeでの手順つき)も同じノリで作っていけます😄✨