GKE Secret 管理どうするか
#GKE #k8s #GoogleCloud
考えたやつ
やりたいこと
Secret 直入れは嫌
kustomize から参照できるようにしたい
イメージに埋めたり中から見たいだけでなく、GCP プロダクトの連携等で Secret に値が入ってる必要があることもある
手元からも CI からも manifest 適用したい
(できたら) バージョン管理したい
こうするのはどうか
秘密の情報はファイルに書いておく
Cloud KMS で暗号化したファイルをリポジトリへコミットする
GCS に置いてもいいけど
CI では Cloud Build で復号する
シークレットと認証情報の使用  |  Cloud Build のドキュメント  |  Google Cloud
手元では復号する make タスクとか用意しておいて manifest 適用前に叩く
当然復号後のファイル名は ignore しておく
kustomize では復号後のファイルを参照してリソースを作る
secretGenerator とかでファイル参照できる
複合したファイルをどっかにマウントしたいときとかも対応しやすいのではないか
要素が少ないのは良い
手作り感がある
クラスタぽいぽい作り直してもセットアップが楽、再現性がある
ただクラスタ側になにもしないから...
code:Makefile
PROJECT := your-project
GCLOUD := gcloud --project $(PROJECT)
PLAINTEXTS := \
dev/secrets/secret-text \
prd/secrets/secret-text
.PHONY: decrypt
decrypt: $(PLAINTEXTS)
%:
$(GCLOUD) kms decrypt \
--location=global \
--keyring=green \
--key=gke-secrets \
--plaintext-file=$@ \
--ciphertext-file=$(@:=.enc)
%.enc:
$(GCLOUD) kms encrypt \
--location=global \
--keyring=green \
--key=gke-secrets \
--plaintext-file=$(@:.enc=) \
--ciphertext-file=$@
External Secrets
悩みに悩んだ Kubernetes Secrets の管理方法、External Secrets を選んだ理由 | PLAID engineer blog
External Secrets は GoDaddy の公開しているプラグイン
godaddy/kubernetes-external-secrets: Integrate external secret management systems with Kubernetes
GCP & AWS の SecretManager を参照できる
よさそうだけど helm が登場する
GCP なら Config Connector でいいかなあという気持ちになる
そうか?
helm client & kubectl でも使える
https://github.com/godaddy/kubernetes-external-secrets#install-with-kubectl
Config Connector
Secret の管理のための仕組みではない
Config Connector の概要  |  Config Connector のドキュメント  |  Google Cloud
manifest から GCP リソースを作って参照できる
例えば GCS バケット作るとか Spanner インスタンス立てるとか
Terraform でも管理していると住み分けが微妙になる
manifest から各種 GCP リソースを作成・参照できる
Config Connector resources  |  Config Connector のドキュメント  |  Google Cloud
そこで SecretManagerSecret の値を Secret として参照すればよさそう
SecretManagerSecret  |  Config Connector のドキュメント  |  Google Cloud
作成は別(手動等)で参照だけできるかはよくわかってない
Secret を使用してセンシティブ データを保存  |  Config Connector のドキュメント  |  Google Cloud
Secret を更新 -> CloudSQL User のパスワードで参照、という感じで、Secret 側が 主なのが気になる
外部参照 - リソース参照の作成  |  Config Connector のドキュメント  |  Google Cloud
参照だけするのはこれ
SecretManager では projects/{{project}}/secrets/{{secret_id}} で参照できそう?
なんか違いそうだな
良さそうだけど、初手 GKE アドオンインストール & Workload Identity、ハマったらめっちゃ困りそうというのが気になる
とはいえ Ingress で Load Balancing 立てるのとどの程度違うのかと言われるとまあそんなもんという気もする
試してみたいがめんどくさい
もっとGCPが使いやすくなる!? GKE Config Connectorを試してみた! | by Yutty Kawahara | google-cloud-jp | Medium
berglas
GoogleCloudPlatform/berglas: A tool for managing secrets on Google Cloud
berglas/examples/kubernetes at main · GoogleCloudPlatform/berglas
berglas/examples/kubernetes at main · GoogleCloudPlatform/berglas
Cloud KMS で暗号化した鍵を GCS に置く
Cloud Function に mutating webhook を置いて manifest 適用時に叩く
Mutating Webhook - Using Admission Controllers | Kubernetes
Init Container
manifest から参照しないなら Init コンテナで secret を取ってくる手もある
アプリケーション内から Secret Manager 叩くのと雰囲気や用途は近いが Pod 起動時に処理を挟めるのでコンテナと疎結合になる
Initコンテナ | Kubernetes
secrets-store-csi-driver
kubernetes-sigs/secrets-store-csi-driver: Secrets Store CSI driver for Kubernetes secrets - Integrates secrets stores with Kubernetes via a CSI volume.
kubernetes sigs のやつ