とんちゃんといっしょ

Cloudに関する技術とか日常とかについて書いたり書かなかったり

KubernetesのSecret管理周りの雑調べメモ

GitopsでKubernetesのManifestをGit管理しようとした際に、Secretは暗号化されていると言ってもBase64だしどうするんだろうと思って調べた。

結論からいうと、サイボウズさんのブログをみるかぎりKubeCon19でも話題にはなっていたがまだ決定打はない模様(2020/04/06時点)

blog.cybozu.io

しらべたこと

SecretGenerator

現在Kustomizeを使っているのでKustomizeでSecretをどうするのかを調べたところ、 SecretGeneratorという機能があるらしい。

deeeet.com

secretGenerator:
- name: app-tls
  commands:
    tls.crt: "cat secret/tls.cert"
    tls.key: "cat secret/tls.key"
  type: "kubernetes.io/tls"

しかし調べると上記の commands はセキュリティの理由から廃止になったらしい。

github.com

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で完結させるなら割とシンプルにできるっぽい。

  1. Cloud KMSで鍵を作る
  2. Cloud KMSで作った鍵を使ってデータを暗号化
  3. レポジトリに暗号化したデータをコミットしてPush
  4. Cloud Buildの実行(復号とデプロイ)

qiita.com

Secretとして使うファイルは復号してたあとCloud Buildの中の環境変数として取り込むっぽい

cloud.google.com

まだ調べきれてないやつ

SealedSecret

github.com

Kamus

github.com

Helm-secrets(Sopsというのを使うらしい)

qiita.com

色々ありすぎてまだ調べきれてないので途中までですがなんかの参考になればいいな・・・