カテゴリ:Vault

2015-05-01 Fri


Vault での revoke/renew の挙動 [Vault]


vault read aws/creds/deploy


で作成した時は標準では lease_duration が 3600秒(1時間)

で、待ってみたところ、下記のようなログを吐いて、1時間でアカウントは削除されました。

2015/05/01 06:44:24 [INFO] expire: revoked 'aws/creds/deploy/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'


AWSのダッシュボードで確認しても、きちんと消されています。

この時間、renew コマンドで、lease_duration の時間を変更できるのかな?と、今度は複数のアカウントを作成後に、下記を実行

$ vault renew aws/creds/deploy/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 60
Key Value
lease_id sys/renew/aws/creds/deploy/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/e4fb0482-13c9-246e-9999-xxxxxxxxxxxx
lease_duration 1485
$ vault renew aws/creds/deploy/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 60
Key Value
lease_id sys/renew/aws/creds/deploy/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/38e283e3-7a35-ecc8-609f-xxxxxxxxxxxx
lease_duration 1313


なんか、期待した挙動じゃないなぁ……仕様をきちんと理解してないので、バグなのかそうでないのかの判断すらつかない


$ vault renew aws/creds/deploy/yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy 60
Key Value
lease_id sys/renew/aws/creds/deploy/yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/82aeebd7-5a15-86fe-5a06-a95e18025b88
lease_duration 3584
$ vault renew aws/creds/deploy/yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy 3600
Key Value
lease_id sys/renew/aws/creds/deploy/yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/80697f7f-2d4e-3f39-e16f-b2a830b37241
lease_duration 115
$ vault renew aws/creds/deploy/yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy 3600
Key Value
lease_id sys/renew/aws/creds/deploy/yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/2ec09511-bcb7-7aab-813f-ba2f29473e6b
lease_duration 3589
$ vault renew aws/creds/deploy/yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy 3600
Key Value
lease_id sys/renew/aws/creds/deploy/yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/5eb02b99-a477-d0bd-c7ca-ae8f69b0bf61
lease_duration 117


3600秒が max で、カウンタが1周してる?だとしても、ちょっとおかしい。

https://github.com/hashicorp/vault/blob/master/api/SPEC.md

を見ると lease_duration_max が max値として使われるっぽいけど、どうやって確認すればいいか、よくわからないなぁ……

で、renew したアカウントは

2015/05/01 07:31:20 [ERR] expire: failed to revoke 'sys/renew/aws/creds/deploy/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/e4fb0482-13c9-246e-9999-xxxxxxxxxxxx': failed to revoke entry: secret is unsupported by this backend


といったログが出て、正常に revoke されないっぽい。もしかして、revoke 前に renew で延長がダメなのかと思ったけど、revoke されたあとは、延長不可。

$ vault renew aws/creds/deploy/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 3600
Renew error: Error making API request.
URL: PUT http://127.0.0.1:8200/v1/sys/renew/aws/creds/deploy/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Code: 400. Errors:
* lease not found


モヤモヤ……

$ vault version
Vault v0.1.1-dev (1dffd7899c1e6521a2352bf84317c1d5d9e6fbef)



2015-04-30 Thu


Vault を少し使ってみる [Vault]


HashiCorp社が出したVaultとはどういうものなのか
http://kiririmode.hatenablog.jp/entry/20150429/1430279218

Starting the Vault Server
https://www.vaultproject.io/intro/getting-started/dev-server.html

を参考に、少し触ってみる。

$ vault server -dev &


で起動する。ここで "Starting the Vault Server" の注意事項をすっ飛ばして書き込みをしようとすると

$ vault write secret/hello value=hello to=world
Error writing data to secret/hello: Put https://127.0.0.1:8200/v1/secret/hello: tls: oversized record received with length 20527


とエラーが出るので、VAULT_ADDR を設定しておくのと、Unseal key/root tokenをメモっておくのを忘れないようにする。

$ export VAULT_ADDR='http://127.0.0.1:8200'
$ vault write secret/hello value=hello to=world
Success! Data written to: secret/hello


今度は書けた。

$ vault read secret/hello
Key Value
lease_id secret/hello/bfa6ec06-ed0c-9f4b-c3aa-7d43fd770b0d
lease_duration 2592000
value hello
to world


読むのもOK。削除は deleteコマンド

$ vault delete secret/hello
Success! Deleted 'secret/hello'


サーバが動作しているかの確認には status コマンドを使う

$ vault status
Sealed: false
Key Shares: 1
Key Threshold: 1
Unseal Progress: 0

High-Availability Enabled: false


mount コマンドを使って AWSのバックエンドを mount することで、動的にポリシーに応じたユーザを生成することもできるようです。

$ vault mount aws
2015/04/29 23:12:11 [INFO] core: mounted 'aws/' type: aws
Successfully mounted 'aws' at 'aws'


ここまでは aws のaccount情報なしに実行できます。

二段階認証で、消してた access key と secret key を作って試しに投入。

$ vault write aws/config/root access_key=XXXXXXXXXXXXXXXXXXXX secret_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


$ vault read aws/config/root
Error reading aws/config/root: Error making API request.

URL: GET http://127.0.0.1:8200/v1/aws/config/root
Code: 500. Errors:

* unsupported operation


ということで、マニュアルの通り rootの access_key/secret_keyは読めません。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1426528957000",
      "Effect": "Allow",
      "Action": [
"ec2:*"
      ],
      "Resource": [
"*"
      ]
    }
  ]
}


を policy.json として作り

$ vault write aws/roles/deploy policy=@policy.json
Success! Data written to: aws/roles/deploy


で投入。

$ vault read aws/creds/deploy
Key Value
lease_id aws/creds/deploy/0d042c53-aa8a-7ce7-9dfd-310351c465e5
lease_duration 3600
access_key XXXXXXXXXXXXXXXXXXXX
secret_key XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


こんな感じで、指定したポリシーが適用されたユーザaccount生成されます(AWSのAPI叩きに行くので、ちょっと時間が掛かります)
実際 aws のダッシュボードから確認すると、vault-root... といったユーザが生成されてた。
なお、

$ vault read aws/creds/<ロール名>


するたびに、ユーザが複製されていきます。

Image

vault revoke aws/creds/deploy/<lease_id> で無効化も簡単(これまた API叩きに行くので、ちょっと時間が掛かります)

$ vault revoke aws/creds/deploy/0d042c53-aa8a-7ce7-9dfd-310351c465
Key revoked with ID 'aws/creds/deploy/0d042c53-aa8a-7ce7-9dfd-310351c465'.


revoke したあと、もう一度 aws のダッシュボードで確認したら、ユーザは削除されてました。lease_duration にある 3600秒経ったら、自動的に revoke されるのかは、ちょっと未検証。今日はこれまで。


2015-04-30 Thu


Vault のインストール [Vault]


http://vaultproject.io/downloads.html

ここに、

- Linux(32bit/64bit/ARM)
- MacOS X (32bit/64bit)
- Windows(32bit/64bit)

があるので、適当なものを選んでダウンロード。

zip ファイルですが、解凍すると、1ファイルだけ。

$ unzip vault_0.1.0_darwin_amd64.zip
Archive: vault_0.1.0_darwin_amd64.zip
  inflating: vault
$ ls
vault


他にも、ソースコードからコンパイルするでも可。

コンパイルするときは、vault repository を Cloneしてコードを取得

$ git clone https://github.com/hashicorp/vault
Cloning into 'vault'...
remote: Counting objects: 6468, done.
remote: Compressing objects: 100% (97/97), done.
remote: Total 6468 (delta 49), reused 0 (delta 0), pack-reused 6371
Receiving objects: 100% (6468/6468), 2.55 MiB | 1.37 MiB/s, done.
Resolving deltas: 100% (3993/3993), done.
Checking connectivity... done.


で、make dev

$ make dev
go generate ./...
> Getting dependencies...
> Removing old directory...
> Building...
Number of parallel builds: 8

--> darwin/amd64: github.com/hashicorp/vault
> Results:
total 27288
-rwxr-xr-x 1 kunitake staff 13M 4 30 10:19 vault


$GOPATHは、

$GOPATH/src/github.com/hashicorp/vault/main.go


となるように設定しておきます。

もし、Goのコンパイラを入れてないなら

https://golang.org/dl/

あたりからダウンロード & インストール。

ちなみに、gox が使われているので、もしインストールしていなければ、それも入れておきましょう。クロスコンパイルを楽にするツールです。

$ go get github.com/mitchellh/gox

$GOPATH/bin 以下にインストールされます。

$ sudo gox -build-toolchain
Password:
The toolchain build can't be parallelized because compiling a single
Go source directory can only be done for one platform at a time. Therefore,
the toolchain for each platform will be built one at a time.
--> Toolchain: darwin/386
--> Toolchain: darwin/amd64
--> Toolchain: linux/386
--> Toolchain: linux/amd64
--> Toolchain: linux/arm
--> Toolchain: freebsd/386
--> Toolchain: freebsd/amd64
--> Toolchain: openbsd/386
--> Toolchain: openbsd/amd64
--> Toolchain: windows/386
--> Toolchain: windows/amd64
--> Toolchain: freebsd/arm
--> Toolchain: netbsd/386
--> Toolchain: netbsd/amd64
--> Toolchain: netbsd/arm
--> Toolchain: plan9/386


これで make すると普通に、自分の環境のものがコンパイルされます。

$ make dev
go generate ./...
> Getting dependencies...
> Removing old directory...
> Building...
Number of parallel builds: 8

--> darwin/amd64: github.com/hashicorp/vault
> Results:
total 27288
-rwxr-xr-x 1 kunitake staff 13M 4 30 15:15 vault


gox は、クロスコンパイル用のツールなので

$ gox --osarch "linux/amd64"
Number of parallel builds: 8

--> linux/amd64: github.com/hashicorp/vault
$ file vault_linux_amd64
vault_linux_amd64: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, not stripped


みたいに、Linux 用の vault も、コンパイル可能です。


2015-04-30 Thu


Vaultとは [Vault]


HashiCorp社が出したVaultとはどういうものなのか
http://kiririmode.hatenablog.jp/entry/20150429/1430279218

Vault参考訳
http://pocketstudio.jp/log3/2015/04/29/vault/

が詳しいです。AWS Key Management Service (KMS)っぽいとの噂。