Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
HashiCorp VaultとTKG(TCE)でSecretを良い感じに管理する
Search
Kazuto Kusama
June 26, 2022
Technology
1
520
HashiCorp VaultとTKG(TCE)でSecretを良い感じに管理する
ツナカン(TUNA-JP Conference) #3 で話した資料です。
Kazuto Kusama
June 26, 2022
Tweet
Share
More Decks by Kazuto Kusama
See All by Kazuto Kusama
AI時代のインシデント対応 〜時代を切り抜ける、組織アーキテクチャ〜
jacopen
4
230
AI によってシステム障害が増える!? ~AI エージェント時代だからこそ必要な、インシデントとの向き合い方~
jacopen
4
310
インシデント対応に必要となるAIの利用パターンとPagerDutyの関係
jacopen
0
220
今日からはじめるプラットフォームエンジニアリング
jacopen
8
4.2k
Platform Engineeringで クラウドの「楽しくない」を解消しよう
jacopen
8
1.4k
トラシューアニマルになろう ~開発者だからこそできる、安定したサービス作りの秘訣~
jacopen
4
5.7k
あなたの興味は信頼性?それとも生産性? SREとしてのキャリアに悩むみなさまに伝えたい選択肢
jacopen
7
11k
PaaSの歴史と、 アプリケーションプラットフォームのこれから
jacopen
7
3k
AI x インシデント管理で拡げるサービスオーナーシップ
jacopen
0
300
Other Decks in Technology
See All in Technology
法人支出管理領域におけるソフトウェアアーキテクチャに基づいたテスト戦略の実践
ogugu9
1
220
打 造 A I 驅 動 的 G i t H u b ⾃ 動 化 ⼯ 作 流 程
appleboy
0
290
Playwrightのソースコードに見る、自動テストを自動で書く技術
yusukeiwaki
13
5.3k
今からでも間に合う!速習Devin入門とその活用方法
ismk
1
670
技術以外の世界に『越境』しエンジニアとして進化を遂げる 〜Kotlinへの愛とDevHRとしての挑戦を添えて〜
subroh0508
1
430
業務のトイルをバスターせよ 〜AI時代の生存戦略〜
staka121
PRO
2
100
Ruby で作る大規模イベントネットワーク構築・運用支援システム TTDB
taketo1113
1
270
コンテキスト情報を活用し個社最適化されたAI Agentを実現する4つのポイント
kworkdev
PRO
0
530
GitHub Copilotを使いこなす 実例に学ぶAIコーディング活用術
74th
3
2.8k
20251209_WAKECareer_生成AIを活用した設計・開発プロセス
syobochim
6
1.5k
5分で知るMicrosoft Ignite
taiponrock
PRO
0
340
Kubernetes Multi-tenancy: Principles and Practices for Large Scale Internal Platforms
hhiroshell
0
120
Featured
See All Featured
Leading Effective Engineering Teams in the AI Era
addyosmani
8
1.3k
Bash Introduction
62gerente
615
210k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
Navigating Team Friction
lara
191
16k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Git: the NoSQL Database
bkeepers
PRO
432
66k
RailsConf 2023
tenderlove
30
1.3k
The Invisible Side of Design
smashingmag
302
51k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Testing 201, or: Great Expectations
jmmastey
46
7.8k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Transcript
Copyright © 2021 HashiCorp HashiCorp VaultとTKG(TCE)で Secretを良い感じに管理する
Copyright © 2021 HashiCorp 草間一人 Sr. Solutions Engineer @jacopen Kazuto
Kusama
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
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
せっかくGitOpsにしたのに Secret Secret
せっかくGitOpsにしたのに Secret Secret 間違えてgitに コミットしちゃった! あの鍵って誰が 管理してるの?
Secretのジレンマ ▪ Secretが大事なことは誰もが分かってる ▪ だから既存の自動化フローには載せず、特別対応 – 一部の人だけが手元で厳重に管理 – 権限を絞ったプライベートリポジトリで管理 –
権限を絞ったSpreadsheetで管理 ▪ しかしこの特別対応こそが、Secret Sprawlを生みセキュリティを低 下させる – 人間が把握できる範囲には限界がある – 人間はミスをする
ちゃんと管理しましょう!
こういう管理ができればいい 信頼できる シークレット 管理基盤
アイデンティティベースの シークレットと暗号化の管理システム OSSで提供されているほか、商用版のVault EnterpriseやHCP VaultというManaged Serviceも あります。
こうなる
僕たちが欲しいもの シークレットを”ちゃん と管理”できること
僕たちが欲しいもの 暗号化され安全に 管理されている 追加・削除がすぐ出 来る
僕たちが欲しいもの 誰が使っているか を特定できる 利用者ごとにポリ シーを設定出来る Admin アプリ
僕たちが欲しいもの 安全に 使える 効率的に 使える
k8sに限らず、ありとあらゆるケースで活用可能 今回はk8s+Vaultの組み合わせを中心に紹介
利用方法 or or Server ここで集中管理
利用方法 or or Server CLI GUI API Interface Client Admin
アプリ CI/CD さまざまな人/システムが、さま ざまな方法でアクセス
デプロイ方法 Helmを使ってk8sの中に セットアップ
デプロイ方法 k8sの外に建てたVaultと連携
デプロイ方法 HCP VaultだとHashiCorp ManagedなVaultが使える
認証 Otka JWT/OIDC LDAP Azure AD AWS IAM GitHub Token
etc… AppRole Kubernetes TLS Certs
シンプルな例 - KV Secrets Engine GUIもしくはCLIでVaultに値を保存 vault kv put kv/secret/path
foo=bar or GUI CLI foo=bar
Kubernetesを経由してアプリに渡す foo=bar アプリ vault-agent foo=bar foo=bar init-container or Sidecar
Kubernetesを経由してアプリに渡す Vault Agent InjectorをKubernetes 上にセットアップ。Helmでインストー ル可能 Mutating webhookでPodにInit containerやSidecarを追加してくれ る
CODE EDITOR {{- with secret "internal/data/database/config" -}} postgresql://{{ .Data.data.username }}:{{
.Data.data.password }}@postgres:5432/wizard {{- end -}}
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 -}}
TERMINAL > kubectl exec payroll --container payroll \ -- cat
/vault/secrets/database-config.txt postgresql://db-readonly-user:db-secret-password@postgres:5432/wizard Render されたTemplate
Kubernetesを経由してアプリに渡す (CSI Provider) foo=bar アプリ CSI Provider foo=bar foo=bar ボリュームとして
Podにマウント
Kubernetesを経由してアプリに渡す (CSI Provider)
Kubernetesを経由してアプリに渡す (Kubernetes External Secrets) https://github.com/external-secrets/external-secrets External Secrets Controller Secrets foo=bar
foo=bar kube-apiserver External Secrets
External Secrets Operator ▪ 前述のKubernetes External Secrets (KES)は メンテナンスモードに ▪
後継のExternal Secrets Operatorが登場 – https://github.com/external-secrets/external-secrets – Vaultにも対応 – まだ試したことないので誰か教えてください
証明書まわりの機能
PKI ルート認証局 X.509証明書 • Vault を中間認証局として設定 • 認証や暗号化通信に必要な署名済みの X.509証明書を動的に発行 X.509証明書
Signed X.509証明書 Lease Lease Application A Application B 中間認証局
PKI ルート認証局 X.509証明書 Signed Application A Application B 中間認証局 Certificates
Secret Certificates Secret
Tanzuならではの活用
こいつの扱いに困る! tanzu management-cluster create -f management.yaml
consul-template Vault上の secrets/tkg/clusters/workload から値を持ってくる それをBase64エンコードする
consul-template consul-template -template "/tmp/template.yaml:/tmp/cluster.yaml" -once
紹介しきれないので まずは触ってみて! $ vault server -dev
Thank You
[email protected]
www.hashicorp.com