Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
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
360
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
Grafana x PagerDuty Better Together
jacopen
1
360
「共通基盤」を超えよ! 今、Platform Engineeringに取り組むべき理由
jacopen
26
6.8k
いろんな外資、いろんなロールで働いてみた話
jacopen
14
4.7k
サービスの危機に立ち向かうリーダーシップ~インシデントコマンダーの役割と戦略~
jacopen
20
6.2k
5分でわかる(かもしれない)Platform Engineering
jacopen
4
790
ChatOpsで回す、クラウドネイティブな組織運営
jacopen
1
200
2024年のPlatform Engineeringはこうなる(なってほしい)
jacopen
7
3.7k
技術の洪水に立ち向かう: 開発者の心を軽くするプラットフォームエンジニアリングの話
jacopen
12
6.4k
プラットフォーム名決めるのも、ロゴ作るのも、プラットフォームチームの仕事です
jacopen
3
200
Other Decks in Technology
See All in Technology
M5stackで使用できるpHセンサの開発
shinrinakamura
1
300
Rustで「プリズモイダル法」を利用して「土量計算」をガチでやる
nokonoko1203
1
380
TiDBにおけるテーブル設計と最適化の事例
cygames
0
740
【TSkaigi】2024/05/11 当日スライド
kimitashoichi
13
3.7k
B2C、B2B プロダクトマネジメントの違い(および思考の罠) / B2C, B2B PM and reduction fallacy
ykmc09
4
500
Autonomous Database Cloud 技術詳細 / adb-s_technical_detail_jp
oracle4engineer
PRO
15
36k
データ基盤を支える技術
chanyou0311
5
2.9k
Taking Flight with Tailwind CSS
opdavies
0
4.3k
Amplify 🩷 Bedrock 〜生成AI入門〜
minorun365
PRO
10
1.2k
シンプルなHITL機械学習と様々なタスクにおけるHITL機械学習
naohachi89
0
300
データ分析力を高めるSQL研修サービス『SQL Everyone』
hikarut
1
350
RailsConf 2024 Keynote "Startups on Rails in 2024"
irinanazarova
0
530
Featured
See All Featured
We Have a Design System, Now What?
morganepeng
43
6.8k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
14
1.5k
Fireside Chat
paigeccino
22
2.7k
The Power of CSS Pseudo Elements
geoffreycrofte
62
5k
Large-scale JavaScript Application Architecture
addyosmani
504
110k
Building a Modern Day E-commerce SEO Strategy
aleyda
22
6.4k
What the flash - Photography Introduction
edds
64
11k
4 Signs Your Business is Dying
shpigford
176
21k
Build your cross-platform service in a week with App Engine
jlugia
226
17k
No one is an island. Learnings from fostering a developers community.
thoeni
16
2.1k
Design by the Numbers
sachag
274
18k
For a Future-Friendly Web
brad_frost
172
9k
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