Upgrade to Pro — share decks privately, control downloads, hide ads and more …

HashiCorp Vaultを用いたEncryption as a Service のご紹介

tadashi
February 20, 2022

HashiCorp Vaultを用いたEncryption as a Service のご紹介

Cloud Native Storage Meetup #2 でお話させて頂いた際に使用した資料です。

tadashi

February 20, 2022
Tweet

More Decks by tadashi

Other Decks in Technology

Transcript

  1. Copyright © 2022 HashiCorp 2/18/2022 HashiCorp Vault を用いた Encryption as

    a Service のご紹介 Cloud Native Storage Meetup #2 Solutions Engineer Tadashi Ito (伊藤 忠司)
  2. 自己紹介 • Tadashi Ito(伊藤 忠司) / Itochu • Solutions Engineer

    • LinkedIn: https://www.linkedin.com/in/tadashii-itochu/
  3. 良く使われているコンテナイメージ NGINX, Redis, and Postgres are the most popular container

    images StatefulSet リソースとして良く使われたコンテナイメージ
  4. 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
  5. Vault 利用方法 or Server CLI GUI API Interface Client ヒト

    アプリ CI/CD Self-Managed HashiCorp Managed
  6. 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 に対する権限付きのトークンを取得するための手法
  7. トークンの取得 クライアント 信頼できる認証基盤で認証 Authentication トークン ポリシー • シークレットエンジンへのアクセス • API

    エンドポイントへのアクセス Time To Lived アプリケーションやシステムへのア クセスを認可 Authorization シークレットエンジン ポリシーに基づいた シークレット管理 Auth Method 認証 アイデンティティによるアク セス
  8. 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 ポリシー
  9. 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 サーバー
  10. $ 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 ポリシー
  11. 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 トークン
  12. トークンの取得 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
  13. シークレットのリクエスト クライアント 信頼できる認証基盤で認証 Authentication トークン ポリシー • シークレットエンジンへのアクセス • API

    エンドポイントへのアクセス Time To Lived アプリケーションやシステムへのア クセスを認可 Authorization シークレットエンジン ポリシーに基づいた シークレット管理 Auth Method Secrets Engines 認証 アイデンティティによるアク セス
  14. シークレットの取得 クライアント 信頼できる認証基盤で認証 Authentication トークン ポリシー • シークレットエンジンへのアクセス • API

    エンドポイントへのアクセス Time To Lived アプリケーションやシステムへのア クセスを認可 Authorization シークレット シークレットエンジン ポリシーに基づいた シークレット管理 Secrets & Encryption • 動的シークレット • 静的シークレット • 暗号化サービス Secrets Engines Auth Method 認証 アイデンティティによるアク セス
  15. 動的シークレット 静的シークレット 暗号化 Vault シークレットエンジン • パブリッククラウド (AWS, Azure, GCP

    etc)へア クセスするためのキー • データベース (MySQL, PostgreSQL etc)など のミドルウェアのパスワード • X.509 証明書 • SSHパスワード、公開鍵認証用証明書 • Active Directory / OpenLDAPのユーザパス ワード • Terraform Enterprise / Cloud APIトークン • 既存のパスワード、 APIトークンなど汎用的な データ • 個人情報等の暗号化 / トークナイゼーション Secrets Engines シークレットエンジン ポリシーに基づいた シークレット管理
  16. 動的シークレット クライアント 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... …
  17. 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 認証メソッドの有効化
  18. バックエンドの設定 (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
  19. 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
  20. シークレット発行 (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
  21. 従来型の暗号化との違い • アプリで暗号化、キー管理 • キーの運用が煩雑 ◦ ローテーション ◦ 新しいキーでの再暗号化 •

    既存システムへの影響 • API Driven Encryption • Vault がキーを運用 ◦ 生成とローテーション ◦ 再暗号化 • 選択可能な暗号化パターン 暗号化の手法や品質が開発者に依存、 キーの管理コストが高い、 もしくはそもそも管理されていない API ドリブンな安全で高品質な暗号化、 キーのライフサイクル管理を Vault に委託 従来の運用 Vault によるクラウド時代の暗号化
  22. 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) アルゴリズム ノンアルゴリズム
  23. ユースケース: Encryption as a Service 暗号可能なデータ • テキスト • 音声

    • 画像 など 暗号化のパターン • ランダムな暗号化 • Format Preserving Encryption • Tokenization そのほかの機能 • 新しい鍵での再暗号化 • 同じ平文を必ず同一の暗号文に する • アルゴリズムの選択 アプリケーション アプリケーション 外部データベース or 外部システム アプリデータ 暗号化されたア プリデータ アプリはVault にデータを 転送し、Vault が暗号化 する Vault によって暗号化さ れたデータをデータストア に保存 データストアから取得した暗 号化されたアプリデータを Vault によって復号し、アプ リに提供する • キーマネジメント • キーローテーション
  24. ユースケース: Encryption as a Service 暗号可能なデータ • テキスト • 音声

    • 画像 など 暗号化のパターン • ランダムな暗号化 • Format Preserving Encryption • Tokenization そのほかの機能 • 新しい鍵での再暗号化 • 同じ平文を必ず同一の暗号文に する • アルゴリズムの選択 アプリケーション データストアから取得した暗 号化されたアプリデータを Vault によって復号し、アプ リに提供する • キーマネジメント • キーローテーション 暗号化されたア プリデータ 外部データベース or 外部システム アプリはVault にデータを 転送し、Vault が暗号化 する アプリケーション アプリデータ Vault によって暗号化さ れたデータをデータストア に保存
  25. Vault によって暗号化さ れたデータをデータストア に保存 ユースケース: Encryption as a Service 暗号可能なデータ

    • テキスト • 音声 • 画像 など 暗号化のパターン • ランダムな暗号化 • Format Preserving Encryption • Tokenization そのほかの機能 • 新しい鍵での再暗号化 • 同じ平文を必ず同一の暗号文に する • アルゴリズムの選択 アプリケーション アプリデータ 暗号化されたア プリデータ アプリはVault にデータを 転送し、Vault が暗号化 する 外部データベース or 外部システム アプリケーション データストアから取得した暗 号化されたアプリデータを Vault によって復号し、アプ リに提供する • キーマネジメント • キーローテーション
  26. 暗号化のパターン • 保存する時に暗号化 • アプリケーションが必要とする時に復号 • Transparent Database Encryption (TDE)

    • Full Disk Encryption (FDE) UUID Name Age CCN b7f320c7fc28 Armon Dadgar 33 \xa503c896e3 個別データ暗号化 ディスク暗号化 アプリケーションの実装が必要となる反面、 データ自体が暗号化されるためデータベースの情 報漏洩などに強い 暗号化実装ハードルが低い反面、データベースの ホスト情報漏洩や不正アクセス時に弱い
  27. 暗号化のパターン UUID Name Age CCN b7f320c7fc28 Armon Dadgar 33 \xa503c896e3

    個別データ暗号化 ディスク暗号化 Vault の対応機能 • Transit • Transform • Tokenization Vault の対応機能 • KMIP Secret Engine • KM Secret Engine
  28. 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
  29. Key Management Secrets Engine セキュリティーチーム プライベートデータセンター パブリッククラウド Vault クラスタ •

    キーの作成 • ローテーション • 安全なキーの配布 • シークレットの管理 • データの暗号化含めた保護 HashiCorp Snapshot Session - BYOK Bring Your Own Key with Vault https://youtu.be/Xzzhb3fsm1Q
  30. デモ環境 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 データの暗号化 データの復号
  31. 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