1Password CLI経由で1Passwordのアイテムをdata sourceとして使うterraform-provider-opを作った。
以下の用のPostgreSQL providerのパスワードを自分のマシンの1Passwordからとってこれる。
provider "op" { } data "op_item" "postgres" { title = "my-postgres" } provider "postgresql" { username = "scott" password = data.op_item.postgres.password }
ローカルマシン以外の環境での実行が難しいので使いどころを選ぶが、便利なときは便利…のような気がする。
Terraform Shell plugin
よくよく調べたらすでに1PasswordにはShell pluginという仕組みがあってBetaであるものの1Password CLI経由でクレデンシャルをterraformに渡せるようだった。
あまりきちんと仕組みを把握していないが、以下のブログを読んだ感じ環境変数でクレデンシャルを渡せるように見えた。
data sourceほどの柔軟性はなさそうだけれど、公式が提供しているしtfstateに残らないのはよいかもしれない。
op run
あと全然知らなかったけど、1Password CLIにrun
というコマンドがあって、op run --- hoge command
と実行すると環境変数経由でhogeにクレデンシャルをわたす便利機能があった
export DB_PASSWORD="op://app-prod/db/password" op run -- printenv DB_PASSWORD
しらない便利機能が多い。
1Password Connect serverも調べよう