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