Vaultでバイナリファイルのread/write

2015.07.23

Vaultでバイナリファイルを扱う

Vaultではコマンドラインまたはhttpで値を指定したり、json形式のファイルを指定してその値を保存することができます。
バイナリファイル(画像やPDFなど)も扱うことが可能なので、今回はバイナリファイルの保存/取得方法について紹介します。

dev版のビルド

今回はdev版を使用して動作確認をするため、ここを参考に、ソースからビルドします。
GOPATH環境変数(なければ適当なパスを設定)以下にsrc/github.com/hashicorpを作成し、
githubからvaultのソースを取得します。

% cd $GOPATH/src/github.com/hashicorp
% git clone https://github.com/hashicorp/vault.git

ソースを取得したらビルドします。

% cd vault
% make dev

これでbinディレクトリにvaultが生成されるので、dev版を使用することができます。

% ./vault version                                                       
Vault v0.2.1-dev (8503f5b4b260145e5906c4105fe8a4aa799f444c)

バイナリファイルをread/writeする

では、バイナリファイルを使って動作確認してみましょう。
まずはvaultサーバをdevモードで起動しておき、VAULT_ADDRをexportしておきます。

% ./vault server -dev
・
・
% export VAULT_ADDR='http://127.0.0.1:8200'

バイナリファイルはbase64でエンコード/デコードしなければいけないので、base64コマンドでエンコードし、
writeコマンドで登録します。(@をつけるとファイル指定)

% base64 --input test.pdf --output base64.pdf
% ./vault write secret/mypdf binfile=@base64.pdf

ではreadしてみます。formatはbinaryを指定し、field(dev版で使用可能)を指定して、binfileフィールドのみを取得しています。
取得した結果をデコードし、ファイルに出力しています。

% ./vault read -format=binary -field=binfile secret/mypdf | base64 -D --output decode-test.pdf

これでバイナリファイルのwriteおよびreadができました。

参考サイトなど