5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ZOZOAdvent Calendar 2024

Day 6

Google CloudのSecrets Store CSI Driverを使ってみたらなんかちょっとハマった件

Last updated at Posted at 2024-12-06

この辺りあまり日本語記事を見かけなかったので備忘録がてら残しておきます。
あくまでも投稿日時点(2024/12/06)の話だということを念頭においていただけますと幸いです。

TL;DR

背景

あまり詳しくは言えないのですが、最近業務でGoogle Secret Managerに置いたSecretをGKE clusterのPod内に環境変数として展開したいと思うことがありました。なんとなくよくあるニーズな気もします。

KubernetesにおけるSecretの扱いに関しては偉大な先人らが残してくださった多くの比較記事があるので、ここでは割愛します。ZOZOでも比較記事が出てますので、よろしければこちらもご覧ください。

何やかんやでGoogle公式ドキュメントに書かれているという主理由により、今回はSecrets Store CSI Driverを使うことになりました。

Secrets Store CSI Driverについて

Secrets Store CSI Driver(以降長いのでSSCDとします)とは、Kubernetes clusterと外部のSecret Store(Google Secret Manager やAWS Secret Manager等)を連携するためのCSI Driverの一種です。

以下の公式ドキュメントによると、どうやらPod起動時にgRPCを利用して外部のSecret Storeと通信し、volumeに書き込まれたsecretをtmpfsとしてPodにmountし、Pod内から参照できるようにするのがコンセプトみたいです。

tmpfsを介してsecretをやりとりする都合上、Podが削除されたタイミングでsecretもnode上から削除される為、少なからず漏洩リスクについても考えられている手法と言えるのではないでしょうか。

実はGoogleがサポートしているCSI Driverは2つあります。(ここに気づくのが遅かった...)

  • secrets-store-csi-driver-provider-gcp
    • おそらくSSCD公式からリンクで行き着く先です
    • providerがgcpになっています
    • alpha版ではありますが、secretのAuto RotationとKubernetes Secretとの同期がサポートされているみたいです
    • Kubernetes Secretを介した環境変数化もできそう
      • 公式での例がないのでこの辺分かりづらいですが、このissueを参考に書くと良さそうに思います
  • Secret Manager add-on with Google Kubernetes Engine
    • こちらがGoogle公式ドキュメントにあるやり方です
    • よく見るとproviderがgcpではなく、gkeになっています
    • 現状まだsecretのAuto RotationとKubernetes Secretとの同期はサポートされていません

個人的にKubernetes Secretを介して環境変数とするのが、コード管理的に楽そうだったので、一つ目を検討していました。

実際にインストールしてみる

素直に公式の手順に則ってインストールしてみます。
すると、helm installあたりで弾かれます。

$ helm install csi-secrets-store secrets-store-csi-driver/secrets-store-csi-driver --namespace kube-system
Error: INSTALLATION FAILED: create: failed to create: secrets is forbidden: User
"xxx" cannot create resource "secrets" in API group "" in the 
namespace "kube-system": GKE Warden authz [denied by managed-namespaces-limitation]: 
the namespace "kube-system" is managed and the request's verb "create" is denied

Autopilot clusterの制約

どうやらAutopilot clusterでは、公式のSSCDは入らないみたいでした。
CSI DriverにはPrivileged pod(特権コンテナ)での実行とhostPathの許可が必要らしく、GKE Wardenという名のAutopilot組み込みのセキュリティに弾かれるみたいです。

詳しくは下記をご参照ください。

The Secrets Store CSI Driver daemonset runs as root in a privileged pod. This is because the daemonset is responsible for creating new tmpfs filesystems and mounting them into existing pod filesystems within the node’s hostPath.

ref. https://secrets-store-csi-driver.sigs.k8s.io/concepts#security

issueが起票されていた...

下記のやり取りを見る感じ、結局のところGoogle CloudでSSCDを使っていくなら、Secret Manager Add-onを使っていくのが無難そうに個人的には思っています。既存のSSCDとAutopilotの互換性を維持するために生まれたのがAdd-on版っぽい(?)

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?