Slide 1

Slide 1 text

Copyright © 2021 HashiCorp Vaultに格納したシークレットを Kubernetesから活用する方法

Slide 2

Slide 2 text

Copyright © 2021 HashiCorp 草間一人 Sr. Solutions Engineer @jacopen Kazuto Kusama

Slide 3

Slide 3 text

Kubernetesのシークレット管理 どうやってますか?

Slide 4

Slide 4 text

Kubernetesでアプリを作るとき Pod App Pod DB Cloud Services

Slide 5

Slide 5 text

Kubernetesでアプリを作るとき Pod App Pod DB Cloud Services Access Key Secret Access Key Username Password Secret Access Key Secret Access Key Username Password

Slide 6

Slide 6 text

KubernetesのSecret kind: Secret apiVersion: v1 data: username: YWRtaW4= password: MWYyZDFlMmU2N2Rm metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: { ... } creationTimestamp: 2016-01-22T18:41:56Z name: mysecret namespace: default resourceVersion: "164619" uid: cfee02d6-c137-11e5-8d73-42010af00002 type: Opaque

Slide 7

Slide 7 text

KubernetesのSecret kind: Secret apiVersion: v1 data: username: YWRtaW4= password: MWYyZDFlMmU2N2Rm metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: { ... } creationTimestamp: 2016-01-22T18:41:56Z name: mysecret namespace: default resourceVersion: "164619" uid: cfee02d6-c137-11e5-8d73-42010af00002 type: Opaque “admin” “1f2d1e2e67df” 取扱注意!! Base64エンコードされているだけ。

Slide 8

Slide 8 text

せっかくGitOpsにしたのに Secret Secret Deployment Service PVC ここは自動化 Secret入れるのは 手動

Slide 9

Slide 9 text

せっかくGitOpsにしたのに Secret Secret 間違えてgitに コミットしちゃった! あの鍵って誰が 管理してるの?

Slide 10

Slide 10 text

Secret sprawl バラバラに保管 アプリごと/チームごと バラバラの アクセスフロー アクセスのコント ロールができない

Slide 11

Slide 11 text

Secretのジレンマ ▪ Secretが大事なことは誰もが分かってる ▪ だから既存の自動化フローには載せず、特別対応 – 一部の人だけが手元で厳重に管理 – 権限を絞ったプライベートリポジトリで管理 – 権限を絞ったSpreadsheetで管理 ▪ しかしこの特別対応こそが、Secret Sprawlを生みセキュリティを低 下させる – 人間が把握できる範囲には限界がある – 人間はミスをする

Slide 12

Slide 12 text

解決策

Slide 13

Slide 13 text

アイデンティティベースの シークレットと暗号化の管理システム Key Valueのような静的なシークレットだけでなく、 データベースや各クラウドプロバイダーのキーを動的 に生成したり、PKIとして使えたり、SSH鍵の署名が できたり、暗号化ができたり。 どの環境でも使えますが、Kubernetesと組み合わせ ても、とても便利!

Slide 14

Slide 14 text

やりたいこと Pod 格納 取得 このフローを、安全に、手間がかからない形で実現したい

Slide 15

Slide 15 text

DEMO

Slide 16

Slide 16 text

やりたいこと Pod 格納 取得 どうやってVaultから 値を取得するか どうやってPodに 値を渡すか

Slide 17

Slide 17 text

Kubernetes Auth Method

Slide 18

Slide 18 text

Kubernetes Auth Method Service Account auth/kubernetes/login + service account token TokenReview API status.authenticated: true auth.client_token /v1/secret/foo Return secret

Slide 19

Slide 19 text

やりたいこと Pod 格納 取得 どうやってVaultから 値を取得するか どうやってPodに 値を渡すか

Slide 20

Slide 20 text

Kubernetes & Vault アプリから 直接Vault Vault agent init container Vault agent sidecar Vault CSI Provider External Secret 公式 コミュニティ

Slide 21

Slide 21 text

Vault Agent Injector Vault Agent InjectorをKubernetes 上にセットアップ。Helmでインストー ル可能 Mutating webhookでPodにInit containerやSidecarを追加してくれ る

Slide 22

Slide 22 text

DEMO

Slide 23

Slide 23 text

Vault CSI Provider Kubernetes Secrets Store CSI Driver Secretを、KubernetesのCSI (Container Storage Interface)を使っ て、ボリュームとしてPodにマウントする仕組み。 Vault CSI Provider ↑をHashiCorp Vaultで使うためのProvider Helmでインストール可能

Slide 24

Slide 24 text

DEMO

Slide 25

Slide 25 text

Sidecar or CSI? https://www.hashicorp.com/blog/ku bernetes-vault-integration-via-sidec ar-agent-injector-vs-csi-provider

Slide 26

Slide 26 text

Kubernetes External Secrets https://github.com/external-secrets/external-secrets External Secrets Controller Secrets foo=bar foo=bar kube-apiserver External Secrets

Slide 27

Slide 27 text

Thank You [email protected] www.hashicorp.com