Vault Workshop
Takayuki Kaburagi, Solutions Engineer, HashiCorp Japan K.K
@kabuctl
kabu@hashicorp.com
https://blog.kabuctl.run
https://github.com/tkaburagi
Copyright © 2019 HashiCorp
HashiCorpについて
Leading Cloud Infrastructure Automation
設立2012
従業員900
資金調達174M
HashiCorpのプロダクトを利用することにより、アプリケーションとそれを支えるインフラストラクチャの「プロビジョニング」「セキュリティ保護」「実行」「接続と連携」が可能になります。
HachiCorpは、すべてのビジネスにおけるクラウドオペレーションモデルの制約を解放し、お客様のデジタル変革を成功に導きます。
HashiCorp Momentum
ある特定の技術ではなく、ワークフローの最終ゴールにフォーカスします。製品設計はまずゴールを設定し、そこに至るまでのワークフローを想像するところから始まります。
Workflows, not technologies
Unix哲学と同様各ツールはシンプルでモジュール化され、組み合わせ可能であること。ツールは利用範囲が明確に定義されている小さなコンポーネントを好みます。各ツールはブロックであり、完全なソリューションを構築する際はそれらを組み合わせて使うべきです。
Simple, Modular, Composable
各ツールは独立したプロセスとして扱われ、APIを介して他のツールとコミュニケーションし連結します。
Communicating Sequential Processes
VCSのコミット内容が永久に残るように、サーバなどのインフラもバージョン管理やデバッグを行えるように不変的に管理されるべきです。
Immutability
The Tao of HashiCorp
全てのプロセスはコードで書かれ、保管され、バージョン化されるべきです。これにより過去のデータの損失が防がれ、情報共有が促進されます。
Versioning through codification
コード化されたプロセスはマシンにより実行可能で、運用者にも可読性があります。コード化されたプロセスの自動化はシステム変更のオーバヘッドを減少させ、人的ミスを削減します。
Automation through Codification
高いレベルの信頼性を達成するために、予想外の入出力に耐えられるシステムが必要です。その目には望ましい状態を把握しておくこと、現在の状態を収集する手段、望ましくな状態になった際に復旧する手段が必要です。
Resilient Systems
問題を解決するのは実用主義であるという点が重要です。HashiCorp道で記載する様々な原理は理想であり目指しているものでありますが、独善的に自らに強制する者でありません。そのために実用的な製品開発のためには再評価を行うこともあります。
Pragmatism
The Tao of HashiCorp
Evolving application workload delivery
Challenge
複数のクラウド環境へ一貫性のある方法でどのようにアプリケーションをデリバリするか?
従来のアプリケーション環境
クラウドにおけるアプリケーション環境
StaticからDynamicな環境へ
専用のインフラへデプロイ
インフラのプールへ
オンデマンドにスケジューリング
ホストベースの静的IPでのサービス間通信
サービスベースの動的IPでのサービス間通信
信頼性の高いネットワーク境界によるセキュリティ
信頼性の低いネットワーク上のIdentityベースのセキュリティ
専有のインフラを準備
オンデマンドにインフラを準備
The HashiCorp Stack
クラウドオペレーティングモデルの各レイヤーにおいて、一貫したワークフローを提供します
Run Development
Cloud Application Automation
Connect Networking
Cloud Networking Automation
Secure �Security
Cloud Security Automation
Provision Operations
Cloud Infrastructure Automation
vSphere
Various Hardware
Identity: �AD/LDAP
Terraform
EKS / ECS�Lambda
CloudApp/�AppMesh
Identity: �AWS IAM
Cloud �Formation
AKS / ACS�Azure Functions
Proprietary
Identity: �Azure AD
Resource Manager
GKE Cloud Functions
Proprietary
Identity: �GCP IAM
Cloud Deployment Manager
エンタープライズ版を選定する価値
Provision
Connect
Secure
Run
サービス、プラットフォーム、ビジネスを支えるツール群
Business Application
Observability
Data
Multi Cloud
お客様
製品フィードバック
技術支援
Business Value
フォーカスしたいエリア
重要だがリソースを
かけたくないエリア
Networking
Connect infrastructure and applications
Development
Run applications
Security
Secure applications and infrastructure
Operations
Provision Infrastructure
The 4 essential elements of dynamic infrastructure
THE HASHICORP STACK
11
© 2018 HashiCorp
Connect
THE HASHICORP STACK
Infrastructure and applications
Development
Run applications
Security
Secure infrastructure and applications
Operations
Provision infrastructure
The 4 essential elements�of distributed infrastructure
12
© 2018 HashiCorp
About Vault
500+
顧客数
1M+
月間ダウンロード数
10.4K+
Github スター
2T+
トランザクション
プロダクトローンチ
2014
従来のセキュリティアプローチ
クラウド時代のセキュリティアプローチ
HashiCorp Vault で出来ること
全部Vaultで出来ます
シークレット管理
データプロテクション
Vaultのユースケース
シークレット(トークン、パスワード、証明書や暗号化キー)の
中央集権的な生成、保存、提供
データ暗号化のためのシンプルなAPIと暗号化のキー管理の機能を提供し、アプリケーションのデータをセキュアに保つ
*シークレットとは認証認可を与えるものの総称でDBクレデンシャル、クラウドのIAM、トークン、TLS証明書、ID&パスワード、SSH Keyなどを指します
Vaultによるシークレット管理
従来の運用
シークレット管理の手間や、
同じシークレットを長期間利用し続ける
ことのリスク
Vaultによるシークレット管理
Vaultによるクラウド時代の管理
シークレット管理を改善し、
短期間で新しいシークレットを発行
従来の運用
シークレット管理の手間や、
同じシークレットを長期間利用し続ける
ことのリスク
シークレットエンジンの種類と利用
シークレットエンジンを利用することで、認証されたクライアントがシークレット(何かにアクセスするために必要な「何か」)を使用する際の管理ワークフローが実装できます
VaultによるDynamic Secretワークフロー
$ vault read database/creds/mysql-role
→ VaultがDatabaseのSQLを実行し、ユーザとパスワードを発行
$ vault read aws/creds/vpc-admin
→ VaultがAWS API実行し、IAMキーを発行
$ vault read ssh/role/otp
→ VaultがVM上でシェルを実行し、SSHパスワードを発行
$ vault write pki_intermediate/issue/kabuctl-dot-run \ common_name="blog.kabuctl.run"
→ Vaultが認証局となり、証明書を発行
Client
Backend
シークレット要求
シークレット発行 TTL=1hour
シークレット提供
TTL後
シークレット破棄
Token
Terminal
Dynamic Secret: Public Cloud
一般的な運用
Vaultによるシークレット管理
--
--
期限付き
シークレット
Revoke
Public Cloud Secret Engineの利点
クラウドシークレットキーを動的に発行
Dynamic Secret: Database
AP2
AP2
Dev
IT
DBA
Security
password
password
Review
AP1
AP2
AP2
AP2
AP2
AP2
AP1
AP2
AP2
AP2
一般的な運用
Vaultによるシークレット管理
期限付き
user&
password
Database Secret Engineの利点
データベースのユーザ&パスワードを動的に発行
Secret Engines
Static Secret: KV Secret Engine
username={get.from.vault}
password={get.from.vault}
token={get.from.vault}
url=xxxx.xxx
Key | Value |
username | Hashimoto |
password | pqsworD |
token | s.2QeQ5WUzFUbicuTT7SFSI0uJ |
設定ファイル
一般的な運用
Vaultによるシークレット管理
username=Hashimoto
password=D5JM6EW9
token=s.2Qe...
url=xxxx.xxx
コピペ
Key | Value |
username | encrypted.WputNlwLdegpFA... |
password | encrypted.Az/UmDRCWs... |
token | encrypted.AUc9tFHt4YD... |
Client
APIコールで
自動取得
パスワード認証
認証
プロバイダを
利用したRBAC
Static Secret: KV Secret Engineの利点
既存のシークレット管理をAPI化
シークレット管理
データプロテクション
Vaultのユースケース
シークレット(トークン、パスワード、証明書や暗号化キー)の
中央集権的な生成、保存、提供
データ暗号化のためのシンプルなAPIと暗号化のキー管理の機能を提供し、アプリケーションのデータをセキュアに保つ
*シークレットとは認証認可を与えるものの総称でDBクレデンシャル、クラウドのIAM、トークン、TLS証明書、ID&パスワード、SSH Keyなどを指します
Vaultによる個人情報などのデータ暗号化
従来の運用
暗号化の手法や品質が開発者に依存、
キーの管理コストが高い、
もしくはそもそも管理されていない
Vaultによる個人情報などのデータ暗号化
従来の運用
Vaultによるクラウド時代の暗号化
暗号化の手法や品質が開発者に依存、
キーの管理コストが高い、
もしくはそもそも管理されていない
APIドリブンな安全で高品質な暗号化、
キーのライフサイクル管理をVaultに委託
Encryption as a Service
アプリはVaultにデータを転送し、Vaultが暗号化する
Vaultによって暗号されたデータがデータストアに保存される
データストアから取得した暗号化されたアプリデータをVaultによって復号化し、アプリに提供する
Write
Read
アプリデータ
暗号化された
アプリデータ
アプリデータ
暗号化されたデータ
暗号化されたデータ
復号化されたデータ
・キーローテーション
・キーマネージメント
Encryption as a Serviceそのほかの特徴
Vaultへの認証
外部のIdPで認証し、Vaultのシークレットエンジンを扱うため権限(トークン)を得るためのフロー
Vault Auth Method
Vaultへの認証フローとポリシー
38
Client
$ curl --request POST \
http://127.0.0.1:8200/v1/auth/ldap/login
organization=hashicorp
team=team-a
Role: mysql-client-policy
path "mysql/*" {
capabilities = [ "read", "create", "delete"]
}
$ vault login -method=ldap
Vault Token
LDAP Auth
Vault Enterprise
機能名 | 概要 |
Namespace | 論理的なマルチテナンシー |
DR Replication | Vaultクラスター間でトークン、シークレットやキーを含めたレプリケーションをし可用性を向上 |
Performance Replication | Vaultクラスター間でシークレットなどをレプリケーションし、複数クラスタでリードを処理しパフォーマンスを向上 |
Performance Standby | 1クラスタ内で複数のリードノードを立てパフォーマンスを向上 |
Control Groups | Response Wrapping Tokenにアクセスする際に認証フローを入れセキュリティを向上 |
HSM Auto-unseal | Hardware Security Moduleによる自動unseal |
Replication Filters | クラスタ間でレプリケーションするデータの条件を指定してフィルタリングをする |
Policy as Code (Sentinel) | SentinelによるVault APIコール等に関するポリシーの設定 |
Multi Factor Authentication | Vaultへの多要素の認証 |
KMIP | Key Management Interoperability Protocol |
HashiCorp Support |
|
Advanced Data Protection:
Transformation Secret Engine
Transformation
フォーマットやデータサイズ保持したままデータを暗号化
###-##-####
あなたの情報
* 氏名: 鏑木崇之
* 電話番号: 0120-55-2221
* SSN: ###-##-####
Format Preserving Encryption
Masking
Transit + Transform
ciphertext:
1098-7654-3210-9876
Encode card number:
1234-5678-9012-3456
masked text:
####-####-####-####
Encode card number:
1234-5678-9012-3456
ciphertext:
vault:v1:cZNHVx+sxdMErXRSuDa1q/pz49fXTn1PScKfhf+PIZPvy8xKfkytpwKcbC0fF2U=
Encode card number:
1234-5678-9012-3456
Transit�Encryption as a Service (EaaS)
Transform NEW�Format-Preserving Encryption (FPE)
データのサイズやコンテンツを保持したまま暗号化
したいとき
Transform NEW�Data Masking
センシティブなデータを完全に隠したいとき
Advanced Data Protection:
KMIP(Key Management Interoperability Protocol)
オンプレミスのストレージシステムなどVault HTTP APIを実行できないクライアントへの対応
KMIP
従来のKMIPの利用
vaultによるKMIPの利用
Kubernetes Integration
HashiCorp Vault K8s Integration
Helm Chart for Vault Enterprise
Helm Chart for Vault Enterprise
Kubernetes Auth Method
Kubernetes Auth Method
🤔 Secret Zero Problem
Secrets Sidecar Injection
Secrets Sidecar Injection
Kubernetes Service Discovery
Vault Enterprise Service Discovery in Kubernetes
Cluster1
Cluster2
LB
End to End TLS
平常時
Cluster1
Cluster2
LB
End to End TLS
平常時
Vault Policies
Vault Hardening
Sentinel
Sentinelの例
Cluster1
Cluster2
LB
❌
クラスタに悪意のある操作が入ったとき
Cluster1
Cluster2
LB
❌
クラスタに悪意のある操作が入ったとき
Vault Sealing
Key Rotation