More Related Content Similar to CSI Driverを開発し自社プライベートクラウドにより適した安全なKubernetes Secrets管理を実現した話
Similar to CSI Driverを開発し自社プライベートクラウドにより適した安全なKubernetes Secrets管理を実現した話 (20) CSI Driverを開発し自社プライベートクラウドにより適した安全なKubernetes Secrets管理を実現した話1. 公開
©2022 Yahoo Japan Corporation All rights reserved.
CSI Driverを開発し
⾃社プライベートクラウドにより適した
安全なKubernetes Secrets管理を実現した話
ヤフー株式会社 Katsuya Yamaguchi
2. 公開
©2022 Yahoo Japan Corporation All rights reserved.
簡単な⾃⼰紹介
• ヤフー株式会社 ⼊社6年⽬(2017年~)
• 業務で書く、使う(⼤⼩ありますが)
o go, Java, Typescript, C/C++,…
o Terraform, Vault, OPA,…
• ⼿広くやっています
2
3. 公開
©2022 Yahoo Japan Corporation All rights reserved.
どんな仕事をしているのか
• ⼤規模なシークレット管理システム(Secrets Manager)
• シークレット取得のための社内ユーザー向けクライアントライブラリ
• 補助プロダクトの開発(Daemon, Docker container, PaaS Application)
3
社内のデータ保護に関するプロダクトの開発・保守
4. 公開
©2022 Yahoo Japan Corporation All rights reserved.
このセッションについて
この資料では以下のような略称を使います。
⚠Kubernetes -> K8s
⚠Secrets Store CSI Driver -> SSCD
⾃社K8s基盤において、より安全にシークレットの取得ができるようにSecrets
Store CSI Driverとそれと連携するProviderを開発し、プラットフォームレベル
でサポートできるようにしました
本セッションでは社内での適⽤例をベースに、具体的にどのようなことを⾏っ
たかを説明します
5. 公開
©2022 Yahoo Japan Corporation All rights reserved.
本⽇のアジェンダ
1. 弊社プライベートクラウドにおけるシークレット管理の課題
2. Secrets Store CSI Driverとは︖
3. システム概要
4. デモ
5. まとめ
5
6. ©2022 Yahoo Japan Corporation All rights reserved.
公開
弊社プライベートクラウドにおけるシークレット管理の課題
6
7. 公開
©2022 Yahoo Japan Corporation All rights reserved.
Secrets Managerとは
7
弊社プライベートクラウドにおけるシークレット管理の課題
Azure Key Vault
AWS Secrets Manager
GCP Secret Manager
パブリッククラウドでは ⾃前で構築可能
• APIキー、データベースの認証情報、OAuthトークンなどを⼀元管理
• デプロイ時や、アプリケーションの任意のタイミングでシークレットを取得
8. 公開
©2022 Yahoo Japan Corporation All rights reserved.
多数のコンピューティング基盤を持つ
弊社プライベートクラウドにおけるシークレット管理の課題
8
Secrets Manager
コンピューティング基盤
ZCP / ZAP (K8s)
IaaS
PaaS
FaaS
Pod
Server
Application
Function
連携
IAM
要件・規模によって
サーバー、アプリケーションを管理
9. 公開
©2022 Yahoo Japan Corporation All rights reserved.
ZCP, ZAPが展開するプライベートクラウド環境
9
弊社プライベートクラウドにおけるシークレット管理の課題
ZCP ZAP
ZCPをベースとしたマルチK8sのアプリケーション実
⾏基盤で、ZAP管理者がK8sクラスタを管理している
ユーザーはクラスタの管理をしなくていい
マルチテナントK8s
シングルテナントK8s
シングルテナントK8s
K8s as a Service基盤で、ユーザーに専⽤の
K8sクラスタを提供する
ユーザーはK8sクラスタの管理が必要
ZAP管理者
10. 公開
©2022 Yahoo Japan Corporation All rights reserved.
K8s環境でのシークレットの扱い⽅の選択肢
弊社プライベートクラウドにおけるシークレット管理の課題
10
社内ルールでGitOpsは推奨されていないため除外
Secrets Manager⽤のサイドカーコンテナを使う
K8s Secretリソースを使う
11. 公開
©2022 Yahoo Japan Corporation All rights reserved.
CSI Driver導⼊前の課題
弊社プライベートクラウドにおけるシークレット管理の課題
11
Secrets Manager⽤のサイドカーコンテナを使う
K8s Secretリソースを使う
o シークレットの安全性と管理
o サイドカーコンテナの扱い
o 認証情報の管理
o シークレット取得におけるユーザーの負担
12. 公開
©2022 Yahoo Japan Corporation All rights reserved.
CSI Driver導⼊前の課題
弊社プライベートクラウドにおけるシークレット管理の課題
12
Secrets Manager⽤のサイドカーコンテナを使う
K8s Secretリソースを使う
o シークレットの安全性と管理
o サイドカーコンテナの扱い
o 認証情報の管理
o シークレット取得におけるユーザーの負担
13. 公開
©2022 Yahoo Japan Corporation All rights reserved.
課題︓シークレットの安全性と管理
弊社プライベートクラウドにおけるシークレット管理の課題
13
Deploy
CI/CDパイプライン
パイプライン上で設定・管理されている
シークレット
ユーザー⾃⾝で管理するシークレット Deploy
• シークレット管理が分散する
• シークレットを⼀旦⼿元に置くなど
の危険性も⾒逃せない
シークレットをK8s Secretから
使⽤する
14. 公開
©2022 Yahoo Japan Corporation All rights reserved.
CSI Driver導⼊前の課題
弊社プライベートクラウドにおけるシークレット管理の課題
14
Secrets Manager⽤のサイドカーコンテナを使う
K8s Secretリソースを使う
o シークレットの安全性と管理
o サイドカーコンテナの扱い
o 認証情報の管理
o シークレット取得におけるユーザーの負担
15. 公開
©2022 Yahoo Japan Corporation All rights reserved.
課題︓サイドカーコンテナの扱い
弊社プライベートクラウドにおけるシークレット管理の課題
15
シークレット取得のためのサイドカーコンテナを
ユーザー⾃⾝が設定し管理しなければならない
Sidecar Container
App Container
Secrets Manager
IAM
• リソースが無駄
• トラブルシューティングが難しい
サイドカーの設定YAML
16. 公開
©2022 Yahoo Japan Corporation All rights reserved.
CSI Driver導⼊前の課題
弊社プライベートクラウドにおけるシークレット管理の課題
16
Secrets Manager⽤のサイドカーコンテナを使う
K8s Secretリソースを使う
o シークレットの安全性と管理
o サイドカーコンテナの扱い
o 認証情報の管理
o シークレット取得におけるユーザーの負担
17. 公開
©2022 Yahoo Japan Corporation All rights reserved.
課題︓認証情報の管理(認証基盤側の問題でもある)
弊社プライベートクラウドにおけるシークレット管理の課題
17
漏洩のリスクがある
Sidecar Container
App Container
Secrets Manager
IAM
シークレット取得のための
認証情報
サイドカーの設定YAML
認証情報がK8s Secretとしてデプロイ
されており管理もユーザー次第
18. 公開
©2022 Yahoo Japan Corporation All rights reserved.
CSI Driver導⼊前の課題
弊社プライベートクラウドにおけるシークレット管理の課題
18
Secrets Manager⽤のサイドカーコンテナを使う
K8s Secretリソースを使う
o シークレットの安全性と管理
o サイドカーコンテナの扱い
o 認証情報の管理
o シークレット取得におけるユーザーの負担
19. 公開
©2022 Yahoo Japan Corporation All rights reserved.
課題︓シークレット取得におけるユーザーの負担
弊社プライベートクラウドにおけるシークレット管理の課題
19
シークレットの取得が完了するまでサービスが公開されないよう
に命令的な処理を書く必要がある
導⼊の際にYAMLやサービスの修正をしなければならない
20. 公開
©2022 Yahoo Japan Corporation All rights reserved.
CSI Driver導⼊前の課題
弊社プライベートクラウドにおけるシークレット管理の課題
20
Secrets Manager⽤のサイドカーコンテナを使う
K8s Secretリソースを使う
o シークレットの安全性と管理
o サイドカーコンテナの扱い
o 認証情報の管理
o シークレット取得におけるユーザーの負担
よりプラットフォームに適したシステムが欲しい
21. 公開
©2022 Yahoo Japan Corporation All rights reserved.
具体的な実現⽅法の検討
弊社プライベートクラウドにおけるシークレット管理の課題
21
• まずは既存のプロダクトを使うことで実現できないかを探る
• ⾃前でコントローラーを実装するのは最終⼿段
22. 公開
©2022 Yahoo Japan Corporation All rights reserved.
必要とされるシステムの要件
弊社プライベートクラウドにおけるシークレット管理の課題
22
q 社内システムと連携しやすい
q 開発コストがなるべく抑えられる
q 開発・コミュニティが活発である(スター数でもいい)
q プロダクションレベルでの適⽤例がある
23. 公開
©2022 Yahoo Japan Corporation All rights reserved.
各プロダクトの⽐較
23
External Secrets
Operator
Secrets Store
CSI Driver
Sealed Secrets HashiCorp Vault
社内システムと連携しやすい
プロダクションレベルでの適⽤例
がある
スター数
開発コストがなるべく抑えられる
in-treeで開発され
ている
GAされていない 主要なパブリック
クラウドで適⽤さ
れており、GAもさ
れている
GitOps前提
のため除外
5.2k
1.4k 788 24.5k
弊社でも使ってお
り、知⾒がある
既存の機能で
対応可能
運⽤負担がある
✔
24. ©2022 Yahoo Japan Corporation All rights reserved.
公開
Secrets Store CSI Driverとは︖
24
25. 公開
©2022 Yahoo Japan Corporation All rights reserved.
Container Storage Interface(CSI)
Secrets Store CSI Driverとは︖
25
CSI Driver
VendorA storage
VendorB storage
CO (Container Orchestration)
• ストレージ利⽤のための共通のAPI仕様
• ストレージベンダーはCSIに対応したドライバを開発すれば良い
26. 公開
©2022 Yahoo Japan Corporation All rights reserved.
Secrets Store CSI Driver(SSCD)
Secrets Store CSI Driverとは︖
26
Azure Key Vault
AWS Secrets Manager
GCP Secret Manager
AWS Provider
SecretsManagerのベンダーは⾃⾝のシステムに対応したProviderを
開発することでシークレットを配布できる
GCP Provider
Azure Provider
SSCD
27. 公開
©2022 Yahoo Japan Corporation All rights reserved.
Providerの役割
Secrets Store CSI Driverとは︖
27
• 当然ながらシークレットのアクセスには認証認可は必須
• 認証基盤、SecretsManagerとの連携はProvider次第
Provider SSCD
認証基盤
Secrets Manager
Providerが外部のシステムとやり取りする
28. 公開
©2022 Yahoo Japan Corporation All rights reserved.
SSCDとProvider
Secrets Store CSI Driverとは︖
28
SSCD Provider Secrets Manager
IAM
Master Node Worker Node
• SSCD, ProviderはDaemonSetとしてデプロイ
• シークレット、認証情報がK8s内で完結、よりセキュアに運⽤できる
29. 公開
©2022 Yahoo Japan Corporation All rights reserved.
Providerが最低限満たすべきインターフェース
29
https://github.com/kubernetes-sigs/secrets-store-csi-driver/blob/main/provider/fake/fake_server.go
SSCDからマウントのリクエスト
を受け取る
• 認証処理
• シークレット取得
• ボリュームにシークレットを
書き込み
Providerの詳細情報をSSCDに返す
30. 公開
©2022 Yahoo Japan Corporation All rights reserved.
基本的な使い⽅(例︓AWS Provider)
30
SecretProviderClass
利⽤するProviderを選択
Secrets Managerに保管されている
シークレット情報を記載(複数可)
Application YAML
32. 公開
©2022 Yahoo Japan Corporation All rights reserved.
Providerの開発
システム概要
32
1. 認証基盤(Athenz)との連携 👈ここが重要
o マウント対象Podの認証情報がほしい
2. Secrets Managerとの連携
o 認証情報を使ってシークレットを取得する
33. 公開
©2022 Yahoo Japan Corporation All rights reserved.
Athenz CopperArgos
システム概要
33
• アプリケーションで利⽤できる認証情報(X.509証明書)を発⾏する
仕組み
• 弊社では多数のプラットフォーム(FaaS, CI/CD, IaaSなど)で導⼊さ
れている
• 例えばK8s環境(ZCP, ZAP)ではPod単位(= ServiceAccount)のア
クセスコントロールが可能
https://github.com/AthenZ/athenz/blob/master/docs/copper_argos.md
34. 公開
©2022 Yahoo Japan Corporation All rights reserved.
プラットフォームが異なるWorkloadでも対応できる
システム概要
34
Athenzに信頼されている
Identity Provider
Athenzと事前に登録されたIdentity Providerの
2つから許可されれば認証情報が発⾏できる
何らかの判定基準によっ
てリクエストを検証する
Identity Providerにリクエ
ストを送る
https://github.com/AthenZ/athenz/blob/master/docs/copper_argos.md
認証情報(X.509証明書)
コンピューティング基盤
ZCP / ZAP (K8s)
IaaS
PaaS
FaaS
Pod
Server
Application
Function
Identity Providerを任意の構成にできるため多数プラットフォームで対応可能
35. 公開
©2022 Yahoo Japan Corporation All rights reserved.
K8sとCopperArgos
システム概要
35
ZAP, ZCPなど
Athenzに信頼されている
Identity Provider
Athenzと事前に登録されたIdentity Providerの2つから許可されれば認証情報が発⾏できる
何らかの判定基準によっ
てリクエストを検証する
Pod(ServiceAccount)
単位の認証情報が欲しい
Identity Providerにリクエ
ストを送る
https://github.com/AthenZ/athenz/blob/master/docs/copper_argos.md
認証情報(X.509証明書)
︓リクエストの流れ
36. 公開
©2022 Yahoo Japan Corporation All rights reserved.
Providerと認証基盤の連携
システム概要
36
• kube-mgmt&OPAで構成されるIdentity Providerを⽤意(いわば認証基盤の⼀部)
• AthenzとOPAの検証結果によって認証情報を発⾏する
ZAP, ZCPなど
Athenzに信頼されている
Identity Provider
Athenzと事前に登録されたIdentity Providerの2つから許可されれば認証情報が発⾏できる
Provider
kube-mgmt&OPA
マウント対象のPod(ServiceAccount)
に対する認証情報が欲しい
リクエスト内容とK8sのリソース
状況をOPAポリシーで判断
37. 公開
©2022 Yahoo Japan Corporation All rights reserved.
Providerと認証基盤の連携
システム概要
37
IAM
Provider
• 許可しているProviderで
あるか
• Athenzから認可されて
いるか
など
• Podの確認
• ServiceAccountの確認
• Providerの確認
など
マウント対象のPod情報や
ServiceAccountToken(JWT)、
Provider⾃⾝の情報などを
Athenzにリクエストする
kube-mgmt&OPA
Identity Provider
38. 公開
©2022 Yahoo Japan Corporation All rights reserved.
Providerにマウント対象Podの認証情報発⾏するまでの流れ
38
IAM
Secrets Store CSI Driver Provider
Identity Provider
b. OK/NG
認証情報(X.509証明書)
a. Check
Athenzに信頼されているIdentity
ProviderがK8sクラスタごとに存在
システム概要
39. 公開
©2022 Yahoo Japan Corporation All rights reserved. 39
システム概要図
ZCP
シングルテナントK8s
シングルテナントK8s
ZAP
マルチテナントK8s
IAM
Secrets Manager
SSCD
Provider
Identity Provider
SSCD Provider Identity Provider
SSCD Provider Identity Provider
• 3つのコンポーネントが協調動作しCSI Driverとしての機能を果たす
• 社内K8sベースのプラットフォームへの導⼊も容易に
40. 公開
©2022 Yahoo Japan Corporation All rights reserved.
SSCDの連携のしやすさ
40
システム連携を柔軟に⾏うことができた
o 弊社の認証基盤でもその仕様に合わせてProviderを実装し実現
o 現状では「CSI Driverとして実装すべきこと」は特になし
システム概要
独⾃に認証基盤を持つような環境においてはSSCDの選択は適していると感じた
42. 公開
©2022 Yahoo Japan Corporation All rights reserved.
運⽤に関するセキュリティ対策
42
• 基本的にはSSCDのベストプラクティスに則る
o 管理コンポーネント(SSCD, Provider, Identity Provider)はkube-system以下
o クラスタ管理者(ユーザー側)でも触れず、その上位のプラットフォーム管理
者(ZCP, ZAP)しか変更できない
• Identity ProviderのOPAポリシーは認証基盤のチームとSecrets Managerのチーム双
⽅で管理
• その他特段意識しなければならないことはなし
o 現状では⾒えていない可能性も当然あるが・・・
o 検討中
43. 公開
©2022 Yahoo Japan Corporation All rights reserved.
まとめ
43
社内プライベートクラウドにSecrets Store CSI Driver(SSCD)を使った安全なシークレ
ット取得ができるようエコシステムに組み込んだ
o シークレット・認証情報ともにK8s内で完結するため、ユーザーはよりセキュア
に運⽤することができる
o SSCDを使うことでシステム連携が柔軟に⾏うことが可能
o 弊社のシステム構成ではSSCD, Provider, Identity Providerの3つがクラスタごとに
存在してCSI Driverとしての機能を果たす