Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

HashiCorpのWebinarで登壇した際の資料です。
Webinar動画はこちらから!
https://www.hashicorp.com/events/webinars/how-to-get-vault-secrets-into-kubernetes-jp

Cbc297b07593321e52c75a9ebcc0f843?s=128

Kazuto Kusama

April 07, 2022
Tweet

More Decks by Kazuto Kusama

Other Decks in Technology

Transcript

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

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

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

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

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

    Access Key Username Password Secret Access Key Secret Access Key Username Password
  6. 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
  7. 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エンコードされているだけ。
  8. せっかくGitOpsにしたのに Secret Secret Deployment Service PVC ここは自動化 Secret入れるのは 手動

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

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

  11. Secretのジレンマ ▪ Secretが大事なことは誰もが分かってる ▪ だから既存の自動化フローには載せず、特別対応 – 一部の人だけが手元で厳重に管理 – 権限を絞ったプライベートリポジトリで管理 –

    権限を絞ったSpreadsheetで管理 ▪ しかしこの特別対応こそが、Secret Sprawlを生みセキュリティを低 下させる – 人間が把握できる範囲には限界がある – 人間はミスをする
  12. 解決策

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

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

  15. DEMO

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

  17. Kubernetes Auth Method

  18. Kubernetes Auth Method Service Account auth/kubernetes/login + service account token

    TokenReview API status.authenticated: true auth.client_token /v1/secret/foo Return secret
  19. やりたいこと Pod 格納 取得 どうやってVaultから 値を取得するか どうやってPodに 値を渡すか

  20. Kubernetes & Vault アプリから 直接Vault Vault agent init container Vault

    agent sidecar Vault CSI Provider External Secret 公式 コミュニティ
  21. Vault Agent Injector Vault Agent InjectorをKubernetes 上にセットアップ。Helmでインストー ル可能 Mutating webhookでPodにInit

    containerやSidecarを追加してくれ る
  22. DEMO

  23. Vault CSI Provider Kubernetes Secrets Store CSI Driver Secretを、KubernetesのCSI (Container

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

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

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

    kube-apiserver External Secrets
  27. Thank You hello@hashicorp.com www.hashicorp.com