Copyright© LIFULL All Rights Reserved.
Kubernetesセキュリティの歩き方
テクノロジー本部アプリケーション基盤G
花塚 亮祐
2021.12.15 Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み
Copyright© LIFULL All Rights Reserved.
Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15
花塚 亮祐(Hanatsuka Ryosuke)
2018年4月 
セキュリティエンジニアとして新卒入社
脆弱性可視化基盤を開発するプロジェクト立ち上げ
2020年10月 
現在のチームに異動し、 Kubernetesによるアプリケーション実行基
盤の開発・運用に携わる
Twitter(動いていない): @___hnts

Blog: https://hanatsuu.medium.com/
自己紹介
2
Copyright© LIFULL All Rights Reserved.
Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15
今日のポイント
3
● マニフェストの自動監査にGatekeeperとConftestを採用
● 自分たちの環境に対して適切な対策を見つける
● 事故が起きないように本番環境への導入は慎重に
Copyright© LIFULL All Rights Reserved.
Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15
Agenda
1. 解決したかった課題
2. 採用したOPA GatekeeperとConftestについて
3. OPA GateKeeperで何を対策するのか
4. 対策を本番環境に導入するまで
4
Copyright© LIFULL All Rights Reserved.
Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15
マニフェストの監査を自動化して、k8sクラスタをよりセキュアにしたい
● 不適切な設定・悪意のある設定のマニフェストのデプロイの制限
○ Privileged Containerなど強い権限を持ったマニフェストがデプロイ可能となっていた
● 人力によるマニフェストのチェック
○ 開発者が書いた多くのマニフェストを人力でチェックするため、見落としの可能性があった
解決したかった課題
5
Copyright© LIFULL All Rights Reserved.
Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15
Pod Security Policy
● Kubernetesに元から組み込まれている
6
OPA Gatekeeper
● Pod Security Policyと同じようなことが
可能な上、自由度が高い
監査自動化において検討した候補
Copyright© LIFULL All Rights Reserved.
Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15
Pod Security Policy
● Kubernetesに元から組み込まれている
7
OPA Gatekeeper
● Pod Security Policyと同じようなことが
可能な上、自由度が高い
Kubernetes v1.25から
Pod Security Policyは廃止になる
✅ Conftestも採用することで、開発時の
マニフェストチェックも可能になる
検討した候補
Copyright© LIFULL All Rights Reserved.
Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15
● KubernetesのAdmission Controllerとして動作し、アンチパターンなマニフェストのデプロイの禁
止などを可能にする カスタムコントローラー
● Regoで任意の処理を実現できる
(以下の例は、hostPIDがtrueであるリソースのデプロイを防いでいる )
8
package deny_host_pid
violation[msg] {
input.review.object.spec.hostPID
msg := sprintf("Sharing the host pid is not allowed: %v", [input.review.object.metadata.name])
}
OPA Gatekeeperとは
Copyright© LIFULL All Rights Reserved.
Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15
● Conftestはk8sマニフェストが違反していないかを静的にチェックできる
● CIに組み込むことで、デプロイ前にマニフェストがポリシーに違反していないかを確かめることが
可能
● Gatekeeper同様に、Regoで任意の処理を実現できる
⚠Gatekeeperで使用したRegoと差異があることに注意
9
package deny_host_pid
violation[msg] {
input.spec.hostPID
msg := sprintf("Sharing the host pid is not allowed: %v", [input.metadata.name])
}
Conftestとは
Copyright© LIFULL All Rights Reserved.
Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15
Gatekeeperで何を対策するのか?
10
Copyright© LIFULL All Rights Reserved.
Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15
最初に以下のような記事を読んで把握した
- クラウドネイティブセキュリティの概要 | Kubernetes

- Matrix - Enterprise | MITRE ATT&CK®

- Threat matrix for Kubernetes

- NIST SP 800-190
11
https://www.microsoft.com/security/blog/2020/04/02/attack-matrix-kubernet
① コンテナ・Kubernetesに関するセキュリティの
全体を簡単に把握する
Copyright© LIFULL All Rights Reserved.
Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15
脅威と攻撃手順を知ることで妥当性のある対策を考案できる
参考にしたもの
● 脅威モデリングのレポート
○ CNCF Financial User Groupが脅威モデリングレポート を公開
○ STRIDEを用いた一般的な k8sクラスタへの脅威モデリング
○ 複数のシナリオに対応した Attack Treeが含まれている
● Attack Tree
○ 攻撃の一連の流れを表したもの
○ 攻撃を達成するまでにどのような手順が必要か把握できる
12
Attack tree of malicious code
execution
②対策すべき項目と対策を具体的に考える
Copyright© LIFULL All Rights Reserved.
Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15
脅威モデリングレポートを参考とした基本的な対策
(今後はPod Securityによる代替も検討)
● Privileged Containerの制限
● Host PIDの制限
● Host Networkの制限
● etc.
自分たちの環境で見つかった脅威の対策
● Istio Gatewayの衝突回避
● Istio Virtual Serviceの衝突回避
● PriorityClassのデプロイの制限
13
実際に決めた対策
Copyright© LIFULL All Rights Reserved.
Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15
対策を本番環境に導入するまで
ぶつかった課題ややるべきことが色々あったので紹介
14
Copyright© LIFULL All Rights Reserved.
Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15
解決策
GatekeeperとConftestのRegoを併用できない
● 少しだけ文法に差異がある
● GatekeeperではConstraintTemplateに直接Regoが埋め込まれる
15
https://github.com/plexsystems/konstraint/blob/main/images/logo.png
Konstraintを使って解決する
● GatekeeperとConftestのRegoの差異を吸収してくれるツール
● Github Actionsを併用することでRegoの更新を自動化
課題
本番環境に導入するまでにぶつかった課題①
Copyright© LIFULL All Rights Reserved.
Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15
解決策
   ConstraintとConstraintTemplateをクラスタへ適用する際に、
何も考えずに適用してしまうと、意図していないリソースまでも
影響を受ける可能性がある
16
一定期間dryrunで監視する
● dryrunで適用することでテスト運用できる
● Gatekeeperが公開するメトリクスから通知を設定
課題
本番環境に導入するまでにぶつかった課題②
Copyright© LIFULL All Rights Reserved.
Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15
GatekeeperとConftestのテスト
● ConftestのverifyコマンドでRegoをテスト(test suffixをつけたファイルをテストしてくれる )
17
対策が機能しているかを確認する
Copyright© LIFULL All Rights Reserved.
Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15
● 必ず対応すべきポリシーやテストのみを提供する
● 対応方法が分かるRunbookを提供する
CIの形骸化を防ぐ
18
Copyright© LIFULL All Rights Reserved.
Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15
まとめ
19
● マニフェストの自動監査にGatekeeperとConftestを採用
GatekeeperとConftestを採用することで課題を解決
● 自分たちの環境に対して適切な対策を見つける
むやみに対策するのではなく、自分たちが対策すべき項目を洗い出す
● 事故が起きないように本番環境への導入は慎重に
Gatekeeperの稼働は意図しない事故に繋がるので、十分にテストすること

Kubernetesセキュリティの歩き方

  • 1.
    Copyright© LIFULL AllRights Reserved. Kubernetesセキュリティの歩き方 テクノロジー本部アプリケーション基盤G 花塚 亮祐 2021.12.15 Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み
  • 2.
    Copyright© LIFULL AllRights Reserved. Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15 花塚 亮祐(Hanatsuka Ryosuke) 2018年4月  セキュリティエンジニアとして新卒入社 脆弱性可視化基盤を開発するプロジェクト立ち上げ 2020年10月  現在のチームに異動し、 Kubernetesによるアプリケーション実行基 盤の開発・運用に携わる Twitter(動いていない): @___hnts
 Blog: https://hanatsuu.medium.com/ 自己紹介 2
  • 3.
    Copyright© LIFULL AllRights Reserved. Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15 今日のポイント 3 ● マニフェストの自動監査にGatekeeperとConftestを採用 ● 自分たちの環境に対して適切な対策を見つける ● 事故が起きないように本番環境への導入は慎重に
  • 4.
    Copyright© LIFULL AllRights Reserved. Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15 Agenda 1. 解決したかった課題 2. 採用したOPA GatekeeperとConftestについて 3. OPA GateKeeperで何を対策するのか 4. 対策を本番環境に導入するまで 4
  • 5.
    Copyright© LIFULL AllRights Reserved. Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15 マニフェストの監査を自動化して、k8sクラスタをよりセキュアにしたい ● 不適切な設定・悪意のある設定のマニフェストのデプロイの制限 ○ Privileged Containerなど強い権限を持ったマニフェストがデプロイ可能となっていた ● 人力によるマニフェストのチェック ○ 開発者が書いた多くのマニフェストを人力でチェックするため、見落としの可能性があった 解決したかった課題 5
  • 6.
    Copyright© LIFULL AllRights Reserved. Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15 Pod Security Policy ● Kubernetesに元から組み込まれている 6 OPA Gatekeeper ● Pod Security Policyと同じようなことが 可能な上、自由度が高い 監査自動化において検討した候補
  • 7.
    Copyright© LIFULL AllRights Reserved. Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15 Pod Security Policy ● Kubernetesに元から組み込まれている 7 OPA Gatekeeper ● Pod Security Policyと同じようなことが 可能な上、自由度が高い Kubernetes v1.25から Pod Security Policyは廃止になる ✅ Conftestも採用することで、開発時の マニフェストチェックも可能になる 検討した候補
  • 8.
    Copyright© LIFULL AllRights Reserved. Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15 ● KubernetesのAdmission Controllerとして動作し、アンチパターンなマニフェストのデプロイの禁 止などを可能にする カスタムコントローラー ● Regoで任意の処理を実現できる (以下の例は、hostPIDがtrueであるリソースのデプロイを防いでいる ) 8 package deny_host_pid violation[msg] { input.review.object.spec.hostPID msg := sprintf("Sharing the host pid is not allowed: %v", [input.review.object.metadata.name]) } OPA Gatekeeperとは
  • 9.
    Copyright© LIFULL AllRights Reserved. Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15 ● Conftestはk8sマニフェストが違反していないかを静的にチェックできる ● CIに組み込むことで、デプロイ前にマニフェストがポリシーに違反していないかを確かめることが 可能 ● Gatekeeper同様に、Regoで任意の処理を実現できる ⚠Gatekeeperで使用したRegoと差異があることに注意 9 package deny_host_pid violation[msg] { input.spec.hostPID msg := sprintf("Sharing the host pid is not allowed: %v", [input.metadata.name]) } Conftestとは
  • 10.
    Copyright© LIFULL AllRights Reserved. Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15 Gatekeeperで何を対策するのか? 10
  • 11.
    Copyright© LIFULL AllRights Reserved. Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15 最初に以下のような記事を読んで把握した - クラウドネイティブセキュリティの概要 | Kubernetes
 - Matrix - Enterprise | MITRE ATT&CK®
 - Threat matrix for Kubernetes
 - NIST SP 800-190 11 https://www.microsoft.com/security/blog/2020/04/02/attack-matrix-kubernet ① コンテナ・Kubernetesに関するセキュリティの 全体を簡単に把握する
  • 12.
    Copyright© LIFULL AllRights Reserved. Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15 脅威と攻撃手順を知ることで妥当性のある対策を考案できる 参考にしたもの ● 脅威モデリングのレポート ○ CNCF Financial User Groupが脅威モデリングレポート を公開 ○ STRIDEを用いた一般的な k8sクラスタへの脅威モデリング ○ 複数のシナリオに対応した Attack Treeが含まれている ● Attack Tree ○ 攻撃の一連の流れを表したもの ○ 攻撃を達成するまでにどのような手順が必要か把握できる 12 Attack tree of malicious code execution ②対策すべき項目と対策を具体的に考える
  • 13.
    Copyright© LIFULL AllRights Reserved. Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15 脅威モデリングレポートを参考とした基本的な対策 (今後はPod Securityによる代替も検討) ● Privileged Containerの制限 ● Host PIDの制限 ● Host Networkの制限 ● etc. 自分たちの環境で見つかった脅威の対策 ● Istio Gatewayの衝突回避 ● Istio Virtual Serviceの衝突回避 ● PriorityClassのデプロイの制限 13 実際に決めた対策
  • 14.
    Copyright© LIFULL AllRights Reserved. Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15 対策を本番環境に導入するまで ぶつかった課題ややるべきことが色々あったので紹介 14
  • 15.
    Copyright© LIFULL AllRights Reserved. Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15 解決策 GatekeeperとConftestのRegoを併用できない ● 少しだけ文法に差異がある ● GatekeeperではConstraintTemplateに直接Regoが埋め込まれる 15 https://github.com/plexsystems/konstraint/blob/main/images/logo.png Konstraintを使って解決する ● GatekeeperとConftestのRegoの差異を吸収してくれるツール ● Github Actionsを併用することでRegoの更新を自動化 課題 本番環境に導入するまでにぶつかった課題①
  • 16.
    Copyright© LIFULL AllRights Reserved. Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15 解決策    ConstraintとConstraintTemplateをクラスタへ適用する際に、 何も考えずに適用してしまうと、意図していないリソースまでも 影響を受ける可能性がある 16 一定期間dryrunで監視する ● dryrunで適用することでテスト運用できる ● Gatekeeperが公開するメトリクスから通知を設定 課題 本番環境に導入するまでにぶつかった課題②
  • 17.
    Copyright© LIFULL AllRights Reserved. Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15 GatekeeperとConftestのテスト ● ConftestのverifyコマンドでRegoをテスト(test suffixをつけたファイルをテストしてくれる ) 17 対策が機能しているかを確認する
  • 18.
    Copyright© LIFULL AllRights Reserved. Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15 ● 必ず対応すべきポリシーやテストのみを提供する ● 対応方法が分かるRunbookを提供する CIの形骸化を防ぐ 18
  • 19.
    Copyright© LIFULL AllRights Reserved. Ltech#20 Kubernetesを用いたアプリケーション実行基盤の取り組み 2021.12.15 まとめ 19 ● マニフェストの自動監査にGatekeeperとConftestを採用 GatekeeperとConftestを採用することで課題を解決 ● 自分たちの環境に対して適切な対策を見つける むやみに対策するのではなく、自分たちが対策すべき項目を洗い出す ● 事故が起きないように本番環境への導入は慎重に Gatekeeperの稼働は意図しない事故に繋がるので、十分にテストすること