1 of 53

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

2 of 53

HashiCorpについて

Leading Cloud Infrastructure Automation

設立2012

従業員900

資金調達174M

HashiCorpのプロダクトを利用することにより、アプリケーションとそれを支えるインフラストラクチャの「プロビジョニング」「セキュリティ保護」「実行」「接続と連携」が可能になります。

HachiCorpは、すべてのビジネスにおけるクラウドオペレーションモデルの制約を解放し、お客様のデジタル変革を成功に導きます。

3 of 53

HashiCorp Momentum

4 of 53

5 of 53

ある特定の技術ではなく、ワークフローの最終ゴールにフォーカスします。製品設計はまずゴールを設定し、そこに至るまでのワークフローを想像するところから始まります。

Workflows, not technologies

Unix哲学と同様各ツールはシンプルでモジュール化され、組み合わせ可能であること。ツールは利用範囲が明確に定義されている小さなコンポーネントを好みます。各ツールはブロックであり、完全なソリューションを構築する際はそれらを組み合わせて使うべきです。

Simple, Modular, Composable

各ツールは独立したプロセスとして扱われ、APIを介して他のツールとコミュニケーションし連結します。

Communicating Sequential Processes

VCSのコミット内容が永久に残るように、サーバなどのインフラもバージョン管理やデバッグを行えるように不変的に管理されるべきです。

Immutability

The Tao of HashiCorp

6 of 53

全てのプロセスはコードで書かれ、保管され、バージョン化されるべきです。これにより過去のデータの損失が防がれ、情報共有が促進されます。

Versioning through codification

コード化されたプロセスはマシンにより実行可能で、運用者にも可読性があります。コード化されたプロセスの自動化はシステム変更のオーバヘッドを減少させ、人的ミスを削減します。

Automation through Codification

高いレベルの信頼性を達成するために、予想外の入出力に耐えられるシステムが必要です。その目には望ましい状態を把握しておくこと、現在の状態を収集する手段、望ましくな状態になった際に復旧する手段が必要です。

Resilient Systems

問題を解決するのは実用主義であるという点が重要です。HashiCorp道で記載する様々な原理は理想であり目指しているものでありますが、独善的に自らに強制する者でありません。そのために実用的な製品開発のためには再評価を行うこともあります。

Pragmatism

The Tao of HashiCorp

7 of 53

Evolving application workload delivery

Challenge

複数のクラウド環境へ一貫性のある方法でどのようにアプリケーションをデリバリするか?

従来のアプリケーション環境

  • 想定可能なアプリケーショントラフィック
  • 必要な量のハードウェアリソースを事前に確保
  • IPベースのサービス間接続
  • 静的な環境を前提としたセキュリティ管理

クラウドにおけるアプリケーション環境

  • 想定不可能なトラフィック
  • スケーラビリティ、マルチクラウド
  • 多発するサービス間通信のネットワーキング
  • IDベースでのセキュリティへの対応

8 of 53

StaticからDynamicな環境へ

専用のインフラへデプロイ

インフラのプールへ

オンデマンドにスケジューリング

ホストベースの静的IPでのサービス間通信

サービスベースの動的IPでのサービス間通信

信頼性の高いネットワーク境界によるセキュリティ

信頼性の低いネットワーク上のIdentityベースのセキュリティ

専有のインフラを準備

オンデマンドにインフラを準備

9 of 53

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

  • ワークロードスケジューリング
  • マルチクラウド オーケストレーション
  • シークレット・マネジメント
  • データプロテクション
  • Infrastructure as a Code(IaS)
  • マルチクラウド プロビジョニング
  • サービス レジストリ & ディスカバリー
  • サービス メッシュ

10 of 53

エンタープライズ版を選定する価値

Provision

Connect

Secure

Run

サービス、プラットフォーム、ビジネスを支えるツール群

Business Application

Observability

Data

Multi Cloud

お客様

  • エンタープライズ新機能
  • バージョン追従
  • サービス開発
  • スケーラビリティの担保
  • クラウド対応
  • データ活用、モニタリング

製品フィードバック

技術支援

Business Value

フォーカスしたいエリア

重要だがリソースを

かけたくないエリア

11 of 53

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

12 of 53

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

13 of 53

About Vault

500+

顧客数

1M+

月間ダウンロード数

10.4K+

Github スター

2T+

トランザクション

プロダクトローンチ

2014

14 of 53

従来のセキュリティアプローチ

  • 自社が管理する信頼性の高いネットワーク
  • ネットワークの境界を中と外で明確に分割

クラウド時代のセキュリティアプローチ

  • IaaS, SaaSベンダーが管理するネットワークとの相互運用
  • ネットワークの境界が曖昧になり、Identityベースでの管理が必要

15 of 53

HashiCorp Vault とは

https://www.vaultproject.io

  • シークレットライフサイクルの集中管理
  • データプロテクション: API-Drivenな暗号化
  • Advanced データプロテクション

16 of 53

HashiCorp Vault で出来ること

  1. Secretの中央管理(Centralization)
  2. 暗号化(Encryption)
  3. 認証(Authentication)
  4. 認可(Authorization)
  5. 鍵交換(Rotation)

全部Vaultで出来ます

17 of 53

シークレット管理

データプロテクション

Vaultのユースケース

シークレット(トークン、パスワード、証明書や暗号化キー)の

中央集権的な生成、保存、提供

データ暗号化のためのシンプルなAPIと暗号化のキー管理の機能を提供し、アプリケーションのデータをセキュアに保つ

*シークレットとは認証認可を与えるものの総称でDBクレデンシャル、クラウドのIAM、トークン、TLS証明書、ID&パスワード、SSH Keyなどを指します

18 of 53

Vaultによるシークレット管理

  • シークレットの使い回し、長期利用
  • アプリの設定にシークレットを記入
  • シークレットの乱立、管理が煩雑
  • アクセスコントロールの設計が困難

従来の運用

シークレット管理の手間や、

同じシークレットを長期間利用し続ける

ことのリスク

19 of 53

Vaultによるシークレット管理

  • シークレットのシングルレポジトリ
  • Vaultから様々なシークレットを発行
  • 期限(TTL)付与しシークレットのライフサイクルをコントロール
  • 細かな権限管理

Vaultによるクラウド時代の管理

シークレット管理を改善し、

短期間で新しいシークレットを発行

  • シークレットの使い回し、長期利用
  • アプリの設定にシークレットを記入
  • シークレットの乱立、管理が煩雑
  • アクセスコントロールの設計が困難

従来の運用

シークレット管理の手間や、

同じシークレットを長期間利用し続ける

ことのリスク

20 of 53

シークレットエンジンの種類と利用

シークレットエンジンを利用することで、認証されたクライアントがシークレット(何かにアクセスするために必要な「何か」)を使用する際の管理ワークフローが実装できます

  • 動的シークレット(Vaultが差別化されている点)
    • Public Cloud: AWS / Azure / GCP / Oracle / AliCloud
    • Middleware: Database / RabbitMQ / Nomad / Consul
    • Active Directory
    • Open LDAP
    • PKI (証明書)
    • SSH (ワンタイムパスワード / CA認証)
  • 静的シークレット
    • KV Secret Engine

21 of 53

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

22 of 53

Dynamic Secret: Public Cloud

一般的な運用

Vaultによるシークレット管理

  • 手動でのキー発行
  • 一度発行したキーを長期間利用
  • かつ同じキーを使い回し
  • アカウントが乱立しmanageabilityが低下
  • 権限管理が複雑に
  • 設定ファイルへの直記入

--

--

期限付き

シークレット

Revoke

23 of 53

Public Cloud Secret Engineの利点

クラウドシークレットキーを動的に発行

  • 必要なキーを必要な時に生成し、自動で削除
  • 常時新しいキーを利用可能に
  • 設定ファイル等にシークレットの記述が不要でリスクを低減 
  • 発行するユーザやクライアントに対してクラウドへの権限を柔軟に設定可能
    • Principle of least privilege

24 of 53

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

25 of 53

Database Secret Engineの利点

データベースのユーザ&パスワードを動的に発行

  • クライアントから必要な時に即時シークレットを発行
  • 期限付きユーザ&パスワードを発行し、短期間でシークレットをローテーション
  • 全てのアプリ、全てのインスタンスがそれぞれ別のシークレットを保持しより安全に
  • パスワード変更、更新が自動化され運用のコストやサービスレベルを改善
  • 設定ファイル等にシークレットの記述が不要でリスクを低減
  • 発行するクライアントに対してデータベースへの権限を柔軟に設定可能
    • Principle of least privilege

26 of 53

Secret Engines

27 of 53

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

28 of 53

Static Secret: KV Secret Engineの利点

既存のシークレット管理をAPI化

  • 認証プロバイダと連携し、ロールベースのアクセスで細かな権限管理
  • ファイルなどで管理していたシークレット群をVaultで暗号化し安全に格納
  • クライアントからAPIでシークレットにアクセスし直接安全に取得
  • 設定ファイル等にシークレットの記述が不要でリスクを最小化
  • シークレットのバージョン管理機能で効率的に運用

29 of 53

シークレット管理

データプロテクション

Vaultのユースケース

シークレット(トークン、パスワード、証明書や暗号化キー)の

中央集権的な生成、保存、提供

データ暗号化のためのシンプルなAPIと暗号化のキー管理の機能を提供し、アプリケーションのデータをセキュアに保つ

*シークレットとは認証認可を与えるものの総称でDBクレデンシャル、クラウドのIAM、トークン、TLS証明書、ID&パスワード、SSH Keyなどを指します

30 of 53

Vaultによる個人情報などのデータ暗号化

  • アプリで暗号化、キー管理
  • キーの運用が煩雑
    • ローテーション
    • 新しいキーでの再暗号化

従来の運用

暗号化の手法や品質が開発者に依存、

キーの管理コストが高い、

もしくはそもそも管理されていない

31 of 53

Vaultによる個人情報などのデータ暗号化

  • アプリで暗号化、キー管理
  • キーの運用が煩雑
    • ローテーション
    • 新しいキーでの再暗号化

  • API Driven Encryption
  • Vaultがキーを運用
    • 生成
    • ローテーション
    • 再暗号化
  • 選択可能な暗号化ロジック

従来の運用

Vaultによるクラウド時代の暗号化

暗号化の手法や品質が開発者に依存、

キーの管理コストが高い、

もしくはそもそも管理されていない

APIドリブンな安全で高品質な暗号化、

キーのライフサイクル管理をVaultに委託

32 of 53

33 of 53

34 of 53

Encryption as a Service

アプリはVaultにデータを転送し、Vaultが暗号化する

Vaultによって暗号されたデータがデータストアに保存される

データストアから取得した暗号化されたアプリデータをVaultによって復号化し、アプリに提供する

Write

Read

アプリデータ

暗号化された

アプリデータ

アプリデータ

暗号化されたデータ

暗号化されたデータ

復号化されたデータ

・キーローテーション

・キーマネージメント

35 of 53

Encryption as a Serviceそのほかの特徴

  • Rewrap
    • 旧バージョンのキーで暗号化されたデータを新バージョンのキーで再暗号化
  • Convergent
    • 同一の平文を必ず同一の暗号文で暗号化
  • 暗号化アルゴリズム
    • es128-gcm96 / aes256-gcm96 / chacha20-poly1305 / ed25519 / ecdsa-p256 / ecdsa-p384 / ecdsa-p521 / rsa-2048 / rsa-4096
  • 対応データ
    • Base64データであれば暗号化可能 (ファイル、画像、音声データなども可能)
  • Transformation (Enterprise)
    • 平文のフォーマットを保持したまま暗号化(マイナンバー、電話番号、クレジットカード番号など)

36 of 53

Vaultへの認証

外部のIdPで認証し、Vaultのシークレットエンジンを扱うため権限(トークン)を得るためのフロー

37 of 53

Vault Auth Method

38 of 53

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

39 of 53

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

  • Solutions Engineer, Technical Account Managerによるヘルスチェックや定例MTG
  • 24 * 365のサポート

40 of 53

Advanced Data Protection:

Transformation Secret Engine

Transformation

フォーマットやデータサイズ保持したままデータを暗号化

  • 平文のフォーマットやデータサイズを保持したままデータを暗号化

  • キーの運用コストを最小限に抑え重要なデータ(クレジットカード番号、電話番号など)を高度に暗号化

  • NISTによって承認されたAES FF3-1暗号化アルゴリズムを利用

  • データをマスキングするOne-way Transformationにも対応

###-##-####

あなたの情報

* 氏名: 鏑木崇之

* 電話番号: 0120-55-2221

* SSN: ###-##-####

Format Preserving Encryption

Masking

41 of 53

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

センシティブなデータを完全に隠したいとき

42 of 53

Advanced Data Protection:

KMIP(Key Management Interoperability Protocol)

オンプレミスのストレージシステムなどVault HTTP APIを実行できないクライアントへの対応

KMIP

  • サーバ-クライアント間で暗号化やキー管理の機能を提供するオープンプロトコル
  • Transparent Database Encryption(TDE)
  • Full Disk Encryption(FDE)

従来のKMIPの利用

  • それぞれのサービスがKMIP固有の実装をしそれぞれのKMIPサーバへリクエスト

vaultによるKMIPの利用

  • Vault KMIPリスナーを介した透過的なリクエストで完結
  • vault write kmip/config \ listen_addrs=0.0.0.0:5696

43 of 53

Kubernetes Integration

44 of 53

HashiCorp Vault K8s Integration

  • Helm Chart for Vault Enterprise
  • Kubernetes Auth Method
  • Secrets Sidecar Injection
  • Kubernetes Service Discovery

45 of 53

Helm Chart for Vault Enterprise

Helm Chart for Vault Enterprise

  • VaultのKubernetesクラスタ上へのデプロイを公式サポート

    • Dev mode
    • Standalone mode
    • HA mode

46 of 53

Kubernetes Auth Method

補足スライド

Kubernetes Auth Method

  • kubernetes.io/serviceaccount/tokenを使ってVaultの認証をしシークレットを取得する
  • Service AccountにVaultに対する権限を紐づけて認証認可し、Podに対してトークンを発行
  • 初回のVaultトークンの生成ワークフローをシンプルに

🤔 Secret Zero Problem

47 of 53

Secrets Sidecar Injection

補足スライド

Secrets Sidecar Injection

  • Pod内のSidecar経由Vault APIとのインタラクションを実施しシークレットを発行
  • SidecarがPod内のファイルシステムにシークレットをwriteし、アプリからreadして取得
  • アプリからVaultのAPIを直接コールする必要がなくなり、アプリの実装やワークフローがシンプルに

48 of 53

Kubernetes Service Discovery

Vault Enterprise Service Discovery in Kubernetes

  • Kubernetesのサービスディスカバリを利用した内部コミュニケーション
  • active, sealed, initialized or perf-standbyなどのノードの状態をlabelで識別

49 of 53

Cluster1

Cluster2

LB

End to End TLS

平常時

50 of 53

Cluster1

Cluster2

LB

End to End TLS

平常時

Vault Policies

  • 各クライアントにはVaultに対する必要最小限の権限のみを与え、内部からの脅威やオペミスから守る

Vault Hardening

  • Vaultを安全にデプロイし、悪意のある操作から守る

Sentinel

  • Vault APIへのアクセスを細かい粒度で守る

Sentinelの例

  • 特定のエンドポイントには特定のクライアントのみしかアクセスできない
    • トークン作成
    • Seal / Unseal
  • 多要素認証を要求
  • 古いトークンの利用を拒否

51 of 53

Cluster1

Cluster2

LB

クラスタに悪意のある操作が入ったとき

52 of 53

Cluster1

Cluster2

LB

クラスタに悪意のある操作が入ったとき

Vault Sealing

  • Vaultクラスタへのアクセスを完全に遮断し、Vaultへの被害を最小限にする

Key Rotation

  • マスターキーをローテーションしVault内のデータを保護する

53 of 53