公開
©2022 Yahoo Japan Corporation All rights reserved.
CSI Driverを開発し
⾃社プライベートクラウドにより適した
安全なKubernetes Secrets管理を実現した話
ヤフー株式会社 Katsuya Yamaguchi
公開
©2022 Yahoo Japan Corporation All rights reserved.
簡単な⾃⼰紹介
• ヤフー株式会社 ⼊社6年⽬(2017年~)
• 業務で書く、使う(⼤⼩ありますが)
o go, Java, Typescript, C/C++,…
o Terraform, Vault, OPA,…
• ⼿広くやっています
2
公開
©2022 Yahoo Japan Corporation All rights reserved.
どんな仕事をしているのか
• ⼤規模なシークレット管理システム(Secrets Manager)
• シークレット取得のための社内ユーザー向けクライアントライブラリ
• 補助プロダクトの開発(Daemon, Docker container, PaaS Application)
3
社内のデータ保護に関するプロダクトの開発・保守
公開
©2022 Yahoo Japan Corporation All rights reserved.
このセッションについて
この資料では以下のような略称を使います。
⚠Kubernetes -> K8s
⚠Secrets Store CSI Driver -> SSCD
⾃社K8s基盤において、より安全にシークレットの取得ができるようにSecrets
Store CSI Driverとそれと連携するProviderを開発し、プラットフォームレベル
でサポートできるようにしました
本セッションでは社内での適⽤例をベースに、具体的にどのようなことを⾏っ
たかを説明します
公開
©2022 Yahoo Japan Corporation All rights reserved.
本⽇のアジェンダ
1. 弊社プライベートクラウドにおけるシークレット管理の課題
2. Secrets Store CSI Driverとは︖
3. システム概要
4. デモ
5. まとめ
5
©2022 Yahoo Japan Corporation All rights reserved.
公開
弊社プライベートクラウドにおけるシークレット管理の課題
6
公開
©2022 Yahoo Japan Corporation All rights reserved.
Secrets Managerとは
7
弊社プライベートクラウドにおけるシークレット管理の課題
Azure Key Vault
AWS Secrets Manager
GCP Secret Manager
パブリッククラウドでは ⾃前で構築可能
• APIキー、データベースの認証情報、OAuthトークンなどを⼀元管理
• デプロイ時や、アプリケーションの任意のタイミングでシークレットを取得
公開
©2022 Yahoo Japan Corporation All rights reserved.
多数のコンピューティング基盤を持つ
弊社プライベートクラウドにおけるシークレット管理の課題
8
Secrets Manager
コンピューティング基盤
ZCP / ZAP (K8s)
IaaS
PaaS
FaaS
Pod
Server
Application
Function
連携
IAM
要件・規模によって
サーバー、アプリケーションを管理
公開
©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管理者
公開
©2022 Yahoo Japan Corporation All rights reserved.
K8s環境でのシークレットの扱い⽅の選択肢
弊社プライベートクラウドにおけるシークレット管理の課題
10
社内ルールでGitOpsは推奨されていないため除外
Secrets Manager⽤のサイドカーコンテナを使う
K8s Secretリソースを使う
公開
©2022 Yahoo Japan Corporation All rights reserved.
CSI Driver導⼊前の課題
弊社プライベートクラウドにおけるシークレット管理の課題
11
Secrets Manager⽤のサイドカーコンテナを使う
K8s Secretリソースを使う
o シークレットの安全性と管理
o サイドカーコンテナの扱い
o 認証情報の管理
o シークレット取得におけるユーザーの負担
公開
©2022 Yahoo Japan Corporation All rights reserved.
CSI Driver導⼊前の課題
弊社プライベートクラウドにおけるシークレット管理の課題
12
Secrets Manager⽤のサイドカーコンテナを使う
K8s Secretリソースを使う
o シークレットの安全性と管理
o サイドカーコンテナの扱い
o 認証情報の管理
o シークレット取得におけるユーザーの負担
公開
©2022 Yahoo Japan Corporation All rights reserved.
課題︓シークレットの安全性と管理
弊社プライベートクラウドにおけるシークレット管理の課題
13
Deploy
CI/CDパイプライン
パイプライン上で設定・管理されている
シークレット
ユーザー⾃⾝で管理するシークレット Deploy
• シークレット管理が分散する
• シークレットを⼀旦⼿元に置くなど
の危険性も⾒逃せない
シークレットをK8s Secretから
使⽤する
公開
©2022 Yahoo Japan Corporation All rights reserved.
CSI Driver導⼊前の課題
弊社プライベートクラウドにおけるシークレット管理の課題
14
Secrets Manager⽤のサイドカーコンテナを使う
K8s Secretリソースを使う
o シークレットの安全性と管理
o サイドカーコンテナの扱い
o 認証情報の管理
o シークレット取得におけるユーザーの負担
公開
©2022 Yahoo Japan Corporation All rights reserved.
課題︓サイドカーコンテナの扱い
弊社プライベートクラウドにおけるシークレット管理の課題
15
シークレット取得のためのサイドカーコンテナを
ユーザー⾃⾝が設定し管理しなければならない
Sidecar Container
App Container
Secrets Manager
IAM
• リソースが無駄
• トラブルシューティングが難しい
サイドカーの設定YAML
公開
©2022 Yahoo Japan Corporation All rights reserved.
CSI Driver導⼊前の課題
弊社プライベートクラウドにおけるシークレット管理の課題
16
Secrets Manager⽤のサイドカーコンテナを使う
K8s Secretリソースを使う
o シークレットの安全性と管理
o サイドカーコンテナの扱い
o 認証情報の管理
o シークレット取得におけるユーザーの負担
公開
©2022 Yahoo Japan Corporation All rights reserved.
課題︓認証情報の管理(認証基盤側の問題でもある)
弊社プライベートクラウドにおけるシークレット管理の課題
17
漏洩のリスクがある
Sidecar Container
App Container
Secrets Manager
IAM
シークレット取得のための
認証情報
サイドカーの設定YAML
認証情報がK8s Secretとしてデプロイ
されており管理もユーザー次第
公開
©2022 Yahoo Japan Corporation All rights reserved.
CSI Driver導⼊前の課題
弊社プライベートクラウドにおけるシークレット管理の課題
18
Secrets Manager⽤のサイドカーコンテナを使う
K8s Secretリソースを使う
o シークレットの安全性と管理
o サイドカーコンテナの扱い
o 認証情報の管理
o シークレット取得におけるユーザーの負担
公開
©2022 Yahoo Japan Corporation All rights reserved.
課題︓シークレット取得におけるユーザーの負担
弊社プライベートクラウドにおけるシークレット管理の課題
19
シークレットの取得が完了するまでサービスが公開されないよう
に命令的な処理を書く必要がある
導⼊の際にYAMLやサービスの修正をしなければならない
公開
©2022 Yahoo Japan Corporation All rights reserved.
CSI Driver導⼊前の課題
弊社プライベートクラウドにおけるシークレット管理の課題
20
Secrets Manager⽤のサイドカーコンテナを使う
K8s Secretリソースを使う
o シークレットの安全性と管理
o サイドカーコンテナの扱い
o 認証情報の管理
o シークレット取得におけるユーザーの負担
よりプラットフォームに適したシステムが欲しい
公開
©2022 Yahoo Japan Corporation All rights reserved.
具体的な実現⽅法の検討
弊社プライベートクラウドにおけるシークレット管理の課題
21
• まずは既存のプロダクトを使うことで実現できないかを探る
• ⾃前でコントローラーを実装するのは最終⼿段
公開
©2022 Yahoo Japan Corporation All rights reserved.
必要とされるシステムの要件
弊社プライベートクラウドにおけるシークレット管理の課題
22
q 社内システムと連携しやすい
q 開発コストがなるべく抑えられる
q 開発・コミュニティが活発である(スター数でもいい)
q プロダクションレベルでの適⽤例がある
公開
©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
弊社でも使ってお
り、知⾒がある
既存の機能で
対応可能
運⽤負担がある
✔
©2022 Yahoo Japan Corporation All rights reserved.
公開
Secrets Store CSI Driverとは︖
24
公開
©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に対応したドライバを開発すれば良い
公開
©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
公開
©2022 Yahoo Japan Corporation All rights reserved.
Providerの役割
Secrets Store CSI Driverとは︖
27
• 当然ながらシークレットのアクセスには認証認可は必須
• 認証基盤、SecretsManagerとの連携はProvider次第
Provider SSCD
認証基盤
Secrets Manager
Providerが外部のシステムとやり取りする
公開
©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内で完結、よりセキュアに運⽤できる
公開
©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に返す
公開
©2022 Yahoo Japan Corporation All rights reserved.
基本的な使い⽅(例︓AWS Provider)
30
SecretProviderClass
利⽤するProviderを選択
Secrets Managerに保管されている
シークレット情報を記載(複数可)
Application YAML
©2022 Yahoo Japan Corporation All rights reserved.
公開
システム概要
31
公開
©2022 Yahoo Japan Corporation All rights reserved.
Providerの開発
システム概要
32
1. 認証基盤(Athenz)との連携 👈ここが重要
o マウント対象Podの認証情報がほしい
2. Secrets Managerとの連携
o 認証情報を使ってシークレットを取得する
公開
©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
公開
©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を任意の構成にできるため多数プラットフォームで対応可能
公開
©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証明書)
︓リクエストの流れ
公開
©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ポリシーで判断
公開
©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
公開
©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クラスタごとに存在
システム概要
公開
©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ベースのプラットフォームへの導⼊も容易に
公開
©2022 Yahoo Japan Corporation All rights reserved.
SSCDの連携のしやすさ
40
システム連携を柔軟に⾏うことができた
o 弊社の認証基盤でもその仕様に合わせてProviderを実装し実現
o 現状では「CSI Driverとして実装すべきこと」は特になし
システム概要
独⾃に認証基盤を持つような環境においてはSSCDの選択は適していると感じた
©2022 Yahoo Japan Corporation All rights reserved.
公開
デモ
41
公開
©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 検討中
公開
©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としての機能を果たす
©2022 Yahoo Japan Corporation All rights reserved.
公開

CSI Driverを開発し自社プライベートクラウドにより適した安全なKubernetes Secrets管理を実現した話

  • 1.
    公開 ©2022 Yahoo JapanCorporation All rights reserved. CSI Driverを開発し ⾃社プライベートクラウドにより適した 安全なKubernetes Secrets管理を実現した話 ヤフー株式会社 Katsuya Yamaguchi
  • 2.
    公開 ©2022 Yahoo JapanCorporation All rights reserved. 簡単な⾃⼰紹介 • ヤフー株式会社 ⼊社6年⽬(2017年~) • 業務で書く、使う(⼤⼩ありますが) o go, Java, Typescript, C/C++,… o Terraform, Vault, OPA,… • ⼿広くやっています 2
  • 3.
    公開 ©2022 Yahoo JapanCorporation All rights reserved. どんな仕事をしているのか • ⼤規模なシークレット管理システム(Secrets Manager) • シークレット取得のための社内ユーザー向けクライアントライブラリ • 補助プロダクトの開発(Daemon, Docker container, PaaS Application) 3 社内のデータ保護に関するプロダクトの開発・保守
  • 4.
    公開 ©2022 Yahoo JapanCorporation All rights reserved. このセッションについて この資料では以下のような略称を使います。 ⚠Kubernetes -> K8s ⚠Secrets Store CSI Driver -> SSCD ⾃社K8s基盤において、より安全にシークレットの取得ができるようにSecrets Store CSI Driverとそれと連携するProviderを開発し、プラットフォームレベル でサポートできるようにしました 本セッションでは社内での適⽤例をベースに、具体的にどのようなことを⾏っ たかを説明します
  • 5.
    公開 ©2022 Yahoo JapanCorporation All rights reserved. 本⽇のアジェンダ 1. 弊社プライベートクラウドにおけるシークレット管理の課題 2. Secrets Store CSI Driverとは︖ 3. システム概要 4. デモ 5. まとめ 5
  • 6.
    ©2022 Yahoo JapanCorporation All rights reserved. 公開 弊社プライベートクラウドにおけるシークレット管理の課題 6
  • 7.
    公開 ©2022 Yahoo JapanCorporation All rights reserved. Secrets Managerとは 7 弊社プライベートクラウドにおけるシークレット管理の課題 Azure Key Vault AWS Secrets Manager GCP Secret Manager パブリッククラウドでは ⾃前で構築可能 • APIキー、データベースの認証情報、OAuthトークンなどを⼀元管理 • デプロイ時や、アプリケーションの任意のタイミングでシークレットを取得
  • 8.
    公開 ©2022 Yahoo JapanCorporation All rights reserved. 多数のコンピューティング基盤を持つ 弊社プライベートクラウドにおけるシークレット管理の課題 8 Secrets Manager コンピューティング基盤 ZCP / ZAP (K8s) IaaS PaaS FaaS Pod Server Application Function 連携 IAM 要件・規模によって サーバー、アプリケーションを管理
  • 9.
    公開 ©2022 Yahoo JapanCorporation 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 JapanCorporation All rights reserved. K8s環境でのシークレットの扱い⽅の選択肢 弊社プライベートクラウドにおけるシークレット管理の課題 10 社内ルールでGitOpsは推奨されていないため除外 Secrets Manager⽤のサイドカーコンテナを使う K8s Secretリソースを使う
  • 11.
    公開 ©2022 Yahoo JapanCorporation All rights reserved. CSI Driver導⼊前の課題 弊社プライベートクラウドにおけるシークレット管理の課題 11 Secrets Manager⽤のサイドカーコンテナを使う K8s Secretリソースを使う o シークレットの安全性と管理 o サイドカーコンテナの扱い o 認証情報の管理 o シークレット取得におけるユーザーの負担
  • 12.
    公開 ©2022 Yahoo JapanCorporation All rights reserved. CSI Driver導⼊前の課題 弊社プライベートクラウドにおけるシークレット管理の課題 12 Secrets Manager⽤のサイドカーコンテナを使う K8s Secretリソースを使う o シークレットの安全性と管理 o サイドカーコンテナの扱い o 認証情報の管理 o シークレット取得におけるユーザーの負担
  • 13.
    公開 ©2022 Yahoo JapanCorporation All rights reserved. 課題︓シークレットの安全性と管理 弊社プライベートクラウドにおけるシークレット管理の課題 13 Deploy CI/CDパイプライン パイプライン上で設定・管理されている シークレット ユーザー⾃⾝で管理するシークレット Deploy • シークレット管理が分散する • シークレットを⼀旦⼿元に置くなど の危険性も⾒逃せない シークレットをK8s Secretから 使⽤する
  • 14.
    公開 ©2022 Yahoo JapanCorporation All rights reserved. CSI Driver導⼊前の課題 弊社プライベートクラウドにおけるシークレット管理の課題 14 Secrets Manager⽤のサイドカーコンテナを使う K8s Secretリソースを使う o シークレットの安全性と管理 o サイドカーコンテナの扱い o 認証情報の管理 o シークレット取得におけるユーザーの負担
  • 15.
    公開 ©2022 Yahoo JapanCorporation All rights reserved. 課題︓サイドカーコンテナの扱い 弊社プライベートクラウドにおけるシークレット管理の課題 15 シークレット取得のためのサイドカーコンテナを ユーザー⾃⾝が設定し管理しなければならない Sidecar Container App Container Secrets Manager IAM • リソースが無駄 • トラブルシューティングが難しい サイドカーの設定YAML
  • 16.
    公開 ©2022 Yahoo JapanCorporation All rights reserved. CSI Driver導⼊前の課題 弊社プライベートクラウドにおけるシークレット管理の課題 16 Secrets Manager⽤のサイドカーコンテナを使う K8s Secretリソースを使う o シークレットの安全性と管理 o サイドカーコンテナの扱い o 認証情報の管理 o シークレット取得におけるユーザーの負担
  • 17.
    公開 ©2022 Yahoo JapanCorporation All rights reserved. 課題︓認証情報の管理(認証基盤側の問題でもある) 弊社プライベートクラウドにおけるシークレット管理の課題 17 漏洩のリスクがある Sidecar Container App Container Secrets Manager IAM シークレット取得のための 認証情報 サイドカーの設定YAML 認証情報がK8s Secretとしてデプロイ されており管理もユーザー次第
  • 18.
    公開 ©2022 Yahoo JapanCorporation All rights reserved. CSI Driver導⼊前の課題 弊社プライベートクラウドにおけるシークレット管理の課題 18 Secrets Manager⽤のサイドカーコンテナを使う K8s Secretリソースを使う o シークレットの安全性と管理 o サイドカーコンテナの扱い o 認証情報の管理 o シークレット取得におけるユーザーの負担
  • 19.
    公開 ©2022 Yahoo JapanCorporation All rights reserved. 課題︓シークレット取得におけるユーザーの負担 弊社プライベートクラウドにおけるシークレット管理の課題 19 シークレットの取得が完了するまでサービスが公開されないよう に命令的な処理を書く必要がある 導⼊の際にYAMLやサービスの修正をしなければならない
  • 20.
    公開 ©2022 Yahoo JapanCorporation All rights reserved. CSI Driver導⼊前の課題 弊社プライベートクラウドにおけるシークレット管理の課題 20 Secrets Manager⽤のサイドカーコンテナを使う K8s Secretリソースを使う o シークレットの安全性と管理 o サイドカーコンテナの扱い o 認証情報の管理 o シークレット取得におけるユーザーの負担 よりプラットフォームに適したシステムが欲しい
  • 21.
    公開 ©2022 Yahoo JapanCorporation All rights reserved. 具体的な実現⽅法の検討 弊社プライベートクラウドにおけるシークレット管理の課題 21 • まずは既存のプロダクトを使うことで実現できないかを探る • ⾃前でコントローラーを実装するのは最終⼿段
  • 22.
    公開 ©2022 Yahoo JapanCorporation All rights reserved. 必要とされるシステムの要件 弊社プライベートクラウドにおけるシークレット管理の課題 22 q 社内システムと連携しやすい q 開発コストがなるべく抑えられる q 開発・コミュニティが活発である(スター数でもいい) q プロダクションレベルでの適⽤例がある
  • 23.
    公開 ©2022 Yahoo JapanCorporation 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 JapanCorporation All rights reserved. 公開 Secrets Store CSI Driverとは︖ 24
  • 25.
    公開 ©2022 Yahoo JapanCorporation 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 JapanCorporation 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 JapanCorporation All rights reserved. Providerの役割 Secrets Store CSI Driverとは︖ 27 • 当然ながらシークレットのアクセスには認証認可は必須 • 認証基盤、SecretsManagerとの連携はProvider次第 Provider SSCD 認証基盤 Secrets Manager Providerが外部のシステムとやり取りする
  • 28.
    公開 ©2022 Yahoo JapanCorporation 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 JapanCorporation 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 JapanCorporation All rights reserved. 基本的な使い⽅(例︓AWS Provider) 30 SecretProviderClass 利⽤するProviderを選択 Secrets Managerに保管されている シークレット情報を記載(複数可) Application YAML
  • 31.
    ©2022 Yahoo JapanCorporation All rights reserved. 公開 システム概要 31
  • 32.
    公開 ©2022 Yahoo JapanCorporation All rights reserved. Providerの開発 システム概要 32 1. 認証基盤(Athenz)との連携 👈ここが重要 o マウント対象Podの認証情報がほしい 2. Secrets Managerとの連携 o 認証情報を使ってシークレットを取得する
  • 33.
    公開 ©2022 Yahoo JapanCorporation 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 JapanCorporation 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 JapanCorporation 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 JapanCorporation 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 JapanCorporation 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 JapanCorporation 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 JapanCorporation 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 JapanCorporation All rights reserved. SSCDの連携のしやすさ 40 システム連携を柔軟に⾏うことができた o 弊社の認証基盤でもその仕様に合わせてProviderを実装し実現 o 現状では「CSI Driverとして実装すべきこと」は特になし システム概要 独⾃に認証基盤を持つような環境においてはSSCDの選択は適していると感じた
  • 41.
    ©2022 Yahoo JapanCorporation All rights reserved. 公開 デモ 41
  • 42.
    公開 ©2022 Yahoo JapanCorporation 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 JapanCorporation All rights reserved. まとめ 43 社内プライベートクラウドにSecrets Store CSI Driver(SSCD)を使った安全なシークレ ット取得ができるようエコシステムに組み込んだ o シークレット・認証情報ともにK8s内で完結するため、ユーザーはよりセキュア に運⽤することができる o SSCDを使うことでシステム連携が柔軟に⾏うことが可能 o 弊社のシステム構成ではSSCD, Provider, Identity Providerの3つがクラスタごとに 存在してCSI Driverとしての機能を果たす
  • 44.
    ©2022 Yahoo JapanCorporation All rights reserved. 公開