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

HashiCorp VaultとTKG(TCE)でSecretを良い感じに管理する

HashiCorp VaultとTKG(TCE)でSecretを良い感じに管理する

ツナカン(TUNA-JP Conference) #3 で話した資料です。

Cbc297b07593321e52c75a9ebcc0f843?s=128

Kazuto Kusama

June 26, 2022
Tweet

More Decks by Kazuto Kusama

Other Decks in Technology

Transcript

  1. Copyright © 2021 HashiCorp HashiCorp VaultとTKG(TCE)で Secretを良い感じに管理する

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

    Kusama
  3. 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
  4. 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エンコードされているだけ。Git等に入れるのはNG
  5. せっかくGitOpsにしたのに Secret Secret

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

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

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

  9. こういう管理ができればいい 信頼できる シークレット 管理基盤

  10. アイデンティティベースの シークレットと暗号化の管理システム OSSで提供されているほか、商用版のVault EnterpriseやHCP VaultというManaged Serviceも あります。

  11. こうなる

  12. 僕たちが欲しいもの シークレットを”ちゃん と管理”できること

  13. 僕たちが欲しいもの 暗号化され安全に 管理されている 追加・削除がすぐ出 来る

  14. 僕たちが欲しいもの 誰が使っているか を特定できる 利用者ごとにポリ シーを設定出来る Admin アプリ

  15. 僕たちが欲しいもの 安全に 使える 効率的に 使える

  16. k8sに限らず、ありとあらゆるケースで活用可能 今回はk8s+Vaultの組み合わせを中心に紹介

  17. 利用方法 or or Server ここで集中管理

  18. 利用方法 or or Server CLI GUI API Interface Client Admin

    アプリ CI/CD さまざまな人/システムが、さま ざまな方法でアクセス
  19. デプロイ方法 Helmを使ってk8sの中に セットアップ

  20. デプロイ方法 k8sの外に建てたVaultと連携

  21. デプロイ方法 HCP VaultだとHashiCorp ManagedなVaultが使える

  22. 認証 Otka JWT/OIDC LDAP Azure AD AWS IAM GitHub Token

    etc… AppRole Kubernetes TLS Certs
  23. シンプルな例 - KV Secrets Engine GUIもしくはCLIでVaultに値を保存 vault kv put kv/secret/path

    foo=bar or GUI CLI foo=bar
  24. Kubernetesを経由してアプリに渡す foo=bar アプリ vault-agent foo=bar foo=bar init-container or Sidecar

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

  26. CODE EDITOR {{- with secret "internal/data/database/config" -}} postgresql://{{ .Data.data.username }}:{{

    .Data.data.password }}@postgres:5432/wizard {{- end -}}
  27. CODE EDITOR spec: template: metadata: annotations: vault.hashicorp.com/agent-inject: "true" vault.hashicorp.com/agent-inject-status: "update"

    vault.hashicorp.com/role: "internal-app" vault.hashicorp.com/agent-inject-secret-database-config.txt: "internal/data/database/config" vault.hashicorp.com/agent-inject-template-database-config.txt: | {{- with secret "internal/data/database/config" -}} postgresql://{{ .Data.data.username }}:{{ .Data.data.password }}@postgres:5432/wizard {{- end -}}
  28. TERMINAL > kubectl exec payroll --container payroll \ -- cat

    /vault/secrets/database-config.txt postgresql://db-readonly-user:db-secret-password@postgres:5432/wizard Render されたTemplate
  29. Kubernetesを経由してアプリに渡す (CSI Provider) foo=bar アプリ CSI Provider foo=bar foo=bar ボリュームとして

    Podにマウント
  30. Kubernetesを経由してアプリに渡す (CSI Provider)

  31. Kubernetesを経由してアプリに渡す (Kubernetes External Secrets) https://github.com/external-secrets/external-secrets External Secrets Controller Secrets foo=bar

    foo=bar kube-apiserver External Secrets
  32. External Secrets Operator ▪ 前述のKubernetes External Secrets (KES)は メンテナンスモードに ▪

    後継のExternal Secrets Operatorが登場 – https://github.com/external-secrets/external-secrets – Vaultにも対応 – まだ試したことないので誰か教えてください
  33. 証明書まわりの機能

  34. PKI ルート認証局 X.509証明書 • Vault を中間認証局として設定 • 認証や暗号化通信に必要な署名済みの X.509証明書を動的に発行 X.509証明書

    Signed X.509証明書 Lease Lease Application A Application B 中間認証局
  35. PKI ルート認証局 X.509証明書 Signed Application A Application B 中間認証局 Certificates

    Secret Certificates Secret
  36. Tanzuならではの活用

  37. こいつの扱いに困る! tanzu management-cluster create -f management.yaml

  38. consul-template Vault上の secrets/tkg/clusters/workload から値を持ってくる それをBase64エンコードする

  39. consul-template consul-template -template "/tmp/template.yaml:/tmp/cluster.yaml" -once

  40. 紹介しきれないので まずは触ってみて! $ vault server -dev

  41. Thank You hello@hashicorp.com www.hashicorp.com