HashiCorp から新しいツール Vault がリリースされました。credentialや機密情報的なものを管理するためのツール。例によって参考訳です。変なところありましたら、ご指摘いただけると助かります。
Vault – HashiCorp
https://hashicorp.com/blog/vault.html
※今回も一応書いておきますと、本blogでの投稿は私個人の意志によるものであり、所属する組織の意見を代表するものでもなく、仕事でもなく、誰からの指示をうけているわけでもなく、すべて興味本位であり、ぶっちゃけ好き勝手に書いています。これまでも、これからも。
■ Vault
機密情報を管理するツール
今日私達は Vault という安全な機密情報の管理と暗号化データ転送を行うツールを発表します。credential や API 鍵の保管から、ユーザ・サインアップ用のパスワードの暗号化に至るまで、Vault は全ての機密情報を管理するソリューションを意図しています。
最新のシステムが必要とするのは、複数の機密情報です。例えば、データベース向けの credential や、外部サービスの API キー、サービス指向アーキテクチャの通信用 credential 等です。何の機密情報に誰がアクセスしているかを理解することは非常に難しく、多くはプラットフォーム固有のものです(依存します)。鍵のローリングを追加し、安全なストレージ上で、そして詳細な監査ログ(audit log)を得るにはカスタム・ソリューションを用いずにできませんでした。Vault はこれらの問題を全て解決します。
Vault は既に非常に大きなインフラ上においてデプロイ済みです。私達は Vault の未来と、私達が信じている素晴らしいツールを、まさに今日皆さんが使い始められることに興奮しています。
詳細については、以下を読み進めてください。
“Vault is one giant leap forward for practical security in a cloud environment. – Rob Witoff, Director at Coinbase”
(Vault はクラウド環境における実践的なセキュリティを、大きく飛躍するものだ – Coinbase ディレクター Rob Witoff 氏)
■ 機能
私達のオープンソース・プロジェクトにおいて、Vault は初期リリースで最も機能が豊富なものです。Vault は皆さんが期待する機密情報の管理という基本基本だけでなく、いくつかの新しい機能も提供します。そして、現代的な優れた運用に至るための境界、という範囲を広げることにつながると、私達は信じています。
詳細は後述しますが、ここではまず Vault の主な機能を列挙します:
* 安全な機密情報ストレージ ( Secure secret storage ):任意のキー・バリュー情報を Vault に保管できます。これらの情報は一貫性のあるストレージに書き込まれる前に暗号化されるので、単なるストレージでは十分得られなかった機密情報に関するアクセスを提供します。Vaultはディスクだけでなく、Consul 等にも書き込めます。
* 動的な機密情報 ( Dynamic secrets ):Vault は AWS や SQL データベースのように、複数のシステム向けにオンデマンドで機密情報を生成することができます。例えば、アプリケーションが S3 バケットにアクセスする必要があるとき、Vault に credential を訊ねると、Vault はオンデマンドで適切な権限を持つ AWS キーペアを生成します。動的に生成した後、使う必要がなくなれば Vault は自動的にそれらの情報を無効化します。
* 貸与と更新 ( Leasing and renewal ):Vault における全ての機密情報は、それと結び付けられる貸与先の情報を持ちます。貸与が終わると、Vault は自動的に機密情報を無効化しします。クライアントは組み込み済み(ビルトイン)の API を使って、新しく情報を更新できます。
* 無効化 ( Revocation ):Vault は機密情報の無効化機能を内蔵しています。Vault が無効化できるのは単一の情報だけでなく、ツリー情報も扱えます。例えば、Vault は特定のユーザにおける読み込み全ての権限を無効化するか、特定のタイプに対する全ての権限を無効化できます。無効化機能は、不正侵入時におけるシステムの整理時、鍵のローリング(差し替え)を手助けします。これらはまた、組織において”brake glass”(ガラスを割る)ような手順の計画と訓練もできるようになります。
* データ暗号化 ( Data encryption ):Vault はデータの暗号化・複合化を保管せずに行えます。この機能によって、セキュリティ・チームによる暗号化パラメータの決定や、開発者は SQL データベースといった、各々の暗号方式で設計された場所上に、暗号化データをおく必要がなくなります。
* Auditing ( 監査 ):Vault の全てのアクセスは、複数の監査用バックエンドに送信できます。これにはVault のあらゆる種類のアクセス、例えば成功や失敗、設定、データへのアクセス等を含みます。監査ログは syslog やファイル等へ送信できます。複数の監査バックエンド機能により、監査ログの冗長化された複製を実現します。
* 複数の認証方式 ( Multiple authentication methods ):Vault は認証に関する複数の方式(それぞれ独立しています)を取り込んでいますので、自分の組織にとって相応しいものを選ぶことができます。バージョン 0.1 でサポートしているのは、トークン、ユーザ名/パスワード、GitHub、certificates 等です。将来的には、更に多くものが追加されるでしょう。
■ 機密情報 ( Secrets )
Vault の目標は機密情報の管理です。元も基本的なレベルに含まれるのは、機密情報を安全に Vault に対して読み書きすることです。Vault はこれらを、とても簡単に行います:
$ vault write secret/foo value=bar Success! Data written to: secret/foo $ vault read secret/foo Key Value lease_id secret/foo/9c5f3cf1-1239-0160-4311-d6544fd1018c lease_duration 2592000 value bar $ vault delete secret/foo Success! Deleted 'secret/foo'
メモ:上の例や Vault が提供する全ての機能は、HTTP API を使っても同様に使えます。
機密情報を読み込むとき、Vault は書き込まれているリース情報( leasing information )も同時に返します。リース( leasing;貸与 ) とは Vault の中核となるコア機能です。Vault における全ての機密情報は、lease (貸与情報) を持ちます。機密情報の利用者は lease によって、機密情報が リース期限 ( lease period ) に至るまで適切な権限でアクセスできます。しかし、最終期限を越えると、機密情報による全ての権限が無効化されます。これにより、クライアントは期限を定期的に更新するよう強制し、Vault は監査ログに情報を記録したり、期限更新を拒否させたりする機会をもたらします。
機密情報を手動で書き込むときに、過去のリース期限も手動で無効化できます。しかしながら、Vault は動的な機密情報をサポートしており、自動的に無効化した後、次のものを扱えるようにします。
■ 動的な機密情報 ( Dynamic Secrets )
最近の世界は全てが API 指向 ( API-driven ) であり、多くのシステムがプログラム的にアクセス権限の生成機能も提供しています。Vault は “dynamic secrets”(動的な機密情報)機能を提供しているので、これらよりも優位です。機密情報はオンデマンドで生成できるだけでなく、自動的な無効化もサポートしています。
Vault バージョン 0.1 において動的生成に対応しているのは、AWS、SQL、Consul の credential 群です。
この機能がもたらす力は計り知れません(非常に大きなものです)。credential でシステムにアクセスする際、機密情報をディスクに書き込む必要がなくなります。Vault を使ってアクセスすることで、メモリ上に保管され、使う必要が無くなれば自動的に無効化されるのです。アプリケーションのインスタンスが対応できるのなら、グローバルの credential セット、それら単一のキー利用を無効化できるでしょう。
最も革新的な部分は、SQL credential 向けの機能で見られます。動的な SQL credentials によって、全てのアプリケーションが新しく生成された SQL ユーザによってアクセスできるようになります。PostgreSQL のようなシステムでは、Vault は VALID UNTIL フィールドをセットし、PostgreSQL 自身がユーザを自動的に無効化するでしょう。
動的な機密情報の読み込みとは、次のようなものです:
$ vault read postgresql/creds/production Key Value lease_id postgresql/creds/production/8ade2cde-5081-e3b7-af1a-3b9fb070df66 lease_duration 3600 password 56b43bc3-b285-4803-abdf-662d6a105bd0 username vault-root-1430141210-1847
ここで見えるのは単純な機密情報です! 違いはユーザ名とパスワードは読むことができません。そして 3600 秒(リース期間 = lease_duration で表示される秒数)で、期限が延長されない限り、Vault は自動的に SQL ユーザを削除します。
覚えておいていただきたいのは、このような作業は全て API からも同様に行えます。アプリケーションが API を使うことができれば、機密情報はディスクに書き込まれたり、どこかに複製されることもありません。
■ 安全性 ( Security )
これまでの記事によって、Vault を使って機密情報を読み書きすることが簡単であり、少し楽しそうに見えてきたでしょう。しかし最も重要なのは、これらのユーザビリティではなく、機密情報の安全さを確保するところです。私達はセキュリティを非常に重要なものとして扱い、Vault の安全さを業界におけるベストプラクティスとして活かします。
Vault におけるデータ保管の暗号化には、256 ビットの AES in GCM モードをランダム生成ノンス( randomly gemerated nonce;一度しか使わないランダムな生成値)を用います。暗号化はバックグラウンドのストレージ・ドライバに送られる前に、メモリ上で処理されます。この方法を用いているので、ストレージ側で非暗号化データを一切参照できません。
キーとして用いられるデータの暗号化にも、同様に 256 ビット AES in GCM モードを用います。これは master key (マスター・キー)と呼びます。暗号化された暗号化鍵はバックグラウンドのストレージに保管されます。このマスター・キーは Shamir’s Secret Sharing (シャミアの秘密分散法)を用いて分割されます。Shamir’s Secret Shairng によって、単一の利用者(Vault も含みます)によるデータの復号化ができないことを確実にします。データの復号化をするには、Vault の unseal (暗号解除)のために、閾値の鍵(デフォルトでは3ですが、変更可能です)が必要となります。3つの鍵は各々が異なっているのを前提としています。
Vault の暗号解除は、全て HTTP over TLS の API コールを用います。TLS が無効化されていてはならず、サーバーもクライアント同様に実装されていなければいけません。
Vault に対する全ての API コールは、個々に認証情報を得る必要があります。この認証情報は、複数のメタデータに割り当てられます(マップされます)。認証情報とメタデータに関する情報は、全て監査ログに書き込まれます。例えば、GitHub 認証を使う時、GitHub ユーザ名と、そのユーザの組織名 ( organization )が監査ログに記録されます。認証が得られた場合は、そのクライアントのフィンガープリントをログに記録します。
Vault 内部では、データは複数のバックエンドに分割して保管されます。例えばデータを「secret/foo」に書き込むとするとき、既に PostgreSQL の credential を「postgresql/creds」から読み込んでいるときは、こことは異なる機密情報バックエンドと通信する必要があります。各々のバックエンドは、バックエンドのデータ参照を禁止しています。そのため、「secret/foo」のバックエンドは「postgresql/cred」のデータにアクセスできません。これは ACL とは異なります。バックエンド自身は単純に他のバックエンドに割り当てられているデータのことを知らないからです。これにより Vault が悪意ある活動から守ることを確実なものとします。
更に書き加えますと、Vault は 6 週間にわたり、 50 もの組織や企業においてクローズド・ベータとして提供されていました。私達は Vault のリリースに関するレビューにあたって、とりわけセキュリティに関する興味・バックグラウンドに関する会社のセキュリティ・チームと接触しています。私達は複数の企業から基本的な承認を得られ、Vault が私達を強く前進させる強力な基礎となることを確認しています。
以上が Vault のセキュリティに関する簡単な概要です。詳細な説明に関しては Vault security model と Vault architecture をご覧ください。
■ HashiCorp 製 ( HashiCorp Built )
HashiCorp は DevOps 問題を、技術的かつ便利に解決するためのソリューションを構築します。私達が選んだ技術とはショートカット(近道)をするものではありません。同様に重要なのは、私達のツールを使ったり運用したりする経験に対するショートカットもとらないことです。その結果、HashiCorp が作るツールは安定しており、スケーラブルであり、簡単に使い、操作できます。
Vault はそのようにして作られた6番目のツールです。’私達は Vagrant、Packer、serf、Consul、Terraform も同様に構築してきました。Vault はこれら他のツールと一緒に使うこともできますが、使わなくても構いません。私達は Vault を他のツールと統合することをすすめます。例えば Packer 向け夫 AWS credential を得るために Vault を使えるように。
私達は Vault を誇りに思い、皆さんに使い始めてもらうことに興奮しています。免責事項として、Vault をインフラやセキュリティにおける重要なピースになり得ます。そのため、バージョン 0.1 においては、私達はプロダクション(本番環境)における利用は推奨しません。しかし、多くの企業で既に Vault を本番環境でデプロイしており、私達はそれらを確固たるものにすべく邁進します。
“Operationally, Vault promises to significantly simplify and enhance the security against internal threats and other service lifecycle management challenges. Based on our diligence and initial testing. HashiCorp has released another solid product that the industry can benefit from. — Sean Chittenden, Operation Architect at Groupon”
(運用において、Vault は極めてシンプルであり、セキュリティに関する内部の教委や他のサービスのライフサイクル管理の課題を解決することを約束します。私達の努力や初期テストをもとに、HashiCorp は業界が利益が得られるような新しい独立したプロダクトをリリースしました。 — Sean Chittenden 氏 グルーポン社オペレーション・アーキテクト)
■ 更に詳しく
Vault に関してより詳細を知りたい場合は、Vault のウェブサイトを訪れてください。ホームページから「Launch Interactive Tutorial」(双方向チュートリアルの起動)をクリックすると、ブラウザ上で直接 Vault の全てを操作できます!
次のステップにすすむには、以下のページをご覧ください:
* Intro (はじめに)ー intro セクションは Vault とは何かの詳細説明や、どのように動作するか、どのような場面で使えるかを、手短な getting started guide を通して提供しており、Vault の使い始めや機能を学ぶことができます。
* Internals(内部) – internal セクションは高度なトピックですが、Vault 内部に関する詳細を扱います。Vault を使い始めるのには必要ありませんが、Vault のデプロイを考えているのなら読むことを推奨します。
* Comparison to other software(他のソフトウェアとの比較)- Vault と他のソフトウェアの違いについて知りたければ、このページをご覧になり、詳細を比較ください。
* GitHub – Vault のソースコードは GitHub でホストされており、必要があれば参照できます。私達はVault の内部実装を理解するよりも前に、まずどのような動作するか、ドキュメントを読むことを推奨します。
■ 続き
■ 参考URL
Vault – HashiCorp
https://hashicorp.com/blog/vault.html
Vault
https://www.vaultproject.io/
(追記)5/8 シャミルの分散鍵共有→シャミアの秘密分散法、に書き換えました。thanks to @nekoruriさん!
いい情報ありがとうございます!w