はじめに
クラウドネイティブ技術の普及は目覚ましく、2020年のCNCF調査では本番環境でのコンテナ使用率が92%に達し、Kubernetesの採用率も83%を超えています。コンテナやオーケストレーターを活用することで開発・運用の効率は大幅に向上しますが、その一方でセキュリティ上の課題も複雑化しています。
本書『Cloud Native Security』(著者: クリス・ビニー、ロリー・マッキューン)は、クラウドネイティブ環境全体を対象としたセキュリティ実践書です。コンテナランタイムからKubernetes、DevSecOps、AWSクラウド基盤まで、20章にわたって実際に動かせるツールやコマンドを交えながら解説しています。
本記事では、全4パートの主要な知見をまとめます。
本書の構成
本書は以下の4パートで構成されています。
- パートI — コンテナとオーケストレータのセキュリティ(第1〜6章)
- パートII — DevSecOpsツール(第7〜12章)
- パートIII — クラウドセキュリティ(第13〜16章)
- パートIV — Kubernetesとランタイムセキュリティの高度化(第17〜20章)
パートI:コンテナとオーケストレータのセキュリティ
コンテナの本質を理解する
コンテナはLinuxカーネルの名前空間(namespace)とcgroupsによって実現されており、仮想マシンとは根本的に異なります。コンテナが「軽量な仮想マシン」だという誤解は、セキュリティ上のリスクにもつながります。コンテナのセキュリティを正しく設計するには、Linuxの観点からコンテナの内部構造を理解することが出発点です。
ルートレスコンテナランタイム
root権限なしにコンテナを実行することは、セキュリティ強化の基本中の基本です。本書ではDockerのルートレスモードとPodmanを比較しながら、権限昇格リスクを最小化する方法を解説しています。
Podmanはrootを必要とせず、デーモンレスで動作するため、セキュリティ上の優位性があります。開発・CI/CD環境でPodmanへの移行を検討する価値は十分あります。
コンテナランタイム保護
実行中のコンテナの異常な動作を検知・防止するために、カスタムポリシーを使ったガードレールを設けることができます。Falco(CNCFプロジェクト)などのツールを活用すると、不審なシステムコールやネットワーク通信をリアルタイムで検知できます。
コンテナセキュリティは「静的イメージスキャン」だけでは不十分であり、ランタイム時の脅威検知も不可欠です。
フォレンジックログ:auditdの活用
Linuxのauditdは、コンテナ環境のフォレンジック分析において非常に強力なツールです。カーネルレベルでシステムコール(syscall)を記録でき、インシデント発生後に攻撃者の行動を段階的に追跡できます。
設定の基本は/etc/audit/rules.d/配下のルールファイルを編集することです。たとえばDockerバイナリの監視は以下のように記述します。
-w /usr/bin/docker -p rwxa -k docker-daemon
ルールには3種類あります。
| 種別 | 構文 | 用途 |
|---|---|---|
watchルール |
-w path -p perms -k key |
ファイルシステムの変更監視 |
syscallルール |
-a action,list -S syscall -F field -k key |
システムコールのキャプチャ |
| 制御ルール |
-e, -b, -D など |
バッファ・不変性・クリアの制御 |
ログの分析にはausearchとaureportが便利です。
# Docker関連のイベントを人間が読める形式で表示
ausearch -i | grep -i "docker"
# 認証イベントのレポートを生成
aureport -au
# 直近のファイルアクセスイベント一覧
aureport -f
パフォーマンスの注意点として、ルールは上から順に評価されるため、高頻度のルールを上位に配置することでオーバーヘッドを抑えられます。また、不変ルール(-e 2)を有効にすることで、攻撃者がルールを改ざんするためには再起動が必要になり、改ざん耐性が向上します。
Kubernetesの脆弱性診断:kube-hunter
Aqua Securityが提供するOSSのkube-hunterは、Kubernetesクラスターのセキュリティ問題を診断するツールです。k3sやMinikubeなどの軽量ディストリビューションに対してすぐに試せます。
デプロイ方法は3種類あります。
- Pipでホストにインストール
- Dockerコンテナとして実行(ホストネットワーキングを使用)
- Kubernetesジョブとしてクラスター内部からスキャン
# コンテナ経由でインターフェーススキャンを実行
docker run -it --rm --network host aquasec/kube-hunter
ポッド内部からのスキャンでは、「サービスアカウントトークンへの読み取りアクセス」「CAP_NET_RAWの有効化」「シークレットへのアクセス」などの典型的な脆弱性が検出されます。--activeオプションを使った能動的なエクスプロイトテストも可能ですが、必ず自社のクラスターのみで実施してください。
コンテナイメージのCVEスキャン
Trivy、Clair、Ancoreなど複数のCVEスキャナを組み合わせてイメージを検査することで、パッチ適用が必要な脆弱性を網羅的に把握できます。CI/CDパイプラインのビルドゲートとして組み込むことで、脆弱なイメージの本番デプロイを自動的に阻止できます。
パートII:DevSecOpsツール
セキュリティのシフトレフト
DevSecOpsの核心は、セキュリティチェックをCI/CDパイプラインの早い段階に組み込む「シフトレフト」にあります。開発者自身がセキュリティ上の問題を早期に発見・修正できる体制を整えることが目的です。
ベースラインスキャン:ZAP
OWASP ZAP(Zed Attack Proxy)はWebアプリケーションのベースラインセキュリティテストを自動化するツールです。CI/CDパイプライン内でデプロイ直後のアプリケーションに対してスキャンを実行し、一般的なWebの脆弱性を検出します。
セキュリティのコード化:Gauntlt
Gauntltはセキュリティテストをコードとして記述できるツールで、カスタムポリシーや既存の攻撃ツールをCI/CDテストフローに組み込めます。コンテナ経由でクラウドネイティブ環境にも対応しています。
Kubernetesコンプライアンス:kube-bench
CIS Benchmarkに基づいてKubernetesクラスターのセキュリティ設定を検査するツールです。数百項目のテストを実行し、修正すべき設定項目とその推奨値をレポートします。kube-hunterと組み合わせることで、脆弱性診断とコンプライアンス確認を両面からカバーできます。
Gitリポジトリのシークレット管理
ソースコードリポジトリに認証情報、APIキー、証明書などが誤ってコミットされることを防ぐために、git-secretsやgitleaksなどのツールをCI/CDパイプラインに組み込みます。コミット時にフックで自動チェックすることで、シークレットの漏洩リスクを大幅に低減できます。
ホストセキュリティの自動化:Ansible
Ansibleを使ったべき等な構成管理で、Linuxホストのセキュリティ強化を自動化できます。CIS Benchmarkの推奨設定を定義したPlaybookを定期的に適用することで、ドリフト(設定の乖離)を継続的に修正し、一貫したセキュリティベースラインを維持できます。
サーバースキャン:Nikto
Niktoはホスト上のWebサーバーに対して数千項目のテストを実行するオープンソースのスキャナです。コンテナ化されたバージョンも提供されており、CI/CDパイプラインへの統合も比較的容易です。
パートIII:クラウドセキュリティ
パートIIIはアプリケーション層から離れ、クラウドプラットフォーム(IaaS)レイヤーのセキュリティに焦点を当てています。CSPM(Cloud Security Posture Management)の観点からクラウドインフラを診断・監視・自動化する方法を解説します。
クラウド運用の監視
クラウドリソースの可視性を確保するために、CSPM機能を提供するオープンソースツールを活用します。カスタムメトリクスを備えたダッシュボードを構築することで、セキュリティポスチャをリアルタイムで把握できます。
AWSであれば、CloudTrail・CloudWatch・Config・GuardDutyなどのネイティブサービスを組み合わせることが基本ですが、マルチクラウド環境ではOSSツールによる統合監視も有効です。
クラウドガーディアンシップ:Cloud Custodian
Cloud CustodianはCapital Oneが開発・オープンソース化したクラウドポリシーエンジンです。YAML形式でポリシーを記述し、AWS・Azure・GCPのリソースに対してコンプライアンスチェックや自動修復アクションを実行できます。
policies:
- name: stop-ec2-instance
resource: aws.ec2
filters:
- "tag:Custodian": present
actions:
- stop
活用例として、以下のようなユースケースが考えられます。
- タグ付けポリシーに違反しているEC2インスタンスの自動停止
- S3バケットの暗号化を強制適用
- IAMポリシーの自動デタッチ
- VPCフローログが未有効なVPCの検出と通知
コスト削減の効果も大きく、同行が報告したとおり適切なリソース管理ポリシーによりAWSリソースを約25%削減できた事例もあります。Lambda関数やcronジョブと組み合わせることで、スケジュールベースの自動化も実現できます。
重要な注意点として、dryrunモードで十分テストしてから本番環境に適用してください。誤ったポリシーは重要なリソースを削除・停止する可能性があります。
クラウド監査:CISベンチマーク
LinuxとAWSの両方に対して、CISベンチマークに基づく数百項目のコンプライアンステストを実行できる監査ツールを活用します。定期的な監査レポートを生成・確認することで、セキュリティポスチャの変化を継続的に把握できます。
AWSクラウドストレージのリスク
S3バケットの誤った公開設定は、大規模なデータ漏洩の温床です。攻撃者はバケットが公開されているかどうかを容易に判断できる自動化ツールを利用しています。
主な対策として以下が挙げられます。
- S3バケットのパブリックアクセス設定を組織レベルでブロック
- バケットポリシーとACLを定期的に棚卸し
- Cloud Custodianなどでバケット暗号化(AES256またはKMS)を自動強制
- S3アクセスログとCloudTrailによる操作履歴の記録
パートIV:KubernetesとRuntimeセキュリティの高度化
Kubernetesへの外部攻撃
攻撃者がKubernetesクラスターを外部から侵害する際の主な標的は、Kubernetes APIサーバーです。露出している場合、認証バイパスやバージョン情報の漏洩などのリスクがあります。kube-hunterを使った外部スキャンで、攻撃者視点での露出状況を定期的に確認することが重要です。
RBAC(ロールベースのアクセス制御)
Kubernetesのアクセス制御はRBACで実装されており、Role・ClusterRole・RoleBinding・ClusterRoleBindingの組み合わせで細粒度の権限管理が可能です。最小権限の原則(Principle of Least Privilege)に従い、各サービスアカウントには必要最低限の権限のみを付与してください。
注意すべきアンチパターンとして、cluster-adminロールの安易な付与や、ワイルドカード(*)を使ったリソース・動詞指定があります。
ネットワークの強化
Kubernetesのネットワークポリシーを使って、Pod間の通信を制限できます。デフォルトではすべてのPodが相互に通信可能なため、明示的にポリシーを定義することが重要です。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
また、クラウド環境(AWSやAzureなど)のメタデータサービスへのアクセスをブロックすることも重要な対策の一つです。クラウドメタデータAPIは、コンテナ内から認証情報を取得するための攻撃経路として悪用されることがあります。
ワークロードの強化
Kubernetes上のワークロードを強化するための主な設定として、以下が挙げられます。
-
securityContextでコンテナをnonRootで実行 -
readOnlyRootFilesystem: trueでルートファイルシステムを読み取り専用に - 不要なLinuxケーパビリティをドロップ(
drop: ["ALL"]) -
allowPrivilegeEscalation: falseで権限昇格を防止 - Pod Security Standards(PSS)やOPA Gatekeeperでポリシーを自動強制
本書を読んで感じたこと
実践的なツールチェーンが充実している
本書の最大の強みは、すべての章で「実際に動かせるコマンドとツール」が提示されていることです。auditd、kube-hunter、kube-bench、Cloud Custodianなど、いずれも本番環境での実績があるOSSツールです。読み進めながらラボ環境で手を動かせる構成になっています。
レイヤーを横断したカバレッジ
コンテナランタイム→Kubernetes→クラウド基盤という縦断的な視点は、実際のクラウドネイティブシステムの構造と一致しています。単一レイヤーに閉じたセキュリティ対策では不十分であり、多層防御(Defense in Depth)の観点から全レイヤーを継続的に監視・強化することの重要性を改めて実感しました。
DevSecOpsとの統合
セキュリティのシフトレフトという概念が、CI/CDパイプラインへのツール統合という形で具体化されています。開発者がセキュリティの結果を早期に受け取れる仕組みを整えることで、修正コストを大幅に削減できます。
AWSに偏った記述
本書はAWSを主な対象クラウドとして解説しており、AzureやGCPは概念の類比として言及される程度です。AWSユーザーには直接的に役立ちますが、他プラットフォームユーザーは読み替えが必要な箇所があります。
まとめ
『Cloud Native Security』は、クラウドネイティブ環境を扱うエンジニアがセキュリティに向き合うための実践的なガイドブックです。概念の解説だけでなく、具体的なツールと設定例が豊富に掲載されており、読後すぐに自分の環境で試せる内容になっています。
特に以下のような方にお勧めです。
- コンテナ・Kubernetes環境のセキュリティ設計を担当しているエンジニア
- DevSecOpsを組織に導入しようとしているチームリーダー
- AWSクラウドのCSPM強化を検討しているインフラエンジニア
- 情報処理安全確保支援士(SC)試験などセキュリティ資格の学習をしている方
クラウドネイティブのセキュリティは「一度設定したら終わり」ではなく、継続的な監視と改善が求められます。本書が提示するツールチェーンと考え方を起点に、自分たちの環境に合ったセキュリティプラクティスを構築していければと思います。