DBクレデンシャル
まずは現状確認
vault secrets list
database シークレットを追加
vault secrets enable -path=lob_a/workshop/database database
MySQLのDBの接続情報を設定
内容はこんなもの
dbname:mysqldatabase
username:hogehoge
password:fugafuga
# DB接続情報の設定 mysqldatabase というDBの場合、ここではapp,app-log2つのroleを許可しています。
vault write lob_a/workshop/database/config/mysqldatabase \
plugin_name=mysql-database-plugin \
connection_url="{{username}}:{{password}}@tcp(localhost:3306)/" \
allowed_roles="app","app-long" \
username="hogehoge" password="fugafuga"
# DB接続情報設定の確認
vault read lob_a/workshop/database/config/mysqldatabase -format=json
# DBログイン確認
mysql -u hogehoge -phugahuga
# 設定したrootパスを変更しておきましょう
vault write -force lob_a/workshop/database/rotate-root/mysqldatabase
→以降↑のrootパスは使えない
DB接続用の Vault のroleの作成
vault write lob_a/workshop/database/roles/app-long \
db_name=mysqldatabase \
creation_statements="CREATE USER '{{name}}'@'%' IDENTIFIED BY '{{password}}';GRANT ALL ON my_app.* TO '{{name}}'@'%';" \
default_ttl="1h" max_ttl="24h"
ちなみに、
TTLが終了すると、Vault は MySQL データベースからクレデンシャル情報を削除します。TTLの延長は、まだ到達していない場合にのみ機能します。
また、max_ttl パラメータで指定された期間を超えて延長することはできません。
roleに紐づくクレデンシャルを生成
# VaultAPIでapp-longというroleに対してクレデンシャルを生成
curl --header "X-Vault-Token: root" "http://localhost:8200/v1/lob_a/workshop/database/creds/app-long" | jq .
# vault コマンドの場合こちら
vault read lob_a/workshop/database/creds/app-long
# 生成された(表示された)クレデンシャルでログイン
# ↑で表示された<username><password>代入
mysql -u <username> -p<password>
# クレデンシャル情報の更新 たとえばTTLを2400秒へ
# ↑で表示された<lease_id>代入
vault write sys/leases/renew lease_id="<lease_id>" increment="2400"
# 延長されていること
vault write sys/leases/lookup lease_id="<lease_id>"
クレデンシャルを破棄
vault write sys/leases/revoke lease_id="<lease_id>"