ファニーボーン

プログラムなどについて書いていこうと思います。

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はかなり柔軟なので 、これからどんどん導入の場面が増えるのかなと思っています。