Pro Yearly is on sale from $80 to $50! »

GitOpsでも秘匿情報をバッチリ扱う方法、SealedSecretとは? / How to manage credentials on GitOps

GitOpsでも秘匿情報をバッチリ扱う方法、SealedSecretとは? / How to manage credentials on GitOps

GitOpsで秘匿情報を扱う方法を紹介する資料です。SealedSecretというツールを中心に紹介しますが、それ以外のkamus, Hashicorp Vault, kubesealといった多くのツールも紹介します。
@Kubernetes Meetup Tokyo #21 - Cloud Native CI/CD

F773de0c75d8ed1ba7419c8dd2c3776b?s=128

Ryuichi Ito

July 25, 2019
Tweet

Transcript

  1. GitOpsでも秘匿情報を バッチリ扱う⽅法、 SealedSecretとは? Ryuichi Ito (@amaya382) @Kubernetes Meetup Tokyo #21

  2. GitOpsでも秘匿情報を バッチリ扱う⽅法、 SealedSecretとは? Ryuichi Ito (@amaya382) @Kubernetes Meetup Tokyo #21

    刺客現る!?
  3. ⾃⼰紹介 • 伊藤 ⻯⼀ ( @amaya382) • さくらインターネット株式会社 技術本部 •

    k8s使ってます • 新規サービスのバックエンド環境として • Tellusの衛星データ処理基盤として • 好きなk8sツール: telepresence • 最近作ってるk8sツール: GitOpsでCIがPullReq作るためのアレ • 技術書典7で、「kubectlが使えるようになったところから 本番運⽤するために必要なことまとめ」の本書きます!!! 3
  4. 対象者とゴール 前提 • k8s・CI/CDの基本的な概念をある程度理解している 対象者 • GitOpsを本格的に利⽤するために必要なことを知りたい⼈ ゴール • SealedSecretを使うことで

    GitOpsでも秘匿情報を適切に扱えることを知る • どのような仕組みで実現されているか • どうすれば利⽤できるか • 類似ツールとの⽐較・使い分け 4 ⾊々あります
  5. GitOpsのおさらい Gitを中⼼とした、k8sに特化したCI/CDの仕組み • Single Source of Truthとして、サービスの状況を1つのGitリポジトリに集約 • 関⼼の分離 (CIとCD)

    5 Docker Registry アプリの更新 デ プ ロ イ要 求 (PR作 成 ) Hook アプリイメージ更新 開発者(Dev) デプロイ実⾏(PR承認) 運⽤者(Ops) アプリケーション Gitリポジトリ CIツール SSoT Gitリポジトリ (Manifestファイル群) CDツール
  6. GitOpsのおさらい Gitを中⼼とした、k8sに特化したCI/CDの仕組み • Single Source of Truthとして、サービスの状況を1つのGitリポジトリに集約 • 関⼼の分離 (CIとCD)

    6 Docker Registry アプリの更新 開発者(Dev) 運⽤者(Ops) アプリケーション Gitリポジトリ CIツール SSoT Gitリポジトリ (Manifestファイル群) CDツール 1. コードをPush (PR)
  7. GitOpsのおさらい Gitを中⼼とした、k8sに特化したCI/CDの仕組み • Single Source of Truthとして、サービスの状況を1つのGitリポジトリに集約 • 関⼼の分離 (CIとCD)

    7 Docker Registry Hook 開発者(Dev) 運⽤者(Ops) アプリケーション Gitリポジトリ CIツール SSoT Gitリポジトリ (Manifestファイル群) CDツール 2. CI動作開始
  8. GitOpsのおさらい Gitを中⼼とした、k8sに特化したCI/CDの仕組み • Single Source of Truthとして、サービスの状況を1つのGitリポジトリに集約 • 関⼼の分離 (CIとCD)

    8 Docker Registry Hook 開発者(Dev) 運⽤者(Ops) アプリケーション Gitリポジトリ CIツール SSoT Gitリポジトリ (Manifestファイル群) CDツール 2. CI動作開始 2.1. テストやビルド
  9. GitOpsのおさらい Gitを中⼼とした、k8sに特化したCI/CDの仕組み • Single Source of Truthとして、サービスの状況を1つのGitリポジトリに集約 • 関⼼の分離 (CIとCD)

    9 Docker Registry Hook アプリイメージ更新 開発者(Dev) 運⽤者(Ops) アプリケーション Gitリポジトリ CIツール SSoT Gitリポジトリ (Manifestファイル群) CDツール 2. CI動作開始 2.1. テストやビルド 2.2. ビルド成果物をPush
  10. GitOpsのおさらい Gitを中⼼とした、k8sに特化したCI/CDの仕組み • Single Source of Truthとして、サービスの状況を1つのGitリポジトリに集約 • 関⼼の分離 (CIとCD)

    10 Docker Registry デ プ ロ イ要 求 (PR作 成 ) Hook アプリイメージ更新 開発者(Dev) 運⽤者(Ops) アプリケーション Gitリポジトリ CIツール SSoT Gitリポジトリ (Manifestファイル群) CDツール 2. CI動作開始 2.1. テストやビルド 2.2. ビルド成果物をPush 2.3. 更新を反映するPRを作成
  11. GitOpsのおさらい Gitを中⼼とした、k8sに特化したCI/CDの仕組み • Single Source of Truthとして、サービスの状況を1つのGitリポジトリに集約 • 関⼼の分離 (CIとCD)

    11 Docker Registry 開発者(Dev) デプロイ実⾏(PR承認) 運⽤者(Ops) アプリケーション Gitリポジトリ CIツール SSoT Gitリポジトリ (Manifestファイル群) CDツール 3. 更新(PR)を確認・承認
  12. GitOpsのおさらい Gitを中⼼とした、k8sに特化したCI/CDの仕組み • Single Source of Truthとして、サービスの状況を1つのGitリポジトリに集約 • 関⼼の分離 (CIとCD)

    12 Docker Registry 開発者(Dev) デプロイ実⾏(PR承認) 運⽤者(Ops) アプリケーション Gitリポジトリ CIツール SSoT Gitリポジトリ (Manifestファイル群) CDツール 3. 更新(PR)を確認・承認 3.1. SSoTのCIで e2eテスト
  13. GitOpsのおさらい Gitを中⼼とした、k8sに特化したCI/CDの仕組み • Single Source of Truthとして、サービスの状況を1つのGitリポジトリに集約 • 関⼼の分離 (CIとCD)

    13 Docker Registry 開発者(Dev) 運⽤者(Ops) アプリケーション Gitリポジトリ CIツール SSoT Gitリポジトリ (Manifestファイル群) CDツール 4. SSoTの更新
  14. GitOpsのおさらい Gitを中⼼とした、k8sに特化したCI/CDの仕組み • Single Source of Truthとして、サービスの状況を1つのGitリポジトリに集約 • 関⼼の分離 (CIとCD)

    14 Docker Registry 開発者(Dev) 運⽤者(Ops) アプリケーション Gitリポジトリ CIツール SSoT Gitリポジトリ (Manifestファイル群) CDツール 5. CDが更新を検知
  15. GitOpsのおさらい Gitを中⼼とした、k8sに特化したCI/CDの仕組み • Single Source of Truthとして、サービスの状況を1つのGitリポジトリに集約 • 関⼼の分離 (CIとCD)

    15 Docker Registry 開発者(Dev) 運⽤者(Ops) アプリケーション Gitリポジトリ CIツール SSoT Gitリポジトリ (Manifestファイル群) CDツール 5. CDが更新を検知 5.1. 更新を反映
  16. GitOpsのおさらい Gitを中⼼とした、k8sに特化したCI/CDの仕組み • Single Source of Truthとして、サービスの状況を1つのGitリポジトリに集約 • 関⼼の分離 (CIとCD)

    16 Docker Registry アプリの更新 デ プ ロ イ要 求 (PR作 成 ) Hook アプリイメージ更新 開発者(Dev) デプロイ実⾏(PR承認) 運⽤者(Ops) アプリケーション Gitリポジトリ CIツール SSoT Gitリポジトリ (Manifestファイル群) CDツール
  17. GitOpsのおさらい Gitを中⼼とした、k8sに特化したCI/CDの仕組み • Single Source of Truthとして、サービスの状況を1つのGitリポジトリに集約 • 関⼼の分離 (CIとCD)

    17 Docker Registry アプリの更新 デ プ ロ イ要 求 (PR作 成 ) Hook アプリイメージ更新 開発者(Dev) デプロイ実⾏(PR承認) 運⽤者(Ops) アプリケーション Gitリポジトリ CIツール SSoT Gitリポジトリ (Manifestファイル群) CDツール • アプリAを2つ • データベースAを使う • アプリBを4つ • GET /users はアプリAへ • POST /comments はアプリBへ • ロードバランサが必要
  18. GitOpsのおさらい Gitを中⼼とした、k8sに特化したCI/CDの仕組み • Single Source of Truthとして、サービスの状況を1つのGitリポジトリに集約 • 関⼼の分離 (CIとCD)

    18 Docker Registry アプリの更新 デ プ ロ イ要 求 (PR作 成 ) Hook アプリイメージ更新 開発者(Dev) デプロイ実⾏(PR承認) 運⽤者(Ops) アプリケーション Gitリポジトリ CIツール SSoT Gitリポジトリ (Manifestファイル群) CDツール • アプリAを2つ • データベースAを使う • アプリBを4つ • GET /users はアプリAへ • POST /comments はアプリBへ • ロードバランサが必要 • DB_HOST=db-a-host • DB_USER=karen • DB_PASSWORD=secret-abc
  19. 19 お気づきいただけただろうか…

  20. 20 Gitリポジトリ上に秘匿情報が 公開されてしまうことに…!

  21. ⽤語の共有 • Secret: kind: Secret のManifest • 完全な◦◦: 特にテンプレートではなく実際の値を含むManifest •

    秘匿情報: ⼀例として、パスワードの⽂字列 • SSoT: Single Source of Truth 21
  22. SealedSecretとは? bitnami-labs/sealed-secrets • GitOpsにて、Manifestファイルのうち、 Secretを暗号化してGitリポジトリで管理するための仕組み • Secretの代わりにSealedSecretというリソースを利⽤ • 秘匿情報は公開鍵で暗号化 •

    apiVersion: v1 → apiVersion: bitnami.com/v1alpha • kind: Secret → kind: SealedSecret • data.{key}: base64{val} → spec.encryptedData.{key}: enc{val} • 昨⽇(7/24)v0.8.0がリリース 22
  23. 23 使い⽅

  24. 使い⽅ 24 Secrets key:secret SealedSecrets SSoT/ ┣ deployment.yaml ┣ service.yaml

    ┗ secret.yaml ファイルツリー
  25. 使い⽅ 25 Secrets key:secret SealedSecrets key:aKelVk 暗号化 SSoT/ ┣ deployment.yaml

    ┣ service.yaml ┗ secret.yaml SSoT/ ┣ deployment.yaml ┣ service.yaml ┗ sealedsecret.yaml ファイルツリー 暗号化 1. kubesealで暗号化
  26. 使い⽅ 26 Secrets key:secret SealedSecrets key:aKelVk 暗号化 SSoT/ ┣ deployment.yaml

    ┣ service.yaml ┗ secret.yaml SSoT/ ┣ deployment.yaml ┣ service.yaml ┗ sealedsecret.yaml ファイルツリー 暗号化 1. kubesealで暗号化 apiVersion: v1 kind: Secret metadata: name: my-secret data: user: YXlh password: c2VjcmV0LXh5eg== Secret
  27. 使い⽅ 27 Secrets key:secret SealedSecrets key:aKelVk 暗号化 SSoT/ ┣ deployment.yaml

    ┣ service.yaml ┗ secret.yaml SSoT/ ┣ deployment.yaml ┣ service.yaml ┗ sealedsecret.yaml ファイルツリー 暗号化 1. kubesealで暗号化 apiVersion: bitnami.com/v1alpha kind: SealedSecret metadata: name: my-secret spec: encryptedData: user: AgCZxTv... password: AgCe0PJ... Secret SealedSecret apiVersion: v1 kind: Secret metadata: name: my-secret data: user: YXlh password: c2VjcmV0LXh5eg==
  28. 使い⽅ 28 Secrets key:secret ローカルSSoT SealedSecrets key:aKelVk Commit SSoT/ ┣

    deployment.yaml ┣ service.yaml ┗ secret.yaml SSoT/ ┣ deployment.yaml ┣ service.yaml ┗ sealedsecret.yaml ファイルツリー 2. 暗号化された SealedSecretを Gitリポジトリへ
  29. 使い⽅ 29 Secrets key:secret ローカルSSoT SealedSecrets key:aKelVk SSoT Gitリポジトリ (Manifestファイル群)

    CDツール Push(PR) 3. 暗号化された SealedSecretを SSoTにPush SealedSecrets Secrets
  30. 使い⽅ 30 CDツール Secrets SealedSecrets key:aKelVk 4. CDツールが SSoTの変更を検知。 SealedSecretを作成

    SSoT Gitリポジトリ (Manifestファイル群)
  31. 使い⽅ 31 CDツール Secrets SealedSecrets key:aKelVk 復号 key:secret 5. ⾃動的にSealedSecretが

    Secretに復号・展開される SSoT Gitリポジトリ (Manifestファイル群)
  32. 使い⽅ 32 CDツール Secrets SealedSecrets key:aKelVk key:secret 6. Podから普通に利⽤! SSoT

    Gitリポジトリ (Manifestファイル群)
  33. ポイント • Pros • とにかくシンプル! • 暗号化に使う鍵を⼀切意識しなくて良い • ⾃動的な復号 •

    Pod等からは普通のSecretとして利⽤可能 • CDツールに依存しない • k8s上で完結 • Cons • 暗号化は⼿動 • テンプレートエンジンとの相性がやや悪い (詳細後述) 33 バックアップ⽤に 取得は可能
  34. 34 インストール

  35. インストール 35 CDツール Secrets Secrets(system) 実際には applyするだけ

  36. インストール 36 CDツール Secrets SealedSecrets Secrets(system) CustomResource Definitionの SealedSecret 実際には

    applyするだけ
  37. インストール 37 CDツール Secrets SealedSecrets Secrets(system) sealed- secrets- controller CustomResource

    Definitionの SealedSecret sealed-secrets- controller 実際には applyするだけ
  38. インストール 38 CDツール Secrets SealedSecrets Secrets(system) Publickey Privatekey sealed- secrets-

    controller CustomResource Definitionの SealedSecret sealed-secrets- controller ⾃動的に⽣成 実際には applyするだけ
  39. 39 仕組み

  40. 仕組み 40 Secrets key:secret SealedSecrets CDツール SealedSecrets Secrets Secrets(system) Publickey

    Privatekey sealed- secrets- controller
  41. 仕組み 41 Secrets key:secret SealedSecrets 1. kubesealで暗号化 CDツール SealedSecrets Secrets

    Secrets(system) Publickey Privatekey 取得して暗号化に利⽤ sealed- secrets- controller
  42. 仕組み 42 Secrets key:secret SealedSecrets 1. kubesealで暗号化 CDツール SealedSecrets Secrets

    Secrets(system) Publickey Privatekey 取得して暗号化に利⽤ kubeconfigの権限を利⽤ sealed- secrets- controller
  43. 仕組み 43 Secrets key:secret SealedSecrets key:aKelVk 暗号化 1. kubesealで暗号化 CDツール

    SealedSecrets Secrets Secrets(system) Publickey Privatekey 取得して暗号化に利⽤ kubeconfigの権限を利⽤ sealed- secrets- controller
  44. 仕組み 44 Secrets key:secret ローカルSSoT SealedSecrets key:aKelVk Commit SSoT/ ┣

    deployment.yaml ┣ service.yaml ┗ secret.yaml SSoT/ ┣ deployment.yaml ┣ service.yaml ┗ sealedsecret.yaml ファイルツリー 2. 暗号化された SealedSecretを Gitリポジトリへ
  45. 仕組み 45 Secrets key:secret ローカルSSoT SealedSecrets key:aKelVk SSoT Gitリポジトリ (Manifestファイル群)

    CDツール Push(PR) 3. 暗号化された SealedSecretを SSoTにPush SealedSecrets Secrets Secrets(system) Publickey Privatekey sealed- secrets- controller
  46. 仕組み 46 CDツール Secrets 4. CDツールが SSoTの変更を検知。 SealedSecretを作成 SSoT Gitリポジトリ

    (Manifestファイル群) Secrets(system) Publickey Privatekey sealed- secrets- controller SealedSecrets key:aKelVk
  47. 仕組み 47 CDツール SSoT Gitリポジトリ (Manifestファイル群) Secrets SealedSecrets key:aKelVk Secrets(system)

    Publickey Privatekey sealed- secrets- controller 5. sealed-secrets- controllerが SealedSecretを Secretに復号・展開 取得して復号に利⽤
  48. 仕組み 48 CDツール SSoT Gitリポジトリ (Manifestファイル群) Secrets SealedSecrets key:aKelVk Secrets(system)

    Publickey Privatekey key:secret sealed- secrets- controller 5. sealed-secrets- controllerが SealedSecretを Secretに復号・展開 取得して復号に利⽤ 復号
  49. 仕組み 49 CDツール SSoT Gitリポジトリ (Manifestファイル群) Secrets SealedSecrets key:aKelVk Secrets(system)

    Publickey Privatekey key:secret sealed- secrets- controller 6. Podから普通に利⽤!
  50. 補⾜ • SealedSecretは、GitOpsでGitリポジトリに公開されてしまう SecretのManifestファイルを暗号化するための技術 • k8s上 (、etcd上)での暗号化を提供する技術ではない • k8s上で復号されたSecretは平⽂ •

    base64でエンコードされているだけ (可逆) • つまり、対象のSecretへのアクセス権限があれば⽣の秘匿情報を取得可能 • RBACで制限が必要 • Secretの実体があるetcdもデフォルトでは平⽂ • etcdをケアするには別途EncryptionConfiguration等が必要 50 重要!
  51. 実はちょっとつらい話もあります… k8sでよく使われるテンプレートエンジン • Helm • Kustomize • (R.I.P. Ksonnet) 51

  52. 実はちょっとつらい話もあります… SealedSecretとテンプレートエンジン • GitOpsでのテンプレートエンジン • 汎⽤的な「Manifestのテンプレート」と「環境別の設定ファイル」から成る • 秘匿情報は「環境別の設定ファイル」に保持 • CDツールは、これらをCD側で組み合わせて完全なManifestを作成・適⽤

    • SealedSecret振り返り • 完全なSecretを完全なSealedSecretに暗号化してGitリポジトリへ 52
  53. 実はちょっとつらい話もあります… SealedSecretとテンプレートエンジン • GitOpsでのテンプレートエンジン • 汎⽤的な「Manifestのテンプレート」と「環境別の設定ファイル」から成る • 秘匿情報は「環境別の設定ファイル」に保持 • CDツールは、これらをCD側で組み合わせて完全なManifestを作成・適⽤

    • SealedSecret振り返り • 完全なSecretを完全なSealedSecretに暗号化してGitリポジトリへ 53 user: karen password: secret-abc apiVersion: v1 kind: Secret metadata: name: my-secret data: user: {{ .Values.user | b64enc }} password: {{ .Values.password | b64enc }} ManifestTemplate 環境別設定 user: aya password: secret-xyz 開発環境⽤ 本番環境⽤
  54. 実はちょっとつらい話もあります… SealedSecretとテンプレートエンジン • GitOpsでのテンプレートエンジン • 汎⽤的な「Manifestのテンプレート」と「環境別の設定ファイル」から成る • 秘匿情報は「環境別の設定ファイル」に保持 • CDツールは、これらをCD側で組み合わせて完全なManifestを作成・適⽤

    • SealedSecret振り返り • 完全なSecretを完全なSealedSecretに暗号化してGitリポジトリへ 54 完全なManifest apiVersion: v1 kind: Secret metadata: name: my-secret data: user: YXlh password: c2VjcmV0LXh5eg==
  55. 実はちょっとつらい話もあります… SealedSecretとテンプレートエンジン • GitOpsでのテンプレートエンジン • 汎⽤的な「Manifestのテンプレート」と「環境別の設定ファイル」から成る • 秘匿情報は「環境別の設定ファイル」に保持 • CDツールは、これらをCD側で組み合わせて完全なManifestを作成・適⽤

    • SealedSecret振り返り • 完全なSecretを完全なSealedSecretに暗号化してGitリポジトリへ 55
  56. 実はちょっとつらい話もあります… SealedSecretとテンプレートエンジン • GitOpsでのテンプレートエンジン • 汎⽤的な「Manifestのテンプレート」と「環境別の設定ファイル」から成る • 秘匿情報は「環境別の設定ファイル」に保持 • CDツールは、これらをCD側で組み合わせて完全なManifestを作成・適⽤

    • SealedSecret振り返り • 完全なSecretを完全なSealedSecretに暗号化してGitリポジトリへ 56 apiVersion: bitnami.com/v1alpha kind: SealedSecret metadata: name: my-secret spec: encryptedData: user: AgCZxTv... password: AgCe0PJ... 完全なSecret 完全なSealedSecret apiVersion: v1 kind: Secret metadata: name: my-secret data: user: YXlh password: c2VjcmV0LXh5eg==
  57. 実はちょっとつらい話もあります… SealedSecretとテンプレートエンジン • GitOpsでのテンプレートエンジン • 汎⽤的な「Manifestのテンプレート」と「環境別の設定ファイル」から成る • 秘匿情報は「環境別の設定ファイル」に保持 • CDツールは、これらをCD側で組み合わせて完全なManifestを作成・適⽤

    • SealedSecret振り返り • 完全なSecretを完全なSealedSecretに暗号化してGitリポジトリへ 57
  58. 実はちょっとつらい話もあります… SealedSecretとテンプレートエンジン • GitOpsでのテンプレートエンジン • 汎⽤的な「Manifestのテンプレート」と「環境別の設定ファイル」から成る • 秘匿情報は「環境別の設定ファイル」に保持 • CDツールは、これらをCD側で組み合わせて完全なManifestを作成・適⽤

    • SealedSecret振り返り • 完全なSecretを完全なSealedSecretに暗号化してGitリポジトリへ 58 ミスマッチ
  59. 実はちょっとつらい話もあります… SealedSecretとテンプレートエンジン • Workarounds • 1.完全なSealedSecretをSSoTに含めてしまう • 2. がんばる •

    テンプレートに設定を適⽤して完全なSecretを⽣成 →kubesealで暗号化 →⽣成されたSealedSecretのうち、暗号化された秘匿情報だけ抽出 →設定ファイルの秘匿情報の部分を暗号化されたもので上書き →SSoTへCommit • 3. 対応するor待つ • bitnami-labs/sealed-secrets#95 59
  60. 60 類似ツール

  61. 類似ツール kamus • 概要 • SealedSecretに近い挙動でGitOpsに特化したツール • Secretを作らず、init-containerで復号して利⽤可能 • Pros

    • SealedSecretの利点の多くを継承 • CloudKMSを利⽤可能 • CDツールに依存しない • Cons • SealedSecretと⽐較して、鍵を意識する必要がある • 公開鍵暗号に⾮対応 • テンプレートエンジンとの相性がやや悪い (SealedSecretと同様) 61 Soluto/kamus
  62. 類似ツール kubesec • 概要 • Secretの暗号化に特化したCLIツール • Push型向き • Pros

    • CloudKMSを利⽤可能 • Cons • CDツールが未対応 (Argo CDは⼀応対応可能) • テンプレートエンジンとの相性がやや悪い (SealedSecretと同様) 62 shyiko/kubesec
  63. 類似ツール HelmSecrets (sops) • 概要 • 暗号化機能を提供するHelmプラグイン • Pros •

    テンプレートエンジンとシームレスに動作 • 暗号化した状態のファイルを直接編集可能 • CloudKMSを利⽤可能 • Cons • テンプレートエンジンがHelmに限定 • CDツールが未対応 (ArgoCDは⼀応対応可能) 63 futuresimple/helm-secrets
  64. 類似ツール Kustomize SecretGeneratorPlugins • 概要 • 暗号化機能を提供するKustomizeプラグイン • (廃⽌されかけたが復活) •

    Pros • テンプレートエンジンとシームレスに動作 • Cons • CDツールの対応がWIP • e.g., argoprd/argo-cd#1789 • テンプレートエンジンがKustomizeに限定 64 kubernetes-sig/kustomize
  65. 類似ツール Hashicorp Vault • 概要 • k8s-nativeに動作する秘匿情報集中管理ツール (GitOpsとは無関係) • Secretを作らず、init-containerで復号して利⽤可能

    • Pros • k8sに閉じない、秘匿情報の集中管理が可能 • CloudKMSを利⽤可能 • CDツールに依存しない • Cons • GitOpsとの相性 • Manifestファイルと秘匿情報がバラバラに =SSoTとならない • k8sで完結せず、Vaultサーバを管理することが必要 65 hashicorp/vault
  66. 類似ツール git-crypt • 概要 • GitPush時に特定ファイルを暗号化 • Pros • 暗号化・復号は⾃動的

    • k8sに追加モジュールが不要 • Pod等からは普通のSecretとして利⽤可能 • Cons • CDツールが未対応(ArgoCDは⼀応対応可能) • テンプレートエンジンとの相性が悪い • 完全なSecretをリポジトリに含めることが必須 • 暗号化・復号⽤の鍵の共有⽅法が提供されていない • クライアントごとにgit-cryptの設定が必要 • 暗号化されたファイルはキーすら読めない 66 AGWA/git-crypt
  67. 67 まとめ

  68. まとめ • SealedSecretとは、 「GitOpsにて、Manifestファイルのうち、 Secretを暗号化してGitリポジトリで管理するための仕組み」 • 他のツールよりシンプルに実現可能 • k8s上での暗号化はスコープ外 •

    今回はSealedSecretを中⼼に紹介したが、拘る必要はない • 要件に合わせて選択しましょう • kamusも流⾏りそう…? ご清聴ありがとうございました 68