Slide 1

Slide 1 text

Vault Secrets Operator と Dynamic Secrets で 安全にシークレットを使おう Kubernetes Novice Tokyo #25 LT 2023/5/29

Slide 2

Slide 2 text

Name Taichi Nonoshita Twitter ののし @nnstt1 Company 株式会社エーピーコミュニケーションズ Love 3人の息子たち 自己紹介 めざせ Azure 資格全冠! (あと13個)

Slide 3

Slide 3 text

Kubernetes シークレットの管理はむずかしい

Slide 4

Slide 4 text

Kubernetes シークレットの管理はむずかしい そもそも

Slide 5

Slide 5 text

シークレットの管理はむずかしい 管理者 開発者 依頼 DB ユーザ作成 認証情報 ユーザ 台帳 認証情報を記録

Slide 6

Slide 6 text

シークレットの管理はむずかしい 管理者 開発者 依頼 DB ユーザ作成 認証情報 ユーザ 台帳 認証情報を記録 記録ミス 棚卸 パスワード使いまわし 退職 使われているか 不明なユーザ

Slide 7

Slide 7 text

Dynamic Secrets

Slide 8

Slide 8 text

Dynamic Secrets とは ● HashiCorp Vault の機能 ● 各種データベースやクラウドプロバイダに一時ユーザを作成 ● 有効期限 (TTL) が切れたら一時ユーザを削除 ログイン & リクエスト ユーザ作成 事前に Dynamic Secrets を設定 管理者 認証情報 DB ユーザ ユーザ削除

Slide 9

Slide 9 text

接続先データベースやユーザ作成時のクエリを設定 ● データベースプラグインを選択 ● ユーザ名とパスワードは動的に生成される シークレットエンジン 接続先データベース ユーザ作成時のクエリ(SQL Server の場合)

Slide 10

Slide 10 text

クライアントが Dynamic Secrets を使えるようにポリシーを設定 ● Dynamic Secrets はシークレットエンジンの読み込み権限があれば利用可能 ポリシー ログイン database シークレットエンジンの 参照を許可するポリシー ポリシーと紐づけ

Slide 11

Slide 11 text

Vault にログインして vault read database/creds/ を実行 ● リース情報が出力される ○ ユーザ名 & パスワード ○ 有効期間(ここでは 3 分) ○ 更新の可否 クライアントから Dynamic Secrets を利用

Slide 12

Slide 12 text

Dynamic Secrets はとても便利 Kubernetes でも Dynamic Secrets を使いたい! ● アプリケーション(コンテナ)側で Vault を使うことは意識したくない ● Kubernetes シークレット に Vault シークレットを反映してほしい ログイン & リクエスト ユーザ作成 認証情報 DB ユーザ

Slide 13

Slide 13 text

Vault Secrets Operator

Slide 14

Slide 14 text

● HashiCorp 公式の Vault シークレットを Kubernetes シークレットに 反映してくれる Operator ● 現在 (2025/5/29) のバージョンは v0.1.0-beta ● インストール方法などは Kubernetes Novice Tokyo #24 で @URyo_0213 さんが発表 された資料を参照ください。 え?なんで同じ Operator ネタなの? Vault Secrets Operator とは https://speakerdeck.com/ry/vault-secrets-operator-tutorial

Slide 15

Slide 15 text

● Vault 設定 ○ Kubernetes 認証の有効化、ロール作成 ○ シークレットエンジン (Dynamic Secrets) パスワードください Vault Secrets Operator から Dynamic Secrets を使う Kubernetes 認証 このアカウント本物? Service Account TokenReview API https://kubernetes.io/docs/reference/kubernetes-api/authentication-resources/token-review-v1/

Slide 16

Slide 16 text

● カスタムリソース ○ VaultConnection ■ Vault の接続情報 ○ VaultAuth ■ Operator が Vault を使う際の認証情報 ○ VaultDynamicSecret ■ Vault シークレットを反映させる Kubernetes シークレット ■ シークレットを使うアプリケーション Vault Secrets Operator から Dynamic Secrets を使う

Slide 17

Slide 17 text

カスタムリソースと Vault の関係 VaultConnection VaultAuth VaultDynamicSecret address vaultConnectionRef vaultAuthRef mount role rolloutRestartTargets destination method mount kubernetes role serviceAccount Kubernetes Auth kubernetes Role dynamic-role Secrets Engines database Role readonly ※一部パラメータを省略

Slide 18

Slide 18 text

● VaultDynamicSecret を起点に Vault からシークレット反映 1. カスタムリソースをチェック 2. ServiceAccount Token 発行 3. Vault に Dynamic Secrets を要求 4. データベースにユーザ作成 5. リース情報を応答 6. Kubernetes シークレットを更新 7. アプリケーションをロールアウトして シークレット反映 Vault Secrets Operator の動作 VaultDynamicSecret Vault Secrets Operator ① ③ ④ ⑤ ② ⑥ ⑦ DB ユーザ 有効期限 2023/5/29 19:10:00

Slide 19

Slide 19 text

● VaultDynamicSecret があれば Dynamic Secrets の有効期限を延長 1. カスタムリソースをチェック 2. 有効期限を更新(延長) Vault Secrets Operator の動作 VaultDynamicSecret Vault Secrets Operator ① ② DB ユーザ 有効期限 2023/5/29 19:20:00

Slide 20

Slide 20 text

● VaultDynamicSecret がなければ何もしない 1. カスタムリソースをチェック 2. Vault が DB からユーザを削除 3. Kubernetes シークレットを使ったDB アクセス不可 Vault Secrets Operator の動作 VaultDynamicSecret Vault Secrets Operator ① ② DB ユーザ 有効期限 2023/5/29 19:20:00 ③

Slide 21

Slide 21 text

まとめ ● HashiCorp Vault はいいぞ ● Dynamic Secrets はいいぞ ● Vault Secrets Operator はいいぞ