GitopsでKubernetesのManifestをGit管理しようとした際に、Secretは暗号化されていると言ってもBase64だしどうするんだろうと思って調べた。
結論からいうと、サイボウズさんのブログをみるかぎりKubeCon19でも話題にはなっていたがまだ決定打はない模様(2020/04/06時点)
しらべたこと
SecretGenerator
現在Kustomizeを使っているのでKustomizeでSecretをどうするのかを調べたところ、 SecretGeneratorという機能があるらしい。
secretGenerator: - name: app-tls commands: tls.crt: "cat secret/tls.cert" tls.key: "cat secret/tls.key" type: "kubernetes.io/tls"
しかし調べると上記の commands
はセキュリティの理由から廃止になったらしい。
commands is removed from SecretGenerator due to a security concern. One can use files or literals, similar to ConfigMapGenerator, to generate a secret.
現在はfilesやliteralsを使えとのこと。
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization secretGenerator: # generate a tls Secret - name: app-tls files: - secret/tls.cert - secret/tls.key type: "kubernetes.io/tls" - name: env_file_secret # env is a path to a file to read lines of key=val # you can only specify one env file per secret. env: env.txt type: Opaque
しかしSecretGeneratorは結局のところ指定したファイルや環境変数などをBase64でエンコードしたSecretをKustomizeが生成してくれるだけなので、 SecretのGit管理という意味では意味をなさない。
GCPの場合
GCPで完結させるなら割とシンプルにできるっぽい。
- Cloud KMSで鍵を作る
- Cloud KMSで作った鍵を使ってデータを暗号化
- レポジトリに暗号化したデータをコミットしてPush
- Cloud Buildの実行(復号とデプロイ)
Secretとして使うファイルは復号してたあとCloud Buildの中の環境変数として取り込むっぽい
まだ調べきれてないやつ
SealedSecret
Kamus
Helm-secrets(Sopsというのを使うらしい)
色々ありすぎてまだ調べきれてないので途中までですがなんかの参考になればいいな・・・