はじめに
HashiCorpのVaultについて興味を持ち、チュートリアル(INTERACTIV TUTORIAL)を実施ましたので、基本操作についてまとめておきます。
Hashi Corp Vault とは?
機密情報を管理するツール
基本用語
seal
- 機密情報が読み書き出来ない状態
unseal
- 機密情報が読み書きできる状態
-
seal
状態からunseal
状態にするためにはKey
が必要 - 複数の
key
を払い出しておき、unseal
に必要なkey
の数を設定することもできる
INTERACTIV TUTORIALとは
INTERACTIV TUTORIALはブラウザ上でVaultの基本的な操作を学べるチュートリアルです。
解説は英語ですが、事前にVaultの概要を知っていれば太字になっているコマンドを実行するだけで基本的な操作は理解できると思います。
INTERACTIV TUTORIALの内容
- Initializing and unsealing your Vault(初期化、seal状態からunseal状態にする)
- Authorizing your requests to Vault(認証する)
- Reading and writing secrets(機密情報を読み書きする)
- Sealing your Vault(unseal状態からseal状態に戻す)
補足:
チュートリアルでは以下のコマンドを実行することで解説を進めたり、戻したりできます
next : 次の解説に進む
previous : 前の解説に戻る
Initializing and unsealing your Vault
初期化
vault init
コマンドでVaultを初期化するとkey
とtoken
が払い出されます。
以下のコマンドで初期化するとkeyが1つ払い出され、unsealに必要なkeyの数も1つになります。
$ vault init -key-shares=1 -key-threshold=1
Key 1: 07f2d4a0a494e771efe9e3a4b9e7c81b13a59dd6aaff4e3fa07cd5e41ea2e147
Initial Root Token: eddc04cc-fc0f-cac2-09b9-d29c64dcb44b
オプションで指定する数字を変更することで払い出すkeyの数やunselaに必要なkeyの数を変更できます。
例えば、keyを5つ払い出し、unsealに必要なkeyの数を3つとする場合は、以下のコマンドになります。
$ vault init -key-shares=5 -key-threshold=3
補足
初期化直後はVaultがseal状態なので認証やデータの読み書きは実施できません。
$ vault auth <root token>
Error validating token: Error making API request.
URL: GET http://127.0.0.1:47143/v1/auth/token/lookup-self
Code: 503. Errors:
* Vault is sealed
unseal
vault unseal
コマンドでVaultをunseal状態にします。
引数には初期化時に払い出させたKey
を入力します。
unseal状態(Sealed: false
)になると機密情報にアクセスできるようになります。
$ vault unseal <key>
Sealed: false
Key Shares: 1
Key Threshold: 1
Unseal Progress: 0
補足
unsealに必要なkeyの数を複数に指定していた場合、1つのkeyを入力するだけではunseal状態(Sealed: false
)になりません。
$ vault unseal <key>
Sealed: true
Key Shares: 5
Key Threshold: 3
Unseal Progress: 1
必要な数のkeyが入力されるとunseal状態(Sealed: false
)になります。
$ vault unseal <key>
Sealed: false
Key Shares: 5
Key Threshold: 3
Unseal Progress: 0
Authorizing your requests to Vault
認証
vault auth
コマンドで認証を行います。
Vaultがunseal状態になっても機密情報を読み書きするためにはtokenでの認証が必要になります。
チュートリアルでは初期化時に払い出されたroot token
を利用して認証します。
$ vault auth <root token>
Successfully authenticated!
token: eddc04cc-fc0f-cac2-09b9-d29c64dcb44b
token_duration: 0
token_policies: [root]
Reading and writing secrets
機密情報の書き込み
vault write
コマンドで機密情報の書き込みを行います。
$ vault write secret/hello value=world
Success! Data written to: secret/hello
機密情報の読み込み
vault read
コマンドで機密情報の読み込みを行います。
$ vault read secret/hello
Key Value
lease_duration 2592000
value world
補足
複数の項目を書き込むこともできます。
$ vault write secret/test value1=aaa value2=bbb value3=ccc
Success! Data written to: secret/test
$ vault read secret/test
Key Value
lease_duration 2592000
value1 aaa
value2 bbb
value3 ccc
Sealing your Vault
seal
vault seal
コマンドでVaultをseal状態にします。
seal状態にすることで認証や機密情報の読み書きが行えなくなります。
$ vault seal
Vault is now sealed.
$ vault read secret/hello
Error reading secret/hello: Error making API request.
URL: GET http://127.0.0.1:47143/v1/secret/hello
Code: 503. Errors:
* Vault is sealed
補足
unsealに必要なkeyの数を複数に指定した場合でもvault seal
コマンドが1回実行されればseal状態になります。
基本コマンド
# 初期化
$ vault init -key-shares=1 -key-threshold=1
# unseal
$ vault unseal <key>
# seal
$ vault seal
# 認証
$ vault auth <token>
# 機密情報の読み込み
$ vault read secret/hello
# 機密情報の書き込み
$ vault write secret/hello value=world