Vaultの本番導入を見据えて
概要
タイトルは今にもVaultを本番導入する勢いのようですが、触ってみた系の記事です。
最近、遅ればせながらDevOps界の雄 Hashicorpさんが開発しているVaultが気になっていました。
今回は、業務で実際導入するにあたって、試しにローカル環境でZookeeperをbackendに設定し、基本的な操作を行いました。
動機
例えば、ソースの中にDBのuser/passwordやAPIキーなどをベタ書きしちゃってることありません?
しかも、それぞれのプロジェクト毎にいちいち、その情報書いたりしてません?
ぼくは、めちゃくちゃあります。むしろ、それしかない。
心苦しくはあったのですが、良さそうな手もなかったので目をつむっていました。
Hashicorpが開発するVaultを導入することで、そういった情報を管理しちゃおうっていうのが動機です。
Vault とは
機密情報を安全に管理するツールです。
2015年4月末にリリースされまして、最近 、0.5 がリリースされました。
基本的な機能としては、以下です。(参考:Introduction - Vault by HashiCorp)
・ Secure Secret Storage(安全に機密情報を保持)
・ Dynamic Secrets(動的に機密情報を管理)
・ Leasing and Renewal(機密情報の貸与と更新)
・ Data Encryption(データの暗号化)
・ Revocation(無効化)
入門
以下のチュートリアルでVaultの基本操作が大体わかりました。
Vaultのバージョンが上がって、若干異なるところもありますが、
日本語訳とても助かりました。
pocketstudio.jp
backendをZookeeperに
さて、入門が終わったところでとりあえず、backendをZookeeperに設定してみます。
なぜ、Zookeeperかと言いますと、業務でVaultを導入するにあたり、
既存のシステムで実績のあるZookeeperで使い始めようかなという構想。
Hashicorp的にはやはり、自社製品のConsulをbackendに使用するがmost recomendedだそうです。(Server Configuration - Vault by HashiCorp)
サンプルとしては、Consulの場合しか載っていなかったのでZookeeperでは以下のようにbackendを設定しました。
Jsonとも互換性のあるHCL(HashiCorp Configuration Language)で記述します。
example.hcl
# backendを"zookeeper"を指定 backend "zookeeper" { # localのZookeeperのアドレス address = "192.168.12.11:2181" # ZookeeperのNodeを指定 path = "vault" } # Vaultサーバー listener "tcp" { address = "127.0.0.1:8200" tls_disable = 1 }
さて、これで以下のコマンドを実行。
$ vault server -config=example.hcl
が、しかし、下記のようなえらーが発生。
Error initializing core: missing advertisement address
advertisementのaddressがないとのこと。
`VAULT_ADVERTISE_ADDR`の設定が必要でした。
$ export VAULT_ADVERTISE_ADDR='http://192.168.12.11:2181'
もう一度、以下を実行するとVaultサーバーが起動しました。
$ vault server -config=example.hcl
次は、実際にVaultで設定した値がZookeeperに書き込もれるかの確認。
チュートリアルでの同様に`vault init`を実行し、アンシールも実行。
vault authで初期化時のtokenを入力すればrootユーザとして操作できます。
試しに以下を実行します。
$ vault write secret/hello value=world
Zookeeperを確認すると、/vault/logical/{暗号化されたパス}/_hello のChildrenに
暗号化されたデータを確認することができました。
もちろん、以下で暗号化した値を取得できます。
$ vault read secret/hello Key Value lease_duration 2592000 value
所感
backendをZookeeperに設定し、ローカル環境でVaultの基本操作を行いました。
あとは、本番導入するにあたって、各サーバーとVaultの認証をどうしようとかも考えなきゃですね。
触ってみて感じたのですが、Vaultはかなり柔軟なので 、これからどんどん導入の場面が増えるのかなと思っています。