Upgrade to Pro — share decks privately, control downloads, hide ads and more …

スタートアップサービスでもやれる!Kubernetesを使ったセキュアWebアプリの構築と運用

 スタートアップサービスでもやれる!Kubernetesを使ったセキュアWebアプリの構築と運用

2019/7/22 Cloud Native Days Tokyo 2019での、藤原の講演資料になります

Recruit Technologies

July 22, 2019
Tweet

More Decks by Recruit Technologies

Other Decks in Technology

Transcript

  1. スタートアップサービスでもやれる! Kubernetesを使った セキュアWebアプリの構築と運用 1 (C) Recruit Technologies Co.,Ltd. All rights

    reserved. 株式会社リクルートテクノロジーズ ITエンジニアリング本部 プロダクティビティエンジニアリング部 クラウドアーキテクトグループ 藤原 涼馬
  2. リクルートグループの紹介 2 (C) Recruit Technologies Co.,Ltd. All rights reserved. 創業

    1960年3月31日 「大学新聞広告社」としてスタート グループ 従業員数 45,856名 (2019年3月31日時点) 連結売上高 23,107億円 (2018年4月1日~2019年3月31日) 連結営業利益 2,230億円 (2018年4月1日~2019年3月31日) グループ 企業数 344社 (子会社および関連会社、2019年3月31日時点) 目指す世界観 「あなた」を支える存在でありたい
  3. 事業内容の紹介 3 (C) Recruit Technologies Co.,Ltd. All rights reserved. 3

    ライフイベント領域 進学 就職 結婚 転職 住宅購⼊ ⾞購⼊ 出産/育児 旅⾏ ビジネス⽀援 ⽣活/地域情報 グルメ・美容 ライフスタイル領域 選択・意思決定を⽀援する情報サービスを提供し、 「まだ、ここにない、出会い。」を実現する。
  4. 所属組織の紹介:リクルートテクノロジーズ 4 (C) Recruit Technologies Co.,Ltd. All rights reserved. リクルートグループのビジネス・サービス

    リクルートテクノロジーズ IT・マーケティング ソリューション ビジネス視点の ITマネジメント 横断的にソリューションを提供 上記は対象企業・サービスの一部抜粋です。
  5. 注意 5 (C) Recruit Technologies Co.,Ltd. All rights reserved. 本発表内容はあくまでも

    ノウハウ・考え方等の共有を 目的としたものであり、所属組織としての 全体方針・見解を表すものではありません
  6. 自己紹介 (藤原 涼馬) 藤原 涼馬 株式会社リクルートテクノロジーズ ITエンジニアリング本部プロダクティビティエンジニアリング部 クラウドアーキテクトグループ 経歴 2011-2015

    ユーザ系SIer にてR&D 2016/1~ リクルートテクノロジーズに入社 主な活動(社外含む) • コンテナ・クラウド等の先進アーキテクチャの事業への装着 • Rancher JPコアメンバー • 各種勉強会登壇 (Rancher JP meetup, Docker meetup tokyo, Japan Container Days, Cloud Native Daysほか) • 寄稿 @IT 先行事例に学ぶKubernetes 企業活用の現実・コンテナベースのCI/CD本番事例大解剖, ThinkIT マルチクラウド時代の最強コンビRancherによるKubernetes活用ガイド) • 執筆 • RancherによるKubernetes活用ガイド(Think IT Books, インプレス) 6 (C) Recruit Technologies Co.,Ltd. All rights reserved.
  7. Webアプリケーションのセキュリティ? セキュリティと言われて思い浮かぶこと 10 (C) Recruit Technologies Co.,Ltd. All rights reserved.

    SQLインジェクション OSコマンドインジェクション 単にセキュリティと言ってしまうと スコープが広くなりすぎるので大きく絞って説明
  8. 1. アプリケーションそのものを堅牢にする • セキュアコーディングによって脆弱性の少ないコード記 述をすることで安全なアプリケーションを実現する 13 (C) Recruit Technologies Co.,Ltd.

    All rights reserved. 参考 JPCERT CC https://www.jpcert.or.jp/securecoding/ 体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践 第2版 (徳丸 浩著, SB Creative刊)
  9. 1. アプリケーションそのものを堅牢にする • セキュアコーディングによって脆弱性の少ないコード記 述をすることで安全なアプリケーションを実現する 14 (C) Recruit Technologies Co.,Ltd.

    All rights reserved. 参考 JPCERT CC https://www.jpcert.or.jp/securecoding/ 体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践 第2版 (徳丸 浩著, SB Creative刊) これで安全なアプリケーションは実現できる!
  10. 1. アプリケーションそのものを堅牢にする • セキュアコーディングによって脆弱性の少ないコード記 述をすることで安全なアプリケーションを実現する 15 (C) Recruit Technologies Co.,Ltd.

    All rights reserved. 参考 JPCERT CC https://www.jpcert.or.jp/securecoding/ 体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践 第2版 (徳丸 浩著, SB Creative刊) これで安全なアプリケーションは実現できる! わけない
  11. 1. アプリケーションそのものを堅牢にする 程度の差こそあれ、人は必ず実装ミスをする & アプリケーションの脆弱性は簡単には根本対策できない (脆弱性の特定 & 回避策の適用 & コード変更による既存機能への影響がないことの確認、

    そもそもコード自体が自分たちの管理配下にあるのか? ひとまず他でワークアラウンドする対応も必要になる) 17 (C) Recruit Technologies Co.,Ltd. All rights reserved. もちろんセキュアコーディングは大事だが、 もう一段の対策をする
  12. 2. アプリケーションを別の方法で保護する 一般的には、 1. Webアプリケーションファイアウォール(WAF) 2. 不正侵入検知システム(IDS) を利用することが多い 20 (C)

    Recruit Technologies Co.,Ltd. All rights reserved. WAF, IDSがどんなものかわかってる方 ノシ わかってる方しかいない場合は数スライド飛ばします
  13. WAFとは • Webアプリケーションに特化したファイアウォール • リクエストのヘッダ・ボディの内容をチェックして悪意 のあるリクエストに対してリクエストをブロックしたり、 アラートをあげたりする 21 (C) Recruit

    Technologies Co.,Ltd. All rights reserved. 悪意のある リクエスト 通常の リクエスト 問題ないので通過 怪しいので ブロック&アラート WAF Web アプリケーション ※ 悪意のあるリクエストが具体的にどんなものなのかは徳丸本などを参照
  14. IDSとは • ネットワークにおける怪しい挙動がないかを確認・検知す るツール • ポートスキャンやsyn floodなどの検知を行う(WAFに近い機能を持つものもある) • 外向け通信で怪しい通信を行なっていないかも確認する場合がある 22

    (C) Recruit Technologies Co.,Ltd. All rights reserved. サーバ IDS サーバ IDS 怪しい パケット 怪しいパケットが 飛んできたので通知しよう 外部の怪しい サーバ このサーバ、 なんか変なプロセス 動いてない……? (C&Cサーバと通信してるんだけど) 外部からの怪しい通信の検知 外向けの怪しい通信の検知
  15. WAFとIDSについての留意点 • WAF/IDSをうまく利用することでアプリケーションをよ りセキュアにできる • WAF/IDSは万能薬ではない • 一般的には検知ルールを作成、適用することで利用する • もちろん広く配布されているルールがある!

    • あくまでも頻出パターンを整理したものであって全てをカバーす ることはできない(誤検知もある!) • 例えば、定番の攻撃のブロック、すぐに修正できない脆弱性への ワークアラウンドといった形で活用できる • セキュアコーディングや適切なインフラ設定をすることは大前提 23 (C) Recruit Technologies Co.,Ltd. All rights reserved.
  16. WAFとIDSについての留意点 • WAF/IDSをうまく利用することでアプリケーションを よりセキュアにできる • WAF/IDSは万能薬ではない • 一般的には検知ルールを作成、適用することで利用する • もちろん広く配布されているルールがある!

    • あくまでも頻出パターンを整理したものであって全てをカバーす ることはできない(誤検知もある!) • 例えば、定番の攻撃のブロック、すぐに修正できない脆弱性への ワークアラウンドといった形で活用できる • セキュアコーディングや適切なインフラ設定をすることは大前提 24 (C) Recruit Technologies Co.,Ltd. All rights reserved. ここまでで基本を整理
  17. 本セッションでのKubernetesとセキュリティ Kubernetes固有のセキュリティの話題 • RBAC • NetworkPolicyなどなど Kubernetesとパブリッククラウドで セキュリティ機能の導入と運用を楽にする スコープ外 スコープ内

    • https://github.com/ahmetb/kubernetes-network-policy-recipes • https://github.com/IBM/rbac-in-k8s • https://kubernetes.io/docs/reference/access-authn-authz/rbac/ RBACについての参考 NetworkPolicyについての参考
  18. セキュリティ機能の導入と運用における基本方針 • 導入の基本方針 • 容易かつ、確実に大量のツール導入が可能であること • 運用の基本方針 • 検知ルールを容易かつ、確実に適用できること •

    適用時にサービスに影響するダウンタイムがないこと • 監査・通知プロセスにかかる人的コストがサービスの 規模に比例しないこと 29 (C) Recruit Technologies Co.,Ltd. All rights reserved.
  19. 導入と運用における基本方針 • 導入の基本方針 • 容易かつ、確実に大量のツール導入が可能であること • 運用の基本方針 • 検知ルールを容易かつ、確実に適用できること •

    適用時にサービスに影響するダウンタイムがないこと • 監査・通知プロセスにかかる人的コストがサービスの 規模に比例しないこと 30 (C) Recruit Technologies Co.,Ltd. All rights reserved. コンテナ/k8sの得意領域
  20. 導入と運用における基本方針 • 導入の基本方針 • 容易かつ、確実に大量のツール導入が可能であること • 運用の基本方針 • 検知ルールを容易かつ、確実に適用できること •

    適用時にサービスに影響するダウンタイムがないこと • 監査・通知プロセスにかかる人的コストがサービスの 規模に比例しないこと 31 (C) Recruit Technologies Co.,Ltd. All rights reserved. コンテナ/k8sの得意領域 少しだけ工夫が必要
  21. システムの構成を変更することなく品質向上を図る ModSecurity-nginxを利用した登り方として以下のような 想定ができる 37 (C) Recruit Technologies Co.,Ltd. All rights

    reserved. 1st Step or 2nd Step WAF 3rd Step WAFに ついて知る (開発環境での運用トレーニン グ・フィジビリ導入)
  22. システムの構成を変更することなく品質向上を図る ModSecurity-nginxを利用した登り方として以下のような 想定ができる 38 (C) Recruit Technologies Co.,Ltd. All rights

    reserved. 1st Step or 2nd Step WAF 3rd Step WAFに ついて知る (開発環境での運用トレーニン グ・フィジビリ導入) 商用ルールの導入による Techサポート取得 (ある程度の規模での導入と本格利用 & サポート活用による組織内工数コスト減)
  23. システムの構成を変更することなく品質向上を図る ModSecurity-nginxを利用した登り方として以下のような 想定ができる 39 (C) Recruit Technologies Co.,Ltd. All rights

    reserved. 1st Step or 2nd Step WAF 3rd Step WAFに ついて知る (開発環境での運用トレーニン グ・フィジビリ導入) 商用ルールの導入による Techサポート取得 (ある程度の規模での導入と本格利用 & サポート活用による組織内工数コスト減) CDN上のWAF活用 (WAFの処理リソースの外部化 & DDoS耐性向上、サポート活 用による組織内工数コスト減)
  24. ModSecurity-nginx の課題 OSSではあるので、本格的な商用製品と比較すると運用面で 劣る部分はある ① ルールのアップデート ② ルールの管理(不要ルールの除外・カスタムルールの追加) ③ アラートの仕組み

    • おそらくこの3つが商用製品との大きな違い • デフォルトかつ実装容易な形ではこの部分の機能は提供していない 40 (C) Recruit Technologies Co.,Ltd. All rights reserved.
  25. ModSecurity-nginx の課題 OSSではあるので、本格的な商用製品と比較すると運用面で 劣る部分はある ① ルールのアップデート ② ルールの管理(不要ルールの除外・カスタムルールの追加) ③ アラートの仕組み

    • おそらくこの3つが商用製品との大きな違い • デフォルトかつ実装容易な形ではこの部分の機能は提供していない 41 (C) Recruit Technologies Co.,Ltd. All rights reserved. それぞれどのようにして対応するかを解説
  26. (課題への対応) ① ルールのアップデート ②ルールの管理 サイドカーパターンを利用してルールの更新・追加をでき る仕組みを実現する 43 (C) Recruit Technologies

    Co.,Ltd. All rights reserved. ModSecurity-nginx rule-updater (crond) ModSecurity CRS Custom Rule (ConfigMap) ①最新ルールを 取得して配置
  27. (課題への対応) ① ルールのアップデート ②ルールの管理 サイドカーパターンを利用してルールの更新・追加をでき る仕組みを実現する 44 (C) Recruit Technologies

    Co.,Ltd. All rights reserved. ModSecurity-nginx rule-updater (crond) ModSecurity CRS Custom Rule (ConfigMap) ①最新ルールを 取得して配置 ②カスタムルールを アップデート
  28. (課題への対応) ① ルールのアップデート ②ルールの管理 サイドカーパターンを利用してルールの更新・追加をでき る仕組みを実現する 45 (C) Recruit Technologies

    Co.,Ltd. All rights reserved. ModSecurity-nginx rule-updater (crond) ModSecurity CRS Custom Rule (ConfigMap) ①最新ルールを 取得して配置 ②カスタムルールを アップデート ③設定の再読み込みをキック (kill –HUP with hostPID: true)
  29. (課題への対応) ③ アラートの仕組み クラウドサービスと組み合わせることでアラートについて は解決できる 47 (C) Recruit Technologies Co.,Ltd.

    All rights reserved. ModSecurity -nginx 検知ログ アラート (to Slack, mail, PagerDuty) あらゆるメトリクス・非メトリクス 情報をここに集約 (大事なのは集約すること、 ”何かあればまずここを見る”場所 を作る)
  30. (課題への対応) ③ アラートの仕組み クラウドサービスと組み合わせることでアラートについて は解決できる 48 (C) Recruit Technologies Co.,Ltd.

    All rights reserved. ModSecurity -nginx 検知ログ アラート (to Slack, mail, PagerDuty) あらゆるメトリクス・非メトリクス 情報をここに集約 (大事なのは集約すること、 ”何かあればまずここを見る”場所 を作る) クラウドサービスとの組み合わせにより、 不足部分は完全ではないものの、比較的容易にカバーできる
  31. PodとしてIDSを導入するチャレンジ(検証結果) Kubernetesであれば容易に解決できた • hostNetwork: true で対応できる • Kubernetesのノード側ネットワークをPodに見せる • セキュリティポリシなどに依存する部分になるので注意

    • Kubernetes as a Serviceの提供形態次第では使えない • 少なくともGKEでは利用できることを確認済み • DaemonSet • IDSのノードへの導入し忘れを予防できる 56 (C) Recruit Technologies Co.,Ltd. All rights reserved. (キーワード) hostNetwork: true & DaemonSet
  32. Kubernetesの外側 守りたいものは”情報”。 つまり情報をためこんでいる場所を守りたい。 62 (C) Recruit Technologies Co.,Ltd. All rights

    reserved. オブジェクト ストレージ RDB KVS Amazon S3 GCS RDS CloudSQL ElastiCache, DynamoDB Cloud memorystore
  33. Kubernetesの外側 守りたいものは”情報”。 つまり情報をためこんでいる場所を守りたい。 63 (C) Recruit Technologies Co.,Ltd. All rights

    reserved. オブジェクト ストレージ RDB KVS Amazon S3 GCS RDS CloudSQL ElastiCache, DynamoDB Cloud memorystore 予防 … 各種アクセス制御設定&テストを頑張る
  34. Kubernetesの外側 守りたいものは”情報”。 つまり情報をためこんでいる場所を守りたい。 64 (C) Recruit Technologies Co.,Ltd. All rights

    reserved. オブジェクト ストレージ RDB KVS Amazon S3 GCS RDS CloudSQL ElastiCache, DynamoDB Cloud memorystore 予防 … 各種アクセス制御設定&テストを頑張る 監査 … どうするかは後述
  35. オブジェクトストレージの監査例 オブジェクトストレージのアクセスログを監査する 68 (C) Recruit Technologies Co.,Ltd. All rights reserved.

    監査対象 バケット Stackdriver Logging アクセスログ 格納バケット Cloud Function バケットのアクセスログを Stackdriver Loggingにいれる Stackdriverから 格納バケットにsinkする 定期的にログが出力される たびに監査 & Slackなどに 結果を通知 普段と異なるアクセス元からの アクセス、異なる認証情報での アクセスがないかを確認
  36. CloudSQLの監査例 CloudSQLの監査例 69 (C) Recruit Technologies Co.,Ltd. All rights reserved.

    監査対象 CloudSQL インスタンス Stackdriver Logging 監査ログ 格納バケット Cloud Function 認証ログ・クエリログ※を Stackdriver Loggingにいれる Stackdriverから 格納バケットにsinkする 定期的にログが出力される たびに監査 & Slackなどに 結果を通知 普段と異なるアクセス元からのアクセス、 異なる認証情報でのアクセスをチェック (+ できれば通常と異なるSQLの実行がないかを確認) ※ クエリログについてはインスタンスの性能影響に注意すること
  37. Cloud memorystoreの監査の例 VPCフローログから普段と異なるアクセスを監査する 70 (C) Recruit Technologies Co.,Ltd. All rights

    reserved. Stackdriver Logging アクセスログ 格納バケット Cloud Function Stackdriverから 格納バケットにsinkする 定期的にログが出力される たびに監査 & Slackなどに 結果を通知 普段と異なるアクセス元からの アクセスがないかを確認 VPC VPCフローログ※ をStackdriver Loggingにいれる ※ VPCフローログは容量が大きいのでログ のフィルタ条件などによって不要なログが 連携されないよう調整は必要
  38. 一般化できる 71 (C) Recruit Technologies Co.,Ltd. All rights reserved. Stackdriver

    Logging アクセスログ 格納バケット Cloud Function アクセスログを バケットに エクスポート CloudFunctionで ログをチェック & 結果通知 普段と異なるアクセス傾向 がないかを確認 ログの ソース アクセスログの出力& Stackdriver Loggingへの格納 自動化されているので、問題を検知した時だけ 人が調査すればいい仕組みを実現できる
  39. まとめ • Kubernetesを活用してWAF/IDSを効率的に導入・運用す ることは可能 • 長期的な視点で何を重視するかを考えてツールの選定は行いましょう • サイドカーなどの分散システムのデザインパターンを活用しましょう • ただし、ルール更新や監査・アラート通知で自動化の工夫は必要

    • セキュリティ系ログの監査 • パブリッククラウドの諸機能を使って自動化することで効率的に運用する ことは可能 72 (C) Recruit Technologies Co.,Ltd. All rights reserved. セキュリティ機能(WAF/IDS)の効率的な導入と運用、ログ監査の効率化は、 Kubernetesとパブリッククラウドを組み合わせることで実現可能です。 是非一度試してみてはいかがでしょうか?