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いい感じに使う方法を模索していくぞ!