■ はじめに
今回は、パスワードなどの機密情報を Terraform でどう扱うかを考えて ここにちょこちょこまとめていく。 できれば、実践したい。
目次
【0】今回学べたこと 【1】機密情報の扱いを考える 案1:tfvars ファイルで変数で切り出す 案1の例 案2:環境変数「TF_VAR_」を使う 案2の例 【2】DBのパスワードについて考える 補足:random_password について
【0】今回学べたこと
[1] tfvars ファイル [2] Terraform の 環境変数「TF_VAR_」 [3] resource "random_password" によるパスワード生成 などなど...
【1】機密情報の扱いを考える
案1:tfvars ファイルで変数で切り出す
* TFファイルは、Gitで管理 * tfvars ファイルは、除外する って運用。
tfvars ファイルについて
* 「terraform.tfvars」又は「*.auto.tfvars」については、 自然に読み込まれる
案1の例
info.tf
variable password { type = string default = "" }
terraform.tfvars
password = "hello_world12345"
コマンド例
# 「terraform console」でコンソールモードにして変数を確認 $ terraform console > var.password "hello_world12345"
案2:環境変数「TF_VAR_」を使う
* 「TF_VAR_[変数名]」で環境変数を使用することができる
案2の例
ex1: コンソールによる確認
$ set TF_VAR_password="used_TFVAR123_hello" # 「terraform console」でコンソールモードにして変数を確認 $ terraform console > var.password "\"used_TFVAR123_hello\"" << 「"」まで変数として扱われてしまうので注意 > ^C # Linux(bash)なら、「export TF_VAR_password=used_TFVAR123_hello」 $ set TF_VAR_password=used_TFVAR123_hello $ terraform console > var.password "used_TFVAR123_hello" > ^C
ex2: TFコードで環境変数を使う
# 環境変数を受ける変数を定義する variable "input" { type = string } output "result" { value = "Hello, ${var.input}!!" }
コマンド例
set TF_VAR_input=World terraform init terraform apply ... Outputs: result = "Hello, World!!" << ★
【2】DBのパスワードについて考える
# Step1: random_password でパスワード生成 # https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/password resource "random_password" "password" { length = 20 special = true override_special = "!#$%&*()-_=+[]{}<>:?" } # Step2: Step1 のパスワードをDBに設定 # https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/db_instance resource "aws_db_instance" "example" { instance_class = "db.t3.micro" allocated_storage = 64 engine = "mysql" username = "root" password = random_password.password.result } # Step3: AWS SSM(Systems Manager パラメータストア)などに保持 # => 後は、システム側では、SSM経由でパスワードを取得するっといった流れ # https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/ssm_parameter resource "aws_ssm_parameter" "secret" { name = "/dev/database/password/master" description = "The DB password" type = "SecureString" value = random_password.password.result tags = { environment = "dev" } }
補足:random_password について
* 以下の関連記事を参照のこと
Terraform ~ AWS Secrets Manager ~
https://dk521123.hatenablog.com/entry/2023/04/11/152801
関連記事
Terraform ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/04/05/000224
Terraform ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/12/09/222057
Terraform ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2023/05/03/000000
Terraform ~ AWS IAM ~
https://dk521123.hatenablog.com/entry/2023/04/12/214311
Terraform ~ AWS S3 ~
https://dk521123.hatenablog.com/entry/2023/04/09/104204
Terraform ~ AWS MSK ~
https://dk521123.hatenablog.com/entry/2023/05/14/122215
Terraform ~ AWS Secrets Manager ~
https://dk521123.hatenablog.com/entry/2023/04/11/152801