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を用いたEncryption as a Service のご紹介
Search
tadashi
February 20, 2022
Technology
0
1k
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
440
Other Decks in Technology
See All in Technology
How to be an AWS Community Builder | 君もAWS Community Builderになろう!〜2024 冬 CB募集直前対策編?!〜
coosuke
PRO
2
2.8k
LINEヤフーのフロントエンド組織・体制の紹介【24年12月】
lycorp_recruit_jp
0
530
成果を出しながら成長する、アウトプット駆動のキャッチアップ術 / Output-driven catch-up techniques to grow while producing results
aiandrox
0
290
社外コミュニティで学び社内に活かす共に学ぶプロジェクトの実践/backlogworld2024
nishiuma
0
260
OpenAIの蒸留機能(Model Distillation)を使用して運用中のLLMのコストを削減する取り組み
pharma_x_tech
4
550
私なりのAIのご紹介 [2024年版]
qt_luigi
1
120
NilAway による静的解析で「10 億ドル」を節約する #kyotogo / Kyoto Go 56th
ytaka23
3
380
GitHub Copilot のテクニック集/GitHub Copilot Techniques
rayuron
31
12k
マイクロサービスにおける容易なトランザクション管理に向けて
scalar
0
120
コンテナセキュリティのためのLandlock入門
nullpo_head
2
320
Amazon Kendra GenAI Index 登場でどう変わる? 評価から学ぶ最適なRAG構成
naoki_0531
0
110
20241220_S3 tablesの使い方を検証してみた
handy
3
390
Featured
See All Featured
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
2
170
How To Stay Up To Date on Web Technology
chriscoyier
789
250k
4 Signs Your Business is Dying
shpigford
181
21k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
45
2.2k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Producing Creativity
orderedlist
PRO
341
39k
GraphQLとの向き合い方2022年版
quramy
44
13k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
Designing Experiences People Love
moore
138
23k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
Designing on Purpose - Digital PM Summit 2013
jponch
116
7k
Testing 201, or: Great Expectations
jmmastey
40
7.1k
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