Google Cloud Platform

Cloud Spanner が Vault のストレージ バックエンドに

HashiCorp Vault は、Google Cloud Platform(GCP)をご利用のお客様に人気が高い、機密管理向けの強力なオープンソース ツールです。“secret management as a service”(サービスとしての機密管理)を提供し、暗号化されたキーバリュー ペアのスタティックな機密ストアや、その場でダイナミックに認証情報を生成する機密情報生成ツール、パススルーの暗号化サービスとして機能するため、アプリケーション側は独自の暗号化方法を用意する必要がありません。こうした Vault にとって Google Cloud が最良の運用プラットフォームとなるように、私たち Google は努力を続けています。

Vault を使用するには、データの永続化に使用する Vault ストレージ バックエンドなどの設定を事前に行わなければなりません。既存のストレージ バックエンドとしては、シングルテナントのものや高可用性をサポートするものがあります。また一部のストレージ バックエンドは、独自のデータセンターで動作したり、サードパーティ サービスへのアウトバウンド接続を必要としたりします。さらに、基礎をなすテクノロジーの運用上の知識を必要とするものや、設定なしで稼働するものもあります。

どのストレージ バックエンドを使用するかを決めるにあたっては、整合性、可用性、スケーラビリティ、レプリケーション、運用化、制度的な知識などの問題が複雑に絡み合うトレードオフについて考慮する必要があります。

このほど、こうした Vault のストレージ バックエンドとして Google Cloud Spanner が使用できるようになりました。高いスケーラビリティと強整合性を両立させた Cloud Spanner を土台に据えれば、Vault ユーザーは、リレーショナル データベースが持つすべての利点や、グローバルに分散されたデータストアのスケーラビリティ、さらにはフルマネージド サービスの可用性(マルチリージョン構成で 99.999 % の SLA)を手に入れることができます。

高性能のトランザクションとグローバルな整合性を備えた Cloud Spanner を Vault のストレージ バックエンドとして使用すると、次のようなメリットや機能が手に入ります。

  • 高可用性 : Vault ストレージ バックエンドは、Cloud Spanner 本来のデータ保存の高可用性に加えて、高可用性モードでの Vault の実行をサポートします。デフォルトでは、Vault はストレージ バックエンドが分散ロックやリーダー選出の機能を提供することを前提に、シングルテナントとして動作します。グローバルな分散環境で強整合性のトランザクションを可能にする Cloud Spanner なら、1 行の設定文できわめて可用性の高い Vault クラスタを実現できます。
  • トランザクション サポート : Vault ストレージ バックエンドは、更新および削除処理のバッチ トランザクションをオプションでサポートします。トランザクション サポートが得られない場合、プレフィクス全体の削除やクラスタのブートストラップといった大規模な操作では数百もの要求が必要になり、それによってシステムにボトルネックが生じたり、ストレージ バックエンドに過度な負担がかかったりする可能性が出てきます。Cloud Spanner は、Vault のストレージ バックエンドとして Vault のトランザクション インターフェースをサポートします。つまり、関連する更新 / 削除処理を集めてバッチを作り、Cloud Spanner に単一の API 呼び出しを行います。これにより、HTTP 要求やネットワークのオーバーヘッドが軽減されるだけでなく、非常に高速なバルク オペレーションが保証されます。
  • エンタープライズ グレードのセキュリティ : Cloud Spanner は他の Google サービスと同じセキュリティのベスト プラクティスに従っています。Cloud Spanner はデフォルトでデータを暗号化して保存し、IAM を用いて粒度の細かい権限管理を行います。Google のインフラストラクチャには、Google がカスタム設計した Titan セキュリティ チップGoogle のプライベート ネットワーク バックボーンなど、他社には見られない独自のセキュリティ機能が多数含まれています。
  • Google のサポート : このバックエンドは Google の開発者によって設計および開発され、Google のオープンソース プログラムを通じて提供されます。Vault コミュニティ全体とのオープンなコラボレーションが可能で、Google エンジニアリング チームのサポートも受けられます。

ダウンロードとインストール

この環境を作るには、HashiCorp Vault の最新バージョンをダウンロードしてインストールする必要があります。Google Cloud Spanner Vault ストレージ バックエンドが追加されたのは Vault 0.9.4(2018 年 2 月 20 日リリース)からなので、それ以降のものを実行するようにしてください。

次に、Vault データを格納するための Cloud Spanner インスタンスとスキーマを作成します。これらはウェブ インターフェースや API でも作れますが、ここではコマンドライン ツールの gcloud を用いた方法を紹介します。

  $ gcloud spanner instances create my-instance \
  --config=nam3 \
  --description=my-instance \
  --nodes=3
$ gcloud spanner databases create my-database --instance=my-instance
$ gcloud spanner databases ddl update my-database --instance=my-instance
--ddl="$(cat <<EOF
CREATE TABLE Vault (
  Key       STRING(MAX) NOT NULL,
  Value     BYTES(MAX),
) PRIMARY KEY (Key);
EOF
)"

続いて、Cloud Spanner Vault ストレージ バックエンドを指定した Vault 設定ファイルを作成します。

  # config.hcl
storage "spanner" {
  database   = "projects/my-default-project/instances/my-instance/databases/my-database"
}

この設定ファイルのもとで Vault を起動します。この例では Vault 組み込みの開発モードを使っています。このモードはベスト プラクティスではなく本番システム用でもありませんが、新しい Cloud Spanner Vault ストレージ バックエンドを手っ取り早く試せます。

  $ export VAULT_ADDR=http://127.0.0.1:8200
$ sudo vault server -dev -config=config.hcl

この過程で、Vault は認証を行い、Cloud Spanner に接続してデータ ストレージ レイヤを設定します。数秒後、テーブル データがウェブ インターフェースに表示され、データが保存されたことを確認できます。Vault はすでに起動して動作しています。

繰り返しになりますが、これは本番グレードの Vault インストールではありません。本番グレードの Vault インストールの詳細については、Vault 本番システム ハードニング ガイドを参照してください。

以下により、機密情報の作成、読み出し、更新、削除が可能になります。

  $ vault write secret/my-secret foo=bar

バックエンド設定オプションの詳細は、HashiCorp Vault Google Cloud Spanner ストレージ バックエンドのドキュメントをご覧ください。また、Cloud Spanner の詳細についてはこちらのドキュメントをご覧ください。

GCP での Vault の快適な実行のために

Cloud Spanner Vault ストレージ バックエンドを使用すれば、Cloud Spanner に備わる整合性、可用性、スケーラビリティ、レプリケーション、セキュリティといった機能を活用しながら、Vault 独自の高可用性要件を満たすことができます。

お客様のサポートに加え、継続的なパートナーシップの一環として HashiCorp との良好な関係が長く続いていることを私たちはうれしく思っています。新しいストレージ バックエンドにより、GCP 上で Vault を実行する企業ユーザーの皆さんが大きな成功を収めることを期待しています。

ぜひ Twitter で私たちをフォローしてください。また、質問があれば GitHub イシューにお寄せください。

* この投稿は米国時間 2 月 26 日、Staff Developer Advocate の Seth Vargo によって投稿されたもの(投稿はこちら)の抄訳です。

- By Seth Vargo, Staff Developer Advocate