LoginSignup
8
4

More than 5 years have passed since last update.

Terraform入門 - RDSのパスワード自動生成

Posted at

概要

TerraformでRDSを立てる時にPasswordに入れる値ってどうしてますか?

方法

主にはterraform/variablesに書いてある方法

  1. 環境変数で渡す方法
    • export TF_VAR_secret_key=bar
    • -var 'secret_key=bar'
  2. 標準入力で渡す方法
    • variableをnullで定義しておく : variable "secret_key" {} (対話形式で入力が出来る)
  3. 自動生成する方法
  4. 固定で書いてしまう方法

課題

(1) の方法の場合、envファイルかコマンド実行時に毎回パラメーターを渡すかしないといけなくてめんどくさい。envファイルをいろんなひとに配るのもめんどくさい。けどenvを持ってる人じゃないと実行できない。

(2) の方法の場合、実行時に毎回聞かれる。(嘘の値を入れてもPasswordの更新は走らないわけだけどとてもめんどくさい)

(3) は(1)と(2)に比べればまともに運用しやすい。tfファイルにはコードは残らないので良い。

(4) はtfファイルにパスワード平文残していまう。

どの手法を使ってもtfstateファイルに平文が残ってしまう。tfstateファイルの管理方法によるが、ひと目に見えるrootパスワードというのはいかがなものだろう

解決方法

(3) で作って、その後手動でrootパスワードを更新してあげるのが安全に運用できそうだと思う。本当のrootパスワードはパスワードマネージャーで管理かな。

実装

(3)の実装は以下の感じです。

terraform version : 0.8.8

resource "random_id" "db_pswd" {
  byte_length = 8
  prefix      = "w)2v_r"
}

~~

resource "aws_rds_cluster" "aurora-cluster" {
    ~~
  master_password        = "${random_id.db_pswd.b64}"
    ~~
}

  • prefixは 0.8.8 からのattributeです。base64だと記号が含まれないので、ちょっとしたお気持ちでつけてみました。(作成後に手動変更もするので気持ちの問題だと思います…)

おまけ

random_idは以下の様な値がとれます

random_id.db_pswd:
  id = DRbsI2S5vck
  b64 = w)2v_rDRbsI2S5vck
  b64_std = w)2v_rDRbsI2S5vck=
  b64_url = w)2v_rDRbsI2S5vck
  dec = w)2v_r942218400924646857
  hex = w)2v_r0d26fc2364b9bdc9

8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4