$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
HashiCorp Vaultを用いたEncryption as a Service のご紹介
Search
tadashi
February 20, 2022
Technology
0
1.3k
HashiCorp Vaultを用いたEncryption as a Service のご紹介
Cloud Native Storage Meetup #2 でお話させて頂いた際に使用した資料です。
tadashi
February 20, 2022
Tweet
Share
More Decks by tadashi
See All by tadashi
ClusterAPI を使ってKubernetes のライフサイクルを管理しよう
tadashi777
0
520
Other Decks in Technology
See All in Technology
あなたの知らないDateのひみつ / The Secret of "Date" You Haven't known #tqrk16
expajp
0
110
私も懇親会は苦手でした ~苦手だからこそ懇親会を楽しむ方法~ / 20251127 Masaki Okuda
shift_evolve
PRO
4
560
一億総業務改善を支える社内AIエージェント基盤の要諦
yukukotani
8
2.8k
事業部のプロジェクト進行と開発チームの改善の “時間軸" のすり合わせ
konifar
9
3k
MS Ignite 2025で発表されたFoundry IQをRecap
satodayo
3
230
翻訳・対話・越境で強いチームワークを作ろう! / Building Strong Teamwork through Interpretation, Dialogue, and Border-Crossing
ar_tama
4
1.6k
freeeにおけるファンクションを超えた一気通貫でのAI活用
jaxx2104
3
730
Ryzen NPUにおけるAI Engineプログラミング
anjn
0
220
法人支出管理領域におけるソフトウェアアーキテクチャに基づいたテスト戦略の実践
ogugu9
1
130
会社紹介資料 / Sansan Company Profile
sansan33
PRO
11
390k
Oracle Cloud Infrastructure:2025年11月度サービス・アップデート
oracle4engineer
PRO
1
120
Agents IA : la nouvelle frontière des LLMs (Tech.Rocks Summit 2025)
glaforge
0
390
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
303
21k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.8k
Documentation Writing (for coders)
carmenintech
76
5.2k
Building an army of robots
kneath
306
46k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
1k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.5k
How to train your dragon (web standard)
notwaldorf
97
6.4k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
GitHub's CSS Performance
jonrohan
1032
470k
Transcript
Copyright © 2022 HashiCorp 2/18/2022 HashiCorp Vault を用いた Encryption as
a Service のご紹介 Cloud Native Storage Meetup #2 Solutions Engineer Tadashi Ito (伊藤 忠司)
自己紹介 • Tadashi Ito(伊藤 忠司) / Itochu • Solutions Engineer
• LinkedIn: https://www.linkedin.com/in/tadashii-itochu/
DevSecOps, September 2021 @CNCF DevSecOps, September 2021 https://radar.cncf.io/
DevSecOps, September 2021 @CNCF DevSecOps, September 2021 https://radar.cncf.io/
良く使われているコンテナイメージ NGINX, Redis, and Postgres are the most popular container
images
良く使われているコンテナイメージ NGINX, Redis, and Postgres are the most popular container
images StatefulSet リソースとして良く使われたコンテナイメージ
Vault Secrets management クラウドやアプリケーションを跨り、シークレットを一元的に管理します Data encryption 環境やワークロードを跨いで、アプリケーションデータを安全に保ちます Advanced Data Protection
従来のシステムやクラウドにまたがるワークロードとデータを保護します 475+ Enterprise Customers 1M+ Monthly D/Ls 2T+ Transactions 信頼できるアイデンティティを活用し、クラウド運用モデルにお けるシークレットやアプリケーションデータを安全に保つクラウ ドセキュリティ自働化の基盤を提供します。 Our customers https://www.hashicorp.com/case-studies
Vault デプロイメントパターン Self-Managed Vault HashiCorp Managed Vault Vault on any
cloud Vault on any K8s Vault on HCP
Vault 利用方法 or Server CLI GUI API Interface Client ヒト
アプリ CI/CD Self-Managed HashiCorp Managed
Vault ワークフロー 信頼できるアイデンティに対し、シークレットを提供 クライアント 認証 アイデンティティによるアク セス シークレットエンジン ポリシーに基づいた シークレット管理
信頼できる認証基盤との連携 クライアント シークレットエンジン ポリシーに基づいた シークレット管理 信頼できる認証基盤で認証 Authentication Auth Method 認証
アイデンティティによるアク セス
Vault 認証メソッド • Human ◦ LDAP / Radius / Okta
/ OpenID Connect ◦ GitHub / OAuth ◦ Username & Password • Machine (Apps/CI) ◦ パブリッククラウド認証: AWS / Azure / GCP / Oracle / AliCloud ◦ TLS 証明書 ◦ AppRole ◦ Kubernetes ◦ Cloud Foundry 認証=Vault に対する権限付きのトークンを取得するための手法
トークンの取得 クライアント 信頼できる認証基盤で認証 Authentication トークン ポリシー • シークレットエンジンへのアクセス • API
エンドポイントへのアクセス Time To Lived アプリケーションやシステムへのア クセスを認可 Authorization シークレットエンジン ポリシーに基づいた シークレット管理 Auth Method 認証 アイデンティティによるアク セス
Vault 認証フロー クライアント ヒト CI/CD アプリ LDAP Auth Vault トークン
$ curl --request POST \ http://127.0.0.1:8200/v1/auth/ldap/login $ vault login -method=ldap -path=ldap LDAP サーバー $ vault policy write app1 05_app1_policy.hcl $ vault write auth/ldap/groups/app1 policies=app1 Vault 管理者 # Policy for App1 people path "mysql-server/creds/app1-role" { capabilities = [ "read" ] } $ vault policy read app1 Vault ポリシー
Vault 認証フロー CI/CD アプリ Vault トークン $ curl --request POST
\ http://127.0.0.1:8200/v1/auth/ldap/login $ vault policy write app1 05_app1_policy.hcl $ vault write auth/ldap/groups/app1 policies=app1 Vault 管理者 # Policy for App1 people path "mysql-server/creds/app1-role" { capabilities = [ "read" ] } $ vault policy read app1 Vault ポリシー ヒト $ vault login -method=ldap -path=ldap LDAP Auth クライアント LDAP サーバー
$ vault login -method=ldap -path=ldap LDAP Auth LDAP サーバー Vault
認証フロー CI/CD アプリ Vault トークン $ curl --request POST \ http://127.0.0.1:8200/v1/auth/ldap/login ヒト クライアント $ vault policy write app1 05_app1_policy.hcl $ vault write auth/ldap/groups/app1 policies=app1 Vault 管理者 # Policy for App1 people path "mysql-server/creds/app1-role" { capabilities = [ "read" ] } $ vault policy read app1 Vault ポリシー
LDAP サーバー LDAP Auth Vault 認証フロー CI/CD アプリ $ curl
--request POST \ http://127.0.0.1:8200/v1/auth/ldap/login $ vault policy write app1 05_app1_policy.hcl $ vault write auth/ldap/groups/app1 policies=app1 Vault 管理者 # Policy for App1 people path "mysql-server/creds/app1-role" { capabilities = [ "read" ] } $ vault policy read app1 Vault ポリシー ヒト $ vault login -method=ldap -path=ldap クライアント Vault トークン
トークンの取得 Key Value --- ----- token s.a7sUfcVtZr4RMWmm7jrG0PIS token_accessor EV8mLJQ9jEkzX5z5GWlroRJz token_duration
1h token_renewable true token_policies ["app1" "default"] identity_policies [] policies ["app1" "default"] token_meta_username giorno トークン レスポンスされたトークンの値 トークンを利用し、Vault API をコールする 発行されたトークンの生存期間 (Time-To-Lived) トークンに付与されたポリシー ポリシーはパスに対し許可する操作を記載した形 で定義される # Policy for App1 people path "mysql-server/creds/app1-role" { capabilities = [ "read" ] } $ vault policy read app1
シークレットのリクエスト クライアント 信頼できる認証基盤で認証 Authentication トークン ポリシー • シークレットエンジンへのアクセス • API
エンドポイントへのアクセス Time To Lived アプリケーションやシステムへのア クセスを認可 Authorization シークレットエンジン ポリシーに基づいた シークレット管理 Auth Method Secrets Engines 認証 アイデンティティによるアク セス
シークレットの取得 クライアント 信頼できる認証基盤で認証 Authentication トークン ポリシー • シークレットエンジンへのアクセス • API
エンドポイントへのアクセス Time To Lived アプリケーションやシステムへのア クセスを認可 Authorization シークレット シークレットエンジン ポリシーに基づいた シークレット管理 Secrets & Encryption • 動的シークレット • 静的シークレット • 暗号化サービス Secrets Engines Auth Method 認証 アイデンティティによるアク セス
動的シークレット 静的シークレット 暗号化 Vault シークレットエンジン • パブリッククラウド (AWS, Azure, GCP
etc)へア クセスするためのキー • データベース (MySQL, PostgreSQL etc)など のミドルウェアのパスワード • X.509 証明書 • SSHパスワード、公開鍵認証用証明書 • Active Directory / OpenLDAPのユーザパス ワード • Terraform Enterprise / Cloud APIトークン • 既存のパスワード、 APIトークンなど汎用的な データ • 個人情報等の暗号化 / トークナイゼーション Secrets Engines シークレットエンジン ポリシーに基づいた シークレット管理
動的シークレット クライアント Key Value --- ----- lease_id aws/sts/ec2-admin/KN8Xk... lease_duration 1h
lease_renewable false access_key ASIAQWO6FK2... secret_key 3070VHhjHNKv... security_token FwoGZXIvYXdzEEgaD... Key Value --- ----- lease_id azure/creds/sp_role/1afd096... lease_duration 1h lease_renewable true client_id 408bf248-dd4e-4be5-919a-... client_secret ad06228a-2db9-4e0a-8a5d-... Key Value --- ----- lease_id gcp/key/my-key-roleset/ce56... lease_duration 30m lease_renewable true key_algorithm KEY_ALG_RSA_2048 key_type TYPE_GOOGLE_CREDENTIALS_FILE private_key_data ewogICJ0eXBlIjogInNlcnZp... Key Value --- ----- lease_id database/creds/my-role/2f6a... lease_duration 1h lease_renewable true password wJKpk9kg-T1Ma7qQfS8y username v-vaultuser-my-role-r7kCt... …
Vault パスベースの管理 / / …
Vault パスベースの管理 / / … シークレットエンジンや認証メソッドを有効化する際に、トップのパス名を指定する $ vault secrets enable
-path=aws aws Success! Enabled the aws secrets engine at: aws/ $ vault secrets enable database Success! Enabled the aws secrets engine at: database/ AWS シークレットエンジンの有効化 データベースシークレットエンジンの有効化 $ vault auth enable -path=ldap ldap Success! Enabled ldap auth method at: ldap/ LDAP 認証メソッドの有効化 $ vault auth enable kubernetes Success! Enabled ldap auth method at: kubernetes/ Kubernetes 認証メソッドの有効化
データベースシークレットエンジン PKI シークレットエンジン KV ストア 暗号化シークレットエンジン パブリッククラウドシークレットエンジン
バックエンドの設定 (AWS シークレットエンジンの場合) / / aws config root バックエンドを有効化したパス名に対して、設定を行っていく $
vault write aws/config/root \ access_key=$AWS_ACCESS_KEY_ID \ secret_key=$AWS_SECRET_ACCESS_KEY \ region=ap-northeast-1 Success! Data written to: aws/config/root 設定したクレデンシャルを利用し、バックエンドと Vault がやりとりを実施 AWS
Vault ロールの設定 (AWS シークレットエンジンの場合) / / aws roles my-role •
バックエンドを有効化したパス名に対 して、Vault ロールを設定 • 設定するVault ロール名は、任意の 名前を指定可能 $ vault write aws/roles/my-role \ credential_type=iam_user \ policy_document=-<<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:*", "Resource": "*" } ] } EOF Success! Data written to: aws/roles/my-role Vault ロールは、AWS のポリシードキュメントと紐付 け、設定を行う Vault を介して生成するクレデンシャルに付与する権 限をVault ロール(my-role)として定義 “my-role” のクレデンシャルをVault にリクエストすると、 Vault ロールで定義したIAM ポリシーを付与し、IAM ユーザーを作成 AWS
シークレット発行 (AWS シークレットエンジンの場合) / / aws creds my-role $ vault
read aws/creds/my-role Key Value --- ----- lease_id aws/creds/my-role/0bce0782-32aa-25ec-f61d-c026ff22106e lease_duration 1h lease_renewable true access_key AKIAJELUDIANQGRXCTZQ secret_key WWeSnj0xx0hHo9jdCR7… security_token <nil> Vault ロール “my-role” に紐付いたAWS のシークレットを発行 AWS
従来型の暗号化との違い • アプリで暗号化、キー管理 • キーの運用が煩雑 ◦ ローテーション ◦ 新しいキーでの再暗号化 •
既存システムへの影響 • API Driven Encryption • Vault がキーを運用 ◦ 生成とローテーション ◦ 再暗号化 • 選択可能な暗号化パターン 暗号化の手法や品質が開発者に依存、 キーの管理コストが高い、 もしくはそもそも管理されていない API ドリブンな安全で高品質な暗号化、 キーのライフサイクル管理を Vault に委託 従来の運用 Vault によるクラウド時代の暗号化
Vault が対応する暗号化パターン ciphertext: 1098-7654-3210-9876 ciphertext: vault:v1:cZNHVx+sxdMEr XRSuDa1q/pz49fXTn1PSc Kfhf+PIZPvy8xKfkytpwKc bC0fF2U= Encode
card number: 1234-5678-9012-3456 Transit 一般的な暗号化パターン (2 ways) Transform Format-Preserving Encryption (FPE) データのサイズやタイプを保持 したまま暗号化(2 ways) tokenized text: Q4tYgFXHxUbU5XZoQ sxusAzxhNyVWmCFW xAT8SGkHoYB3VkrmQ GXVR Encode card number: 1234-5678-9012-3456 Transform Tokenization 外部から不可逆的なデータに トークン化したいとき (2 ways) Encode card number: 1234-5678-9012-3456 masked text: ####-####-####-#### Encode card number: 1234-5678-9012-3456 Transform Data Masking センシティブなデータを 完全に隠蔽(1 way) アルゴリズム ノンアルゴリズム
ユースケース: Encryption as a Service 暗号可能なデータ • テキスト • 音声
• 画像 など 暗号化のパターン • ランダムな暗号化 • Format Preserving Encryption • Tokenization そのほかの機能 • 新しい鍵での再暗号化 • 同じ平文を必ず同一の暗号文に する • アルゴリズムの選択 アプリケーション アプリケーション 外部データベース or 外部システム アプリデータ 暗号化されたア プリデータ アプリはVault にデータを 転送し、Vault が暗号化 する Vault によって暗号化さ れたデータをデータストア に保存 データストアから取得した暗 号化されたアプリデータを Vault によって復号し、アプ リに提供する • キーマネジメント • キーローテーション
ユースケース: Encryption as a Service 暗号可能なデータ • テキスト • 音声
• 画像 など 暗号化のパターン • ランダムな暗号化 • Format Preserving Encryption • Tokenization そのほかの機能 • 新しい鍵での再暗号化 • 同じ平文を必ず同一の暗号文に する • アルゴリズムの選択 アプリケーション データストアから取得した暗 号化されたアプリデータを Vault によって復号し、アプ リに提供する • キーマネジメント • キーローテーション 暗号化されたア プリデータ 外部データベース or 外部システム アプリはVault にデータを 転送し、Vault が暗号化 する アプリケーション アプリデータ Vault によって暗号化さ れたデータをデータストア に保存
Vault によって暗号化さ れたデータをデータストア に保存 ユースケース: Encryption as a Service 暗号可能なデータ
• テキスト • 音声 • 画像 など 暗号化のパターン • ランダムな暗号化 • Format Preserving Encryption • Tokenization そのほかの機能 • 新しい鍵での再暗号化 • 同じ平文を必ず同一の暗号文に する • アルゴリズムの選択 アプリケーション アプリデータ 暗号化されたア プリデータ アプリはVault にデータを 転送し、Vault が暗号化 する 外部データベース or 外部システム アプリケーション データストアから取得した暗 号化されたアプリデータを Vault によって復号し、アプ リに提供する • キーマネジメント • キーローテーション
暗号化のパターン • 保存する時に暗号化 • アプリケーションが必要とする時に復号 • Transparent Database Encryption (TDE)
• Full Disk Encryption (FDE) UUID Name Age CCN b7f320c7fc28 Armon Dadgar 33 \xa503c896e3 個別データ暗号化 ディスク暗号化 アプリケーションの実装が必要となる反面、 データ自体が暗号化されるためデータベースの情 報漏洩などに強い 暗号化実装ハードルが低い反面、データベースの ホスト情報漏洩や不正アクセス時に弱い
暗号化のパターン UUID Name Age CCN b7f320c7fc28 Armon Dadgar 33 \xa503c896e3
個別データ暗号化 ディスク暗号化 Vault の対応機能 • Transit • Transform • Tokenization Vault の対応機能 • KMIP Secret Engine • KM Secret Engine
KMIP Secret Engine • 各ストレージ、データベースや仮想 環境のKMIP 機能を利用してディス クやストレージの暗号化 • KMIP
Secret Engine を有効化する ことでVaultがKMIPサーバとして サービス提供 Securing VMware Data: A HashiCorp Vault KMIP Story Securing VMware and NetApp Data with HashiCorp Vault
Key Management Secrets Engine セキュリティーチーム プライベートデータセンター パブリッククラウド Vault クラスタ •
キーの作成 • ローテーション • 安全なキーの配布 • シークレットの管理 • データの暗号化含めた保護 HashiCorp Snapshot Session - BYOK Bring Your Own Key with Vault https://youtu.be/Xzzhb3fsm1Q
Copyright © 2022 HashiCorp Demo Vault 暗号化機能:Transit
デモ環境 LDAP サーバー app1 グループ • jotaro app2 グループ •
buccellati admin グループ • dio • ポリシーの設定 • Transit の設定 • キーマネジメント • キーローテーション • データの暗号化 • データの復号 • データの暗号化 • データの復号 Cloud Native Storage Meetup 2 plaintext vault:v1:96ObNJtTmnCtWol1GCHrvaZhdfs4 S45cxIytYSzeHwLk6J9E chipertext vault:v1:96ObNJtTmnCtWol1GCHrvaZhdfs4 S45cxIytYSzeHwLk6J9E chipertext Cloud Native Storage Meetup 2 plaintext データの暗号化 データの復号
https://learn.hashicorp.com/vault HashiCorp Learn - Vault
Vault User Group Japan Connpass - Vault User Group Japan
https://vault.connpass.com/ HashiCorp Vault ユーザ会 https://hashicorp-japan.github.io/vault-user-group/ 過去スライド一覧 https://hashicorp-japan.github.io/vault-user-group/slides.html #vugjp 次回は 2/24(木) 19:00
Thank You
[email protected]
www.hashicorp.com