$30 off During Our Annual Pro Sale. View Details »

KubernetesとTerraformのセキュリティ/ガバナンス向上委員会 with OPA

saramune
November 21, 2022

KubernetesとTerraformのセキュリティ/ガバナンス向上委員会 with OPA

CNDT 2022の発表資料です。

saramune

November 21, 2022
Tweet

More Decks by saramune

Other Decks in Technology

Transcript

  1. © Chatwork
    KubernetesとTerraformの
    セキュリティ/ガバナンス向上委員会
    with OPA
    2022年11月21日 SRE部 古屋 啓介
    Chatwork株式会社

    View Slide

  2. 自己紹介
    2
    ● 古屋 啓介
    ○ Chatwork株式会社 プロダクト本部 SRE部
    ○ 2022年2月入社
    ● 普段のおしごと
    ○ AWSとイチャイチャ
    ■ Aurora
    ■ EKS
    ○ ※セキュリティの専門家というわけではないです

    View Slide

  3. 会社概要
    3
    会社名
    Chatwork株式会社
    代表取締役CEO
    山本 正喜
    従業員数
    304名(2022年9月末日時点)
    所在地
    東京、大阪、ベトナム、台湾
    設立
    2004年11月11日

    View Slide

  4. Chatworkとは
    4
    効率的に情報共有できる
    グループチャット
    仕事の見える化ができる
    タスク管理
    見落としがなくなる
    ファイル管理
    いつでも会議ができる
    ビデオ/音声通話
    * BOXIL SaaS AWARD 2022「ランキング部門 コラボレーション部門賞」「ベスト評価賞
    (初期設定の容易さNo.1、価格の満足度No.1)」を受賞 BOXIL「Chatwork」口コミ評価
    * Nielsen NetView 及びNielsen Mobile NetView Customized Report 2022年5月度調べ月次利用者(MAU:Monthly Active User)調査。
    * 調査対象はChatwork、Microsoft Teams、Slack、LINE WORKS、Skypeを含む47サービスをChatwork株式会社にて選定。

    View Slide

  5. Chatworkは利用者数No.1*のビジネスチャット
    5
    3月
    リリース
    10万社
    突破!
    20万社
    突破!
    導入社数
    37万6000社以上!
    (2022年9月末日時点)
    30万社
    突破!
    * Nielsen NetView 及びNielsen Mobile NetView Customized Report 2022年5月度調べ月次利用者(MAU:Monthly Active User)調査。
    * 調査対象はChatwork、Microsoft Teams、Slack、LINE WORKS、Skypeを含む47サービスをChatwork株式会社にて選定。

    View Slide

  6. Chatworkの構成(ざっくり)
    6

    View Slide

  7. Kubernetesのセキュリティ向上について
    Terraformの安全な運用について
    AWSリソース作成のガードレールについて
    1
    2
    3
    AGENDA
    アジェンダ

    View Slide

  8. Kubernetesのセキュリティ向上について
    1

    View Slide

  9. Kubernetesのセキュリティ
    大丈夫ですか?

    View Slide

  10. Kubernetesのセキュリティ
    大丈夫ですか?

    View Slide

  11. クラウドネイティブセキュリティの4C
    11
    ● Kubernetesのドキュメントによると
    ○ コード
    ○ コンテナ
    ○ クラスター
    ○ クラウド
    https://kubernetes.io/ja/docs/concepts/security/overview/

    View Slide

  12. コンテナに関する懸念事項
    12
    ● さらに詳細に
    ○ コンテナの脆弱性スキャンとOS依存のセキュリティ
    ○ イメージの署名と実施
    ○ 特権ユーザーを許可しない
    https://kubernetes.io/ja/docs/concepts/security/overview/

    View Slide

  13. コンテナに関する懸念事項
    13
    ● さらに詳細に
    ○ コンテナの脆弱性スキャンとOS依存のセキュリティ
    ○ イメージの署名と実施
    ○ 特権ユーザーを許可しない
    https://kubernetes.io/ja/docs/concepts/security/overview/

    View Slide

  14. コンテナに関する懸念事項
    14
    ● さらに詳細に
    ○ コンテナの脆弱性スキャンとOS依存のセキュリティ
    ○ イメージの署名と実施
    ○ 特権ユーザーを許可しない
    https://kubernetes.io/ja/docs/concepts/security/overview/
    意図しないコンテナを起動させない

    View Slide

  15. ChatworkのKubernetes無法地帯問題(言い過ぎ)
    15
    ● 悪意のあるコンテナがデプロイされる危険性があった
    ○ 起動するコンテナイメージを検査できていなかった
    うわっ...弊社のKubernetes、無法地帯すぎ...?

    View Slide

  16. マニフェストレベルでデプロイ可能なイメージの制約をかけたい
    16
    ● いつどこで?
    ○ マニフェストファイルのCI時
    ○ Kubernetes内部(kubectl apply時、apply以外のリソース生成時)
    開発者
    Application
    Manifest
    (helmfile)
    Charts
    ECR
    EKS
    Push
    Build
    Update
    Push
    kubectl
    apply
    Sync
    CI Reconciliation
    Loop

    View Slide

  17. Open Policy Agent(OPA)を採用
    17
    ● 先述の両方のタイミングで対応可能なツール
    ○ ConftestでCI時の検査
    ○ GateKeeperでKubernetes内部から検査

    View Slide

  18. OPAとは
    18
    ● CNCFでホストされるオープンソースで汎用的なポリシーエンジン
    ○ Regoという言語でポリシーを表現
    ○ Input(JSON)をPolicy(Rego)で検査するAPIを提供する

    View Slide

  19. Regoとは
    19
    ● OPAで利用するポリシー記述言語
    ● 普段使ってない脳みそが使われる感じがする
    ○ 独特の書き味があって学習ハードルは高め
    ○ Masayoshi MIZUTANIさんのZenn記事にお世話になりました
    ■ https://zenn.dev/mizutani/books/d2f1440cfbba94

    View Slide

  20. Conftest、Gatekeeperについて
    20
    ● いずれもOPA/Regoの仕組みを使ったツール
    ● Conftest
    ○ Regoを利用して以下のようなコードを検査できる
    ■ Kubernetesのマニフェスト
    ■ TerraformコードなどのHCL
    ● Gatekeeper
    ○ Kubernetes内でOPAのポリシーチェックを回す
    ■ Validating Admission Webhookを利用

    View Slide

  21. 他社さんの事例
    21
    ● Conftest + Gatekeeperは結構あるあるな構成
    ● LIFULLさんの事例
    ○ Pod Security Policyの代替として採用
    ■ https://www.lifull.blog/entry/2021/07/07/200000
    ● NIKKEIさんの記事
    ○ ハンズオンつき!
    ■ https://hack.nikkei.com/blog/advent20201224/

    View Slide

  22. 運用戦略
    22
    ● ポリシー専用のリポジトリを用意
    ○ ポリシーと検査の仕組みを密結合にしたくない
    ● ポリシーの適用を完全自動化
    ○ ポリシーが更新されればCIとGatekeeperそれぞれに反映
    ○ Gatekeeper用のCRD生成にはKonstraintを利用

    View Slide

  23. 実装
    23
    開発者
    Policy(Rego)
    Gatekeeper
    Manifests
    Application
    Manifests
    EKS
    Push
    Admission Webhook
    Update
    CRD
    (Konstraint)
    Sync
    Pull
    CI

    View Slide

  24. Kubernetes内部での検査フロー
    24
    開発者
    Policy(Rego)
    Gatekeeper
    Manifests
    EKS
    Push
    Admission Webhook
    Update
    CRD
    (Konstraint)
    Sync

    View Slide

  25. CIでの検査フロー
    25
    開発者
    Application
    Manifest
    (helmfile)
    Charts
    ECR
    EKS
    Push
    Build
    Update
    Push
    kubectl apply
    Sync
    CI Reconciliation
    Loop

    View Slide

  26. CIでの検査フロー
    26
    開発者
    Policy(Rego)
    Application
    Manifests
    Push
    Pull
    CI

    View Slide

  27. 検査内容
    27
    ● 現時点
    ○ コンテナイメージ名チェック
    ■ 特定の命名規則に則っているイメージ名のみ起動を許可
    ● これから
    ○ その他穴埋め
    ■ (その気になれば)色々できちゃうので仕組みで防ぐ

    View Slide

  28. まとめ
    28
    ● 確実なk8sマニフェスト検査ができるOPAの仕組みを採用
    ○ 意図しないコンテナの起動を防ぐ
    ● 自動かつ柔軟な検査が可能
    ○ CIとapply時のWチェック、ポリシーの分離
    ● 手をかけれるかどうかがOPA採用の見極めポイントかも
    ○ 作り込みとRegoの習得が必要な点に要注意
    ○ Kyvernoとかが対抗馬か

    View Slide

  29. 参考文献
    29
    PairsにおけるEKSセキュリティの取り組み
    OPAの話も含め広範囲のセキュリティ対策について触れら
    れていてすごく参考になります
    OPA/Rego入門
    再掲

    View Slide

  30. Terraformの安全な運用について
    2

    View Slide

  31. Terraform、どうやって
    運用してますか?

    View Slide

  32. Terraform、どうやって運用してますか?
    32

    View Slide

  33. Chatworkでは...
    33
    SQSが欲しいな...
    開発チーム

    View Slide

  34. Chatworkでは...
    34
    SQSが欲しいな...
    SQS 1つお願いします!
    開発チーム

    View Slide

  35. Chatworkでは...
    35
    SQS 1つ入りまーす
    SRE部

    View Slide

  36. Chatworkでは...
    36
    SQS 1つ入りまーす
    SRE部
    .tf書いてpush

    View Slide

  37. Chatworkでは...
    37
    SQS 1つ入りまーす
    SRE部
    .tf書いてpush
    terraform planして

    View Slide

  38. Chatworkでは...
    38
    SQS 1つ入りまーす
    SRE部
    .tf書いてpush
    terraform planして
    plan結果をPRに添付

    View Slide

  39. Chatworkでは...
    39
    SQS 1つ入りまーす
    SRE部
    .tf書いてpush
    terraform planして
    SRE部でレビューして
    plan結果をPRに添付

    View Slide

  40. Chatworkでは...
    40
    SQS 1つ入りまーす
    SRE部
    .tf書いてpush
    terraform planして
    SRE部でレビューして
    terraform apply
    plan結果をPRに添付

    View Slide

  41. Chatworkでは...
    41
    SQS 1つ入りまーす
    SRE部
    .tf書いてpush
    terraform planして
    SRE部でレビューして
    terraform apply
    apply結果を...
    plan結果をPRに添付

    View Slide

  42. 以前のChatwork Terraform事情
    42
    ● 開発者主体でAWSリソースを作成できなかった
    ○ AWSリソース作成は権限を持つSRE部が実施する必要あり
    ● レビューおよび実行記録の保存がしんどい
    ○ 各個人のmacからterraform apply!→GitHubにぺたぺた
    ● Terraformのバージョン管理がつらい
    ○ みんなのバージョン一生揃わない(providerも)

    View Slide

  43. 新天地を求めて
    43
    ● 要件
    ○ 開発者が実行可能かつPR上で運用できるスタイルにしたい
    ○ tfstateをリモート管理したい
    ○ 権限はIAMロール運用としたい

    View Slide

  44. 紆余曲折
    44
    ● Terraform Cloud
    ○ 第一候補だったがIAMキー必須のためNG
    ● GitHub Actions / Self-Hosted Runner
    ○ 当時はプランの都合で選択できず...

    View Slide

  45. 新天地、Atlantis
    45
    ● GitHub PR上でコメント駆動terraform applyできるOSS
    ○ PRのコメントでplan、レビュー後apply、みたいな
    ● Pros
    ○ 要件はすべて満たす(PR運用、tfstate、IAMロール)
    ● Cons
    ○ 運用コスト(インフラ費、人件費)

    View Slide

  46. The Atlantis Workflow
    46
    https://www.runatlantis.io/

    View Slide

  47. The Atlantis Workflow
    47
    https://www.runatlantis.io/

    View Slide

  48. The Atlantis Workflow
    48
    https://www.runatlantis.io/

    View Slide

  49. The Atlantis Workflow
    49
    https://www.runatlantis.io/

    View Slide

  50. 運用
    50
    EKS
    terraform
    apply
    terraform apply
    開発者
    Terraform
    atlantis apply
    pull

    View Slide

  51. 導入してみて
    51
    ● 開発者体験の向上
    ○ SRE部に依頼しなくてもAWSリソースが作れる
    ● セキュリティの向上
    ○ 権限はAtlantisさんだけが持てばよい(Atlantisさんつよつよ問題はある)
    ● ガバナンス(※)
    の向上
    ○ GitHubでplan見て、レビューしてもらって、applyできる
    ※ここでいうガバナンスが効いている状態とは、みんなが同じやり方・同じルール下でTerraform運用できる状態を指します

    View Slide

  52. まとめ
    52
    ● 新天地、Atlantis
    ○ Terraform運用のつらみ解消
    ● Terraform運用の開発者体験 / セキュリティ / ガバナンス向上に貢献
    ○ 誰でもapplyできて、セキュアで、記録が残る
    ● Atlantisさんのお守りは考える必要アリ
    ○ 良くも悪くもself-hosted

    View Slide

  53. AWSリソース作成のガードレールについて
    3

    View Slide

  54. こんな経験、ありませんか?

    View Slide

  55. 異常発生!
    55

    View Slide

  56. わんわん!
    56

    View Slide

  57. SRE部、出動!
    57
    DynamoDBのWCUがサチってるな...
    特にサービス影響は出てなさそうだけど...
    開発のひとに聞いてみるか...

    View Slide

  58. SRE部、出動!
    58
    DynamoDBのWCUがサチってるな...
    特にサービス影響は出てなさそうだけど...
    開発のひとに聞いてみるか...

    View Slide

  59. いやちょっとまて...
    59
    DynamoDBのWCUがサチってるな...
    特にサービス影響は出てなさそうだけど...
    開発のひとに聞いてみるか...

    View Slide

  60. SRE部でワンクッション挟む意味 is ...?
    60
    SRE部
    開発チームA
    開発チームB

    View Slide

  61. あるべき姿
    61
    SRE部
    開発チームA
    開発チームB
    (必要なら)

    View Slide

  62. 課題
    62
    ● そもそも管理チーム不明なAWSリソースがいっぱいある...

    View Slide

  63. お掃除だ!
    63

    View Slide

  64. タグ付けだ!
    64
    管理: 開発チームA
    管理: 開発チームB

    View Slide

  65. やらないといけないこと
    65
    開発メンバ漏れなく周知
    新しく入った人への啓蒙

    View Slide

  66. 想定されること
    66
    人は忘れる生き物
    口伝の漏れ

    View Slide

  67. 仕組みで解決したい
    67
    ● 要件
    ○ AWSリソースをどのチームが管理しているのかをタグで明確にしたい
    ○ タグがない場合はAtlantisでリソース作成をブロックしたい

    View Slide

  68. そこでAtlantis + Conftest
    68
    ● できること
    ○ Terraformのplan結果をOPAの仕組みで検査
    ○ ポリシー違反であればapply不可
    https://www.runatlantis.io/docs/policy-checking.html

    View Slide

  69. やってみた
    69
    ● やること
    ○ Atlantisサーバでpolicy_checkを有効化
    ○ Regoを書く(脳みそこねこね)
    ○ Atlantisにポリシーを入れる

    View Slide

  70. できた
    70
    チーム名を明記するタグがないと怒られる

    View Slide

  71. これから
    71
    ● Gatekeeper側と同じような仕組みにしたい
    ○ ポリシーの分離と反映の自動化
    ● 他のポリシー導入検討
    ○ IAMの強い権限がないか、etc...

    View Slide

  72. こんな経験、ありませんか?
    OPA関係ないけどおまけ

    View Slide

  73. なんかAWSの請求めっちゃ増えてる!
    73

    View Slide

  74. Atlantisさん、最近なにか作りました?
    74

    View Slide

  75. Atlantisさん、最近なにか作りました?
    75
    EC2をxx台ほど...

    View Slide

  76. Atlantisさん、最近なにか作りました?
    76
    EC2をxx台ほど...
    あー、それかぁ...

    View Slide

  77. 必要なら仕方ないけど、作る前にある程度料金を見れないかな...
    77

    View Slide

  78. そこでAtlantis + infracost
    78
    ● できること
    ○ Terraformのplan結果からある程度の利用料金の増減を予測
    https://www.infracost.io/docs/integrations/atlantis/

    View Slide

  79. 期待できること
    79
    あ、これ思ったより料金高いな...
    削減できないか考えよう
    ● Atlantisのplan結果(infracost)を見て...

    View Slide

  80. まとめ
    80
    ● Atlantis + ConftestでTerraformの検査を実施
    ○ Regoポリシーでplan結果の自動レビューを行う
    ● Atlantis + infracostでコストの可視化を実施
    ○ 予期せぬコストアラートの抑止
    ● 仕組みで守るガードレール
    ○ チェックリストや口伝に頼らない

    View Slide

  81. Kubernetesのセキュリティ向上について
    Terraformの安全な運用について
    AWSリソース作成のガードレールについて
    1
    2
    3
    AGENDA
    アジェンダ

    View Slide

  82. 全体のまとめ
    82
    ● OPAを使ってセキュリティとガバナンスの向上を実現
    ○ Kubernetes: Conftest + Gatekeeper
    ○ Terraform: Atlantis + Conftest, Atlantis + infracost
    ● ダイジなのは運用・開発者体験を損なわないこと
    ○ なるべく自動化
    ○ 適切なガードレールを敷く
    ○ SRE部がボトルネックにならない
    ● Atlantisはいいぞ
    ○ 知名度低い...?
    ○ Terraform Cloud推しの人の話も聞いてみたい

    View Slide

  83. 宣伝: 採用募集
    83

    View Slide

  84. 宣伝: Chatwork SRE部のセッション
    84
    ● ArgoCDとGitHub Actions Self Hosted Runnerを使ってリリース時間
    を1/4にした話
    ○ 11/21 15:20-
    ○ Track C
    ○ Ryo Sakamoto
    ● SLO策定までの道とChaosEngineeringを使った最適解の見つけ方
    ○ 11/22 13:20-
    ○ Track A
    ○ Shinya Sasaki

    View Slide

  85. 働くをもっと楽しく、創造的に

    View Slide