GitOpsでも秘匿情報をバッチリ扱う方法、SealedSecretとは? / How to manage credentials on GitOps
by
Ryuichi Ito
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
GitOpsでも秘匿情報を バッチリ扱う⽅法、 SealedSecretとは? Ryuichi Ito (@amaya382) @Kubernetes Meetup Tokyo #21
Slide 2
Slide 2 text
GitOpsでも秘匿情報を バッチリ扱う⽅法、 SealedSecretとは? Ryuichi Ito (@amaya382) @Kubernetes Meetup Tokyo #21 刺客現る!?
Slide 3
Slide 3 text
⾃⼰紹介 • 伊藤 ⻯⼀ ( @amaya382) • さくらインターネット株式会社 技術本部 • k8s使ってます • 新規サービスのバックエンド環境として • Tellusの衛星データ処理基盤として • 好きなk8sツール: telepresence • 最近作ってるk8sツール: GitOpsでCIがPullReq作るためのアレ • 技術書典7で、「kubectlが使えるようになったところから 本番運⽤するために必要なことまとめ」の本書きます!!! 3
Slide 4
Slide 4 text
対象者とゴール 前提 • k8s・CI/CDの基本的な概念をある程度理解している 対象者 • GitOpsを本格的に利⽤するために必要なことを知りたい⼈ ゴール • SealedSecretを使うことで GitOpsでも秘匿情報を適切に扱えることを知る • どのような仕組みで実現されているか • どうすれば利⽤できるか • 類似ツールとの⽐較・使い分け 4 ⾊々あります
Slide 5
Slide 5 text
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ツール
Slide 6
Slide 6 text
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)
Slide 7
Slide 7 text
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動作開始
Slide 8
Slide 8 text
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. テストやビルド
Slide 9
Slide 9 text
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
Slide 10
Slide 10 text
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を作成
Slide 11
Slide 11 text
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)を確認・承認
Slide 12
Slide 12 text
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テスト
Slide 13
Slide 13 text
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の更新
Slide 14
Slide 14 text
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が更新を検知
Slide 15
Slide 15 text
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. 更新を反映
Slide 16
Slide 16 text
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ツール
Slide 17
Slide 17 text
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へ • ロードバランサが必要
Slide 18
Slide 18 text
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
Slide 19
Slide 19 text
19 お気づきいただけただろうか…
Slide 20
Slide 20 text
20 Gitリポジトリ上に秘匿情報が 公開されてしまうことに…!
Slide 21
Slide 21 text
⽤語の共有 • Secret: kind: Secret のManifest • 完全な○○: 特にテンプレートではなく実際の値を含むManifest • 秘匿情報: ⼀例として、パスワードの⽂字列 • SSoT: Single Source of Truth 21
Slide 22
Slide 22 text
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
Slide 23
Slide 23 text
23 使い⽅
Slide 24
Slide 24 text
使い⽅ 24 Secrets key:secret SealedSecrets SSoT/ ┣ deployment.yaml ┣ service.yaml ┗ secret.yaml ファイルツリー
Slide 25
Slide 25 text
使い⽅ 25 Secrets key:secret SealedSecrets key:aKelVk 暗号化 SSoT/ ┣ deployment.yaml ┣ service.yaml ┗ secret.yaml SSoT/ ┣ deployment.yaml ┣ service.yaml ┗ sealedsecret.yaml ファイルツリー 暗号化 1. kubesealで暗号化
Slide 26
Slide 26 text
使い⽅ 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
Slide 27
Slide 27 text
使い⽅ 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==
Slide 28
Slide 28 text
使い⽅ 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リポジトリへ
Slide 29
Slide 29 text
使い⽅ 29 Secrets key:secret ローカルSSoT SealedSecrets key:aKelVk SSoT Gitリポジトリ (Manifestファイル群) CDツール Push(PR) 3. 暗号化された SealedSecretを SSoTにPush SealedSecrets Secrets
Slide 30
Slide 30 text
使い⽅ 30 CDツール Secrets SealedSecrets key:aKelVk 4. CDツールが SSoTの変更を検知。 SealedSecretを作成 SSoT Gitリポジトリ (Manifestファイル群)
Slide 31
Slide 31 text
使い⽅ 31 CDツール Secrets SealedSecrets key:aKelVk 復号 key:secret 5. ⾃動的にSealedSecretが Secretに復号・展開される SSoT Gitリポジトリ (Manifestファイル群)
Slide 32
Slide 32 text
使い⽅ 32 CDツール Secrets SealedSecrets key:aKelVk key:secret 6. Podから普通に利⽤! SSoT Gitリポジトリ (Manifestファイル群)
Slide 33
Slide 33 text
ポイント • Pros • とにかくシンプル! • 暗号化に使う鍵を⼀切意識しなくて良い • ⾃動的な復号 • Pod等からは普通のSecretとして利⽤可能 • CDツールに依存しない • k8s上で完結 • Cons • 暗号化は⼿動 • テンプレートエンジンとの相性がやや悪い (詳細後述) 33 バックアップ⽤に 取得は可能
Slide 34
Slide 34 text
34 インストール
Slide 35
Slide 35 text
インストール 35 CDツール Secrets Secrets(system) 実際には applyするだけ
Slide 36
Slide 36 text
インストール 36 CDツール Secrets SealedSecrets Secrets(system) CustomResource Definitionの SealedSecret 実際には applyするだけ
Slide 37
Slide 37 text
インストール 37 CDツール Secrets SealedSecrets Secrets(system) sealed- secrets- controller CustomResource Definitionの SealedSecret sealed-secrets- controller 実際には applyするだけ
Slide 38
Slide 38 text
インストール 38 CDツール Secrets SealedSecrets Secrets(system) Publickey Privatekey sealed- secrets- controller CustomResource Definitionの SealedSecret sealed-secrets- controller ⾃動的に⽣成 実際には applyするだけ
Slide 39
Slide 39 text
39 仕組み
Slide 40
Slide 40 text
仕組み 40 Secrets key:secret SealedSecrets CDツール SealedSecrets Secrets Secrets(system) Publickey Privatekey sealed- secrets- controller
Slide 41
Slide 41 text
仕組み 41 Secrets key:secret SealedSecrets 1. kubesealで暗号化 CDツール SealedSecrets Secrets Secrets(system) Publickey Privatekey 取得して暗号化に利⽤ sealed- secrets- controller
Slide 42
Slide 42 text
仕組み 42 Secrets key:secret SealedSecrets 1. kubesealで暗号化 CDツール SealedSecrets Secrets Secrets(system) Publickey Privatekey 取得して暗号化に利⽤ kubeconfigの権限を利⽤ sealed- secrets- controller
Slide 43
Slide 43 text
仕組み 43 Secrets key:secret SealedSecrets key:aKelVk 暗号化 1. kubesealで暗号化 CDツール SealedSecrets Secrets Secrets(system) Publickey Privatekey 取得して暗号化に利⽤ kubeconfigの権限を利⽤ sealed- secrets- controller
Slide 44
Slide 44 text
仕組み 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リポジトリへ
Slide 45
Slide 45 text
仕組み 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
Slide 46
Slide 46 text
仕組み 46 CDツール Secrets 4. CDツールが SSoTの変更を検知。 SealedSecretを作成 SSoT Gitリポジトリ (Manifestファイル群) Secrets(system) Publickey Privatekey sealed- secrets- controller SealedSecrets key:aKelVk
Slide 47
Slide 47 text
仕組み 47 CDツール SSoT Gitリポジトリ (Manifestファイル群) Secrets SealedSecrets key:aKelVk Secrets(system) Publickey Privatekey sealed- secrets- controller 5. sealed-secrets- controllerが SealedSecretを Secretに復号・展開 取得して復号に利⽤
Slide 48
Slide 48 text
仕組み 48 CDツール SSoT Gitリポジトリ (Manifestファイル群) Secrets SealedSecrets key:aKelVk Secrets(system) Publickey Privatekey key:secret sealed- secrets- controller 5. sealed-secrets- controllerが SealedSecretを Secretに復号・展開 取得して復号に利⽤ 復号
Slide 49
Slide 49 text
仕組み 49 CDツール SSoT Gitリポジトリ (Manifestファイル群) Secrets SealedSecrets key:aKelVk Secrets(system) Publickey Privatekey key:secret sealed- secrets- controller 6. Podから普通に利⽤!
Slide 50
Slide 50 text
補⾜ • SealedSecretは、GitOpsでGitリポジトリに公開されてしまう SecretのManifestファイルを暗号化するための技術 • k8s上 (、etcd上)での暗号化を提供する技術ではない • k8s上で復号されたSecretは平⽂ • base64でエンコードされているだけ (可逆) • つまり、対象のSecretへのアクセス権限があれば⽣の秘匿情報を取得可能 • RBACで制限が必要 • Secretの実体があるetcdもデフォルトでは平⽂ • etcdをケアするには別途EncryptionConfiguration等が必要 50 重要!
Slide 51
Slide 51 text
実はちょっとつらい話もあります… k8sでよく使われるテンプレートエンジン • Helm • Kustomize • (R.I.P. Ksonnet) 51
Slide 52
Slide 52 text
実はちょっとつらい話もあります… SealedSecretとテンプレートエンジン • GitOpsでのテンプレートエンジン • 汎⽤的な「Manifestのテンプレート」と「環境別の設定ファイル」から成る • 秘匿情報は「環境別の設定ファイル」に保持 • CDツールは、これらをCD側で組み合わせて完全なManifestを作成・適⽤ • SealedSecret振り返り • 完全なSecretを完全なSealedSecretに暗号化してGitリポジトリへ 52
Slide 53
Slide 53 text
実はちょっとつらい話もあります… 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 開発環境⽤ 本番環境⽤
Slide 54
Slide 54 text
実はちょっとつらい話もあります… 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==
Slide 55
Slide 55 text
実はちょっとつらい話もあります… SealedSecretとテンプレートエンジン • GitOpsでのテンプレートエンジン • 汎⽤的な「Manifestのテンプレート」と「環境別の設定ファイル」から成る • 秘匿情報は「環境別の設定ファイル」に保持 • CDツールは、これらをCD側で組み合わせて完全なManifestを作成・適⽤ • SealedSecret振り返り • 完全なSecretを完全なSealedSecretに暗号化してGitリポジトリへ 55
Slide 56
Slide 56 text
実はちょっとつらい話もあります… 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==
Slide 57
Slide 57 text
実はちょっとつらい話もあります… SealedSecretとテンプレートエンジン • GitOpsでのテンプレートエンジン • 汎⽤的な「Manifestのテンプレート」と「環境別の設定ファイル」から成る • 秘匿情報は「環境別の設定ファイル」に保持 • CDツールは、これらをCD側で組み合わせて完全なManifestを作成・適⽤ • SealedSecret振り返り • 完全なSecretを完全なSealedSecretに暗号化してGitリポジトリへ 57
Slide 58
Slide 58 text
実はちょっとつらい話もあります… SealedSecretとテンプレートエンジン • GitOpsでのテンプレートエンジン • 汎⽤的な「Manifestのテンプレート」と「環境別の設定ファイル」から成る • 秘匿情報は「環境別の設定ファイル」に保持 • CDツールは、これらをCD側で組み合わせて完全なManifestを作成・適⽤ • SealedSecret振り返り • 完全なSecretを完全なSealedSecretに暗号化してGitリポジトリへ 58 ミスマッチ
Slide 59
Slide 59 text
実はちょっとつらい話もあります… SealedSecretとテンプレートエンジン • Workarounds • 1.完全なSealedSecretをSSoTに含めてしまう • 2. がんばる • テンプレートに設定を適⽤して完全なSecretを⽣成 →kubesealで暗号化 →⽣成されたSealedSecretのうち、暗号化された秘匿情報だけ抽出 →設定ファイルの秘匿情報の部分を暗号化されたもので上書き →SSoTへCommit • 3. 対応するor待つ • bitnami-labs/sealed-secrets#95 59
Slide 60
Slide 60 text
60 類似ツール
Slide 61
Slide 61 text
類似ツール kamus • 概要 • SealedSecretに近い挙動でGitOpsに特化したツール • Secretを作らず、init-containerで復号して利⽤可能 • Pros • SealedSecretの利点の多くを継承 • CloudKMSを利⽤可能 • CDツールに依存しない • Cons • SealedSecretと⽐較して、鍵を意識する必要がある • 公開鍵暗号に⾮対応 • テンプレートエンジンとの相性がやや悪い (SealedSecretと同様) 61 Soluto/kamus
Slide 62
Slide 62 text
類似ツール kubesec • 概要 • Secretの暗号化に特化したCLIツール • Push型向き • Pros • CloudKMSを利⽤可能 • Cons • CDツールが未対応 (Argo CDは⼀応対応可能) • テンプレートエンジンとの相性がやや悪い (SealedSecretと同様) 62 shyiko/kubesec
Slide 63
Slide 63 text
類似ツール HelmSecrets (sops) • 概要 • 暗号化機能を提供するHelmプラグイン • Pros • テンプレートエンジンとシームレスに動作 • 暗号化した状態のファイルを直接編集可能 • CloudKMSを利⽤可能 • Cons • テンプレートエンジンがHelmに限定 • CDツールが未対応 (ArgoCDは⼀応対応可能) 63 futuresimple/helm-secrets
Slide 64
Slide 64 text
類似ツール Kustomize SecretGeneratorPlugins • 概要 • 暗号化機能を提供するKustomizeプラグイン • (廃⽌されかけたが復活) • Pros • テンプレートエンジンとシームレスに動作 • Cons • CDツールの対応がWIP • e.g., argoprd/argo-cd#1789 • テンプレートエンジンがKustomizeに限定 64 kubernetes-sig/kustomize
Slide 65
Slide 65 text
類似ツール Hashicorp Vault • 概要 • k8s-nativeに動作する秘匿情報集中管理ツール (GitOpsとは無関係) • Secretを作らず、init-containerで復号して利⽤可能 • Pros • k8sに閉じない、秘匿情報の集中管理が可能 • CloudKMSを利⽤可能 • CDツールに依存しない • Cons • GitOpsとの相性 • Manifestファイルと秘匿情報がバラバラに =SSoTとならない • k8sで完結せず、Vaultサーバを管理することが必要 65 hashicorp/vault
Slide 66
Slide 66 text
類似ツール git-crypt • 概要 • GitPush時に特定ファイルを暗号化 • Pros • 暗号化・復号は⾃動的 • k8sに追加モジュールが不要 • Pod等からは普通のSecretとして利⽤可能 • Cons • CDツールが未対応(ArgoCDは⼀応対応可能) • テンプレートエンジンとの相性が悪い • 完全なSecretをリポジトリに含めることが必須 • 暗号化・復号⽤の鍵の共有⽅法が提供されていない • クライアントごとにgit-cryptの設定が必要 • 暗号化されたファイルはキーすら読めない 66 AGWA/git-crypt
Slide 67
Slide 67 text
67 まとめ
Slide 68
Slide 68 text
まとめ • SealedSecretとは、 「GitOpsにて、Manifestファイルのうち、 Secretを暗号化してGitリポジトリで管理するための仕組み」 • 他のツールよりシンプルに実現可能 • k8s上での暗号化はスコープ外 • 今回はSealedSecretを中⼼に紹介したが、拘る必要はない • 要件に合わせて選択しましょう • kamusも流⾏りそう…? ご清聴ありがとうございました 68