Read access key from Vault with Terraform
ここ最近terraformのvaultプロバイダについて試していました。
その成果として、terraformで管理している個人サーバのアクセスキーをvaultで管理し、terraformで利用してみます。
これまで
main.tfのあるディレクトリでdirenvを使い、アクセスキーを環境変数で設定していました。
export DIGITALOCEAN_TOKEN="XXXXXXXX"
これから
vaultにアクセスキーを格納し、terraformから呼び出すようにしました。
data "vault_generic_secret" "digitalocean" {
path = "secret/digitalocean"
}
provider "digitalocean" {
token = "${data.vault_generic_secret.digitalocean.data["token"]}"
}
vaultへの値の格納は手で行っています(機密なのでコード化したくないため)。
vault write secret/digitalocean token=XXXXXXXX
今後やりたいこと
terraform内で使っていて、現状環境変数から取得している他の機密情報に関してもvaultに移行したい。その際、vaultモジュールを作ってmain.tfと切り離す(main.tfをシンプルに保つため)。
機密情報へのアクセスにvaultのauthバックエンドを使ってgithub認証やgoogle認証をかけたい。terraform apply実行時にgithubやgoogleのパスワードが要求されるイメージ。毎度要求されるのは面倒なのでリース期間を設定する(24時間は再認証無しでokとか)。
感想
実行する環境に依存しないでterraform applyが出来るようになった!
実行環境で必要なのはvaultのURLとトークンのみという最低限な状態なのが素晴らしい。間違えてアクセスキーをコミットしてしまうことも防げる。
最悪vaultのURLとトークンをコミットしてしまっても、vaultのauthバックエンドとトークンのリース期間を設定していればリース期間がよほど長くなければアクセスキーの流出を防げる可能性が高くなる。
引き続きvaultいい感じに使う方法を模索していくぞ!