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