コンテナワークロードにおけるセキュリティ対策の理解を深めるため「Docker/Kubernetes 開発・運用のためのセキュリティ実践ガイド」を読んだ.実は本書は 2021年7月頃 に1度読み終わっていたけど,実際に気になった部分を試したり,CKS (Certified Kubernetes Security Specialist) を受験 しながら読み直していたら書評記事をまとめるのが遅れてしまった (;・∀・)
本書を読んで1番良かったと感じるのは「セキュリティに関して "知らなかったことに気付けた"」ことだと思う.苦手意識のあるセキュリティ領域に対して「視野を広げる」ことができた.本当に読んで良かったと思うし,何よりも「日本語で」読めることに感謝しかない!本書は 2020年2月 に出版されていて,Kubernetes 1.16.1 を前提にしていたり,ランタイムなども含めて多少のアップデートはあると思うので,もし今後「第2版」で更新されるなら絶対に読み直したい!
目次
- 第1章「Docker/Kubernetes のおさらい」
- 1.1 Docker の復習
- 1.2 Kubernetes の復習
- 第2章「コンテナ運用における脅威の事例」
- 2.1 API エンドポイントの設定ミス
- 2.2 ランタイムやカーネルの脆弱性
- 2.3 イメージの脆弱性
- 第3章「ランタイムのセキュリティ Tips」
- 3.1 Docker API エンドポイントを保護する
- 3.2 コンテナ実行ユーザを変更する
- 3.3 ケーパビリティやシステムコールを制限する
- 3.4 ファイルアクセスを制御する
- 3.5 リソースを制限する
- 3.6 代替ランタイムを利用する
- 3.7 コンテナを監視する
- 3.8 設定を検証する
- 第4章「イメージのセキュリティTips」
- 4.1 Dockerfile からプライベートな Git や S3 にアクセスする
- 4.2 コンテナ内で安全にイメージをビルドする
- 4.3 イメージの脆弱性を検査する
- 4.4 改竄されたイメージのデプロイを防ぐ
- 4.5 プライベートレジストリを構築する (Harbor)
- 第5章「Kubernetes クラスタのセキュリティ Tips」
- 5.1 クラスタを最新の状態に保つために
- 5.2 ミスや攻撃から守る API のアクセス制御
- 5.3 認証モジュールの選び方と使い方
- 5.4 Service Account によるサービス認証とアカウント管理
- 5.5 認可モジュールの種類と利用方法
- 5.6 Admission コントローラによる柔軟なアクセス制御
- 5.7 Webhook で独自の Admission Control を追加する
- 5.8 システムコンポーネント間通信の保護
- 5.9 スケジューラによる割り当てノードの制御
- 5.10 秘密情報を管理する
- 5.11 GitOps のための Secret 管理
- 第6章「アプリケーション間通信を守る」
- 6.1 Network Policy を使って Pod の通信を制御する
- 6.2 Istio を使って Pod 間の通信を守る
- 6.3 SPIFFE によるアプリケーションの認証
- 6.4 クラスタ外部との通信を守る
正誤表は以下に載っている.
第1章「Docker/Kubernetes のおさらい」
第1章では Docker と Kubernetes の基本的な仕組みを学べる.cgroup や namespace など理解があやふやになっている部分を重点的に読んだ.また個人的に苦手意識のある TLS (Transport Layer Security) の復習にもなって良かった.例えば CKS (Certified Kubernetes Security Specialist) を受験するときに CSR (Certificate Signing Requests) 関連も出題されるし,本書の「第5章」にも関連する内容が出てくる.
👉 試した記事 📝
第2章「コンテナ運用における脅威の事例」
第2章ではコンテナワークロードでのさまざまな「セキュリティ脅威」を学べる.実際に「CVE 識別番号」も載っていて,被害を想像すると怖い〜😱となった.例えば Docker / Kubernetes の設定ミスもあれば,コンテナランタイムや Kubernetes コンポーネントの脆弱性もある.改めて,セキュリティ意識を高めておこう!と思える「第2章」だった.
第3章「ランタイムのセキュリティ Tips」
第3章では Docker コンテナや Kubernetes Pod を安全に実行するための Tips を学べる.具体的には「seccomp(不要なシステムコールを制限する)」や「AppArmor(ファイル操作などを制限する)」や「Falco(コンテナワークロードの脅威を検出する)」などなど.他にも Security Context に関連する Tips もあり,気になった点は積極的に試して理解を深めた.
👉 試した記事 📝
- Docker と seccomp を組み合わせてシステムコールを制限する - kakakakakku blog
- Kubernetes と seccomp を組み合わせてシステムコールを制限する - kakakakakku blog
- Kubernetes と AppArmor を組み合わせてファイル操作を制限する - kakakakakku blog
- Kubernetes と Falco を組み合わせて脅威検出に入門する - kakakakakku blog
- Pod でルートファイルシステムを読み取り専用にする securityContext.readOnlyRootFilesystem - kakakakakku blog
第4章「イメージのセキュリティTips」
第4章ではコンテナイメージに特化した Tips を学べる.ビルドツールの「BuildKit」や脆弱性検査ツールの「Clair」や「Trivy」などが紹介されている.日頃からDockerfile ベストプラクティスは意識しているけど,今まで使ったことがなかったツールなども知れて良かった.本書に載っていないけど関連する話題としては「ヒアドキュメント構文」のサポートや「hadolint」を使った Dockerfile の静的解析もあるかなーと.
👉 試した記事 📝
- Dockerfile で新しく使えるようになった構文「ヒアドキュメント」で複数行の RUN をシュッと書く - kakakakakku blog
- GitHub Actions と hadolint を組み合わせて Dockerfile の静的解析を自動化しよう! - kakakakakku blog
第5章「Kubernetes クラスタのセキュリティ Tips」
第5章では Kubernetes クラスタに関連するセキュリティを学べる.とは言っても内容は本当に幅広く,Cloud Native Security の「4C (Cloud / Clusters / Containers / Code)」という多層防御アプローチの説明もあるし,「認証・認可・Admission Controller」や「Service Account」や「秘密情報 (Secrets / CSI : Container Storage Interface)」なども詳細に解説されている.トピックはまだまだ他にもあって目次を見てもらえればと!個人的に苦手意識のある「認証・認可」の理解を深められた点と,多すぎて全体把握ができていなかった「Admission Controller」を整理できた点は「第5章」を読んだメリットとして印象に残っている.
👉 試した記事 📝
- kube-apiserver で「匿名リクエスト」を無効化する : --anonymous-auth=false - kakakakakku blog
- Secret の自動マウントをオプトアウトするかどうか : automountServiceAccountToken フィールド - kakakakakku blog
第6章「アプリケーション間通信を守る」
第6章では「Network Policy」や「Istio を使った通信制御」など,アプリケーション間通信に関するセキュリティを学べる.またアプリケーション間通信の仕様でもある SPIFFE (Secure Production Identity Framework for Everyone) も解説されている.
📝 試した記事
まとめ
「Docker/Kubernetes 開発・運用のためのセキュリティ実践ガイド」を読んだ.本書を読んで「セキュリティに関して "知らなかったことに気付けた"」ことに価値があった.コンテナワークロードにおけるセキュリティ対策の理解を深めるために本書はおすすめだし,CKS (Certified Kubernetes Security Specialist) 対策としてもおすすめ!
関連記事
CKS (Certified Kubernetes Security Specialist) を受験するなら以下の記事も合わせて読んでもらえるとー 📝