LAC WATCH

セキュリティとITの最新情報

RSS

株式会社ラック

メールマガジン

サイバーセキュリティや
ラックに関する情報をお届けします。

サービス・製品 | 

企業の機密情報を保護する、HashiCorp Vaultの暗号化ソリューション

個人情報などの重要な機密情報を取り扱う企業は、データをビジネスで活用するだけでなく、ハッキングや情報漏えい等のセキュリティインシデントからデータを守らなくてはなりません。しかし、データを保護する手段や効果的な暗号化ツールは数多く存在し、どれを活用すれば良いか迷うこともあるでしょう。

今回は、「企業の個人情報を守るHashiCorp Vault※1の暗号化ソリューション」と題した記事を日本語に訳してお届けします。著者のKapil Arora氏は、HashiCorp社のシニア・ソリューション・エンジニアで、企業がVaultを使用してデータを保護するための手段を分かりやすく、かつ網羅的に解説しています。重要な機密情報を守る方法の一つとして、ご参考になれば幸いです。

※1 Vaultには、大きく分けてシークレット管理機能と暗号化機能があり、本記事では後者を紹介します。Vaultのシークレット管理機能は、HashiCorp Vaultの紹介ページをご覧ください。


謝辞:本投稿にあたり、Nico氏、Sebastien Braun氏、そしてTim Arenz氏らのすばらしい助言に感謝します。

はじめに

企業は、守るべき機密や個人情報、そして価値のあるデータを保有しています。このような機密情報を漏えいしてしまうと、経済的損失や評判の悪化、法令違反等の問題が発生します。加えて、企業はPCI DSSやGDPR、HIPAAといったデータを保護するための規格や規約を遵守しなければなりません。

この記事では、企業がどのような方法で情報を守るのか、それをどのように実現するかなど企業の課題を理解し、HashiCorp Vaultを使うことで得られる解決策をご紹介します。

データ保護の対策と実現方法

ディスクの暗号化

透過的な暗号化及びフルディスク暗号化

透過的な暗号化及びフルディスク暗号化

多くの企業は、ハードディスク全体を暗号化する方式を採用しています。情報は、ファイルシステムあるいは物理ストレージのブロックレベルで暗号化します。この種の暗号化は、物理ストレージの盗難に対して有効ですが、データベースへの不正アクセスやホスト情報の漏えい等に対して有効ではありません。

データの暗号化

データの暗号化

データを保存する時に暗号化し、アプリケーションが必要とする時に復号します。この種の暗号化は、データを暗号化した状態で保存するため、SQLインジェクションに対して有効です。また、データが漏えいした場合にも、データ自体は暗号化されており、使用できません。

トークナイゼーション

クレジットカード番号のような極めて重要な機密情報は、一般的にトークナイゼーション(機密情報をトークンと呼ばれる重要でないデータに置き換えること)を使用して保護します。

フォーマット保持暗号化及びデータマスキング

フォーマット保持暗号化及びデータマスキング

フォーマット保持暗号化(Format Preserving Encryption)とは、システムのデータ形式に従って情報を暗号化し、必要に応じて復号することを指します。データマスキングは、データを保護するもう一つの方法で、一度マスクしたデータは復号することができません。

ハードウェアセキュリティモジュール(HSM)

多くの企業は、コンプライアンスに従いFIPS 140-2認証のHSM、またはHSMsを採用して、極めて重要なセキュリティ情報を保護しています。

データ保護の課題

アプリケーションが利用するデータは暗号化しなければなりません。しかし、暗号化及びキー管理のインフラストラクチャを用意することは費用がかかり、実装が難しい上にクラウドやマルチデータセンターでの運用に向いていません。

費用の増加

新たなキー管理インフラストラクチャやHSMsを構築し、運用することにより高額な費用が発生します。

Vaultを導入することで、HSMsといった多要素の鍵管理基盤のためのハードウェアやライセンス、サポートのコストを削減することができます。

生産性の低下

複数のワークフローやAPIを利用すれば、組織のプロジェクトごとの暗号化規格を調査し、HSMsへのアクセスを制限しなければなりません。

Vaultを利用することで、組織全体にわたって一貫したワークフロー及び暗号化規格を作成することができます。

リスクの増加

複数の攻撃対象が存在すれば、機密データを傍受され、盗まれるリスクが増加します。

Vaultを利用することで、機密データの中央管理監視ができ、かつ安全なキーを用いて暗号化することもできます。なにより重要なのは、これらの機能が単一のワークフローとAPIで実現できることです。

データ保護に対する考え方

どの組織にも様々な役割があります。担当者はデータの保護やリリース、実装に責任を負っており、それぞれに異なる目的や期待があります。

CISO及びセキュリティチーム

CISOとセキュリティチームは、組織とアプリケーションがコンプライアンスを遵守し、監視されるようにしなければなりません。チームはセキュリティに対する最終的な責任を持つため、コントロール及び透明性に基づくリスクの削減に期待します。

CTO及びIT管理者

CTOとIT管理者は、開発のコストや生産性に関心があります。彼らは、技術仕様を組織にまたがって確立しなければなりません。製品を市場に出すことに責任があり、ゆえに開発者が正しいツールとプロセスでリリースすることを期待します。

開発者

開発者は、APIが存在し、かつ使いやすくシンプルであることを何よりも期待します。

Vaultとデータ保護

暗号化機能

VaultのTransit Secrets Engineは、暗号化機能(Encryption as a Service)を提供します。Vaultは暗号化キーを管理し、クライアントは暗号したデータの保存先を決定します。アプリケーションは、暗号化または復号するためにVaultのAPIを利用します。

Transit Secrets Engineによるデータの暗号化
Transit Secrets Engineによるデータの暗号化
Transit Secrets Engineによるデータの復号
Transit Secrets Engineによるデータの復号

下記は、Transit Secrets Engineを有効化し、使用するサンプルコードです。

#!/bin/sh

# Enable the transit secret engine at a path of your choice
vault secrets enable -path=/data-protection/transit transit

# Create an encryption key, this key is managed and created by Vault
vault write -f /data-protection/transit/keys/customer-key

# You can create multiple keys if you require
vault write -f /data-protection/transit/keys/archive-key

#test and see if encryption works
#with the first key
vault write /data-protection/transit/encrypt/customer-key \
        plaintext=$(base64 <<< "my secret data")
#with the second key
vault write /data-protection/transit/encrypt/archive-key \
        plaintext=$(base64 <<< "my secret data")

(GitHub)vault-transit.sh

フォーマット保持暗号化

VaultのTransform Secrets Engineは、AES FF3-1のフォーマット保持暗号(FPE:Format-Preserving Encryption)を提供します。Vaultはキーを管理し、クライアントはフォーマット及びデータの保存先を決定します。アプリケーションは、VaultのAPIを利用してデータのエンコード及びデコードを行います。

Transform Secrets EngineによるデータのFPEエンコード
Transform Secrets EngineによるデータのFPEエンコード
Transform Secrets EngineによるデータのFPEデコード
Transform Secrets EngineによるデータのFPEデコード

下記は、Transform Secrets Engineを有効化して、FPEを使用するサンプルコードです。

#!/bin/sh

#enable the transform secret engine at a path of your choice
vault secrets enable -path=/data-protection/transform transform

#Define a role ssn with transformation name ssn
vault write /data-protection/transform/role/ssn transformations=ssn

#create a transformation of type fpe using built in template for social security number
#and assign role ssn to it that we created earlier
vault write /data-protection/transform/transformation/ssn \
        type=fpe \
        template=builtin/socialsecuritynumber \
        tweak_source=internal \
        allowed_roles=ssn

#test if you are able to transform a SSN
vault write /data-protection/transform/encode/ssn value=111-22-3333
#test decode with following statements after executing the above statement
#vault write /data-protection/transform/decode/ssn value=

(GitHub)vault-transform-fpe.sh

データマスキング

Transform Secrets Engineのデータマスキングによるエンコード
Transform Secrets Engineのデータマスキングによるエンコード
Transform Secrets Engineのデータマスキングによるデコード
Transform Secrets Engineのデータマスキングによるデコード

Transform Secrets Engineは、データマスキングを提供します。Vaultは、クレジットカードや、SSN、パスポート等のデータパターンに適合するPIIデータ※2を置換します。アプリケーションは、VaultのAPIを使用してデータをエンコードします。データマスキングの場合は、データのデコードはできません。

※2 PII:Personally Identifiable Informationの略。個人を特定できる情報を指す。

下記は、Transform Secrets Engineを有効化して、データマスキングを使用するサンプルコードです。

#!/bin/sh

#enable the transform secret engine for masking
vault secrets enable -path=/data-protection/masking/transform transform

#Define a role ccn with transformation ccn
vault write /data-protection/masking/transform/role/ccn transformations=ccn

#create a transformation of type masking using a template (defined in next step )
#and assign role ccn to it that we created earlier
vault write /data-protection/masking/transform/transformation/ccn \
        type=masking \
        template="card-mask" \
        masking_character="#" \
        allowed_roles=ccn

#create the template for masking
vault write /data-protection/masking/transform/template/card-mask type=regex \
        pattern="(\d{4})-(\d{4})-(\d{4})-\d{4}" \
        alphabet="builtin/numeric"

#test if you are able to mask a Credit Card number
vault write /data-protection/masking/transform/encode/ccn value=2345-2211-3333-4356

(GitHub)vault-transform-masking.sh

KMIP及びHSM連携

コンプライアンスを遵守するために、KMIPを利用する伝統的なアプリケーションとストレージやHSMsとVaultを連携することができます。

KMIP及びHSM連携

KMIP

VaultはKey Management Interoperability Protocolをサポートしており、Vault自身をNetAppVMware、MySQL 等に対するKMIPサーバとして構成することができます。

HSM

Vaultは、PKCS #11※3に準拠するHSMとの連携をサポートします

※3 RSAセキュリティにより考案された公開鍵暗号標準の一つで、暗号化トークンを作成及び操作するためのAPIを指す。

マルチテナンシー

Vaultは、名前空間及びインスタンス化したマルチKMIPサーバを提供します。

マルチテナンシー

フルディスク暗号化

KMIPプロトコルをサポートするストレージシステムは、暗号化したディスクにアクセスするためのキーをVaultから取得して提供することができます。

透過的なデータ暗号化

KMIPを有効化したデータベースアプリケーションは、暗号化したデータをVaultから取得したキーで復号します。

NetApp及びVMware

NetApp又はVMwareとの連携を検討している場合には、下記ブログを参考にしてください。

  1. HashiCorp Vault as an External Key Manager for NetApp Encryption
  2. Securing VMWare Data: A HashiCorp Vault KMIP Story

まとめ

  1. Vaultはクラウドセキュリティの基礎を提供します。
  2. Vaultは、KMIPHSM連携と共に、EaaSFPEデータマスキングといった優れたデータ保護機能を提供します。
  3. Vaultは、新たに独立した暗号化基盤を構築する際のアジリティを高め、同時にコストとリスクを削減します。
「Vault」に関するお問い合わせ

この記事は役に立ちましたか?

はい いいえ
関連サービス
Vault(ヴォルト)