Docker と Kubernetes のコンテナセキュリティ
コンテナセキュリティ入門
コンテナはアプリケーションのデプロイに革命をもたらしましたが、新たな攻撃ベクトルをもたらします。 セキュリティは base image から Kubernetes のオーケストレーションまで、ランタイム 保護や network policies を含めてすべてをカバーする必要があります。
Docker イメージのセキュリティ
1. ベースイメージの選択
- 公式かつ検証済みのイメージを使用する(Docker Hub verified publishers)
- 攻撃対象領域を小さくするため Alpine Linux または Distroless を優先する
- :latest イメージを避ける - 常にバージョンを指定する
- レイヤーを最小化し、不要なツールを削除する
2. 脆弱性スキャン
- Trivy:Aqua Security によるオープンソースのスキャナー
- Grype:イメージと filesystem の脆弱性スキャン
- Clair:静的な脆弱性分析
- Snyk Container:CI/CD との統合
- push の前に CI/CD pipeline での自動スキャン
3. イメージ署名
- イメージ署名のための Docker Content Trust(Notary)
- supply chain security のための Sigstore/Cosign
- デプロイ前の整合性検証
Docker ランタイムセキュリティ
Docker コンテナのハードニング:
- User Namespaces:root として実行しない(USER directive)
- Capabilities:Drop all + 必要なものだけ追加(--cap-drop=ALL)
- Read-only Filesystem:イミュータブルなコンテナのための --read-only
- No New Privileges:--security-opt=no-new-privileges
- Resource Limits:DoS を防ぐための --memory、--cpus
- Seccomp Profiles:危険な syscall をフィルタリングする
- AppArmor/SELinux:Mandatory access control
Kubernetes セキュリティ
1. RBAC とアクセス制御
- 最小権限:特定の Roles と RoleBindings
- アプリケーションごとに専用の Service Accounts
- 重要な自動化を除き ClusterAdmin を避ける
- すべての API calls の audit logging
2. Pod Security Standards
- Privileged:制限なし(避ける)
- Baseline:既知の権限昇格を防ぐ
- Restricted:本番環境向けの最大限のハードニング
- 強制適用のための Pod Security Admission controller
3. Network Policies
- Default deny all + 必要に応じた明示的な allow
- namespace と labels によるセグメンテーション
- 情報流出を防ぐための egress 制御
- CNI plugins との統合(Calico、Cilium)
Secrets 管理
- secrets を決してハードコードしないイメージやコードに
- Kubernetes Secrets:Base64 エンコード(暗号化されていません!)
- External Secrets Operator:外部の vault との統合
- Sealed Secrets:GitOps のための非対称暗号化
- HashiCorp Vault:Dynamic secrets と自動ローテーション
- AWS Secrets Manager / Azure Key Vault:Cloud-native options
- etcd の Encryption at rest(--encryption-provider-config)
ランタイムセキュリティ
ランタイム保護ツール:
- Falco:eBPF によるランタイム脅威検出(CNCF)
- Tetragon:eBPF-based security observability(Cilium)
- Sysdig Secure:Container forensics と compliance
- Aqua Security:Full lifecycle container security
- Prisma Cloud:CWPP(Cloud Workload Protection Platform)
検出対象:異常なプロセス生成、不審なネットワーク接続、file system の変更、 権限昇格の試み
サービスメッシュのセキュリティ
- Istio:自動 mTLS、authorization policies、トラフィック暗号化
- Linkerd:zero-trust networking を備えた軽量なサービスメッシュ
- Consul Connect:service-to-service の暗号化と認可
- 証明書の自動ローテーション
- マイクロサービス間のきめ細かなアクセス制御
- 可観測性:distributed tracing と metrics
サプライチェーンセキュリティ
- SBOM(Software Bill of Materials):生成のための Syft、Tern
- Admission Controllers:policy enforcement のための OPA/Gatekeeper、Kyverno
- Image Provenance:SLSA framework への準拠
- Registry Security:スキャン統合された Harbor、Artifactory
- アーティファクトの署名と検証(Cosign、Notary v2)
- 継続的な脆弱性管理
ベストプラクティス
- [OK] pipeline のすべてのフェーズでイメージをスキャンする
- [OK] Restricted レベルの Pod Security Standards を実装する
- [OK] すべての namespace に default deny の network policies を適用する
- [OK] 外部 secrets(Git やイメージには決して入れない)
- [OK] Falco または同等のツールによるランタイム監視
- [OK] audit logs を有効化し集中管理する
- [OK] cluster と components の定期的な更新
- [OK] 暗号化された etcd のバックアップ
- [OK] テスト済みの disaster recovery 計画
- [OK] サービスメッシュによる zero-trust networking
