Closed6
terraformの変数を外部サービスから読み込む方法を調べる
こちらの記事を参考にする
外部サービスの候補はこんな感じかな
- Terraform Cloud
- AWS SecretsManager
- Azure/GoogleCloud等他のクラウドベンダでも提供しているやつ
- Hashicorp Vault
探せば他にもあるだろうけどまた今度
目指すところ
- terraformに使う情報の安全な管理
- tfvarsを使うのはセキュリティ観点から怖い
- 操作が簡単(API操作可能)であればなおよし
Terraform Cloud
は先日試したので省略
メリット
CDをterraform cloudが行っている場合、変数も同時に管理出来るのは楽
sensitiveにも出来る
デメリット
思いつかない。手動入力が手間?
vaultと組み合わせて使ったほうがセキュアではあるんだろうな
AWS SecretsManager
secretをつかってs3を作ってみます
secret作成
$ cat secret.json
{
"bucket_name": "test-bucket-20231231",
"tags": {
"Environment": "Dev",
"Comment": "YoiOtoshiwo"
}
}
$ aws secretsmanager create-secret --name tf-test-secret
--secret-string file://secret.json
secret取得、s3作成
data "aws_secretsmanager_secret_version" "main" {
secret_id = "tf-test-secret"
}
resource "aws_s3_bucket" "main" {
bucket = jsondecode(data.aws_secretsmanager_secret_version.main.secret_string)["bucket_name"]
tags = jsondecode(data.aws_secretsmanager_secret_version.main.secret_string)["tags"]
}
※平文のstringをsecretにしている場合は以下のように取得すればヨシです
平文のsecretを取得
# secret作成
$ aws secretsmanager create-secret --name MyS3BucketName --secret-string "test-bucket-20231231"
data "aws_secretsmanager_secret_version" "main" {
secret_id = "MyS3BucketName"
}
resource "aws_s3_bucket" "my_bucket" {
bucket = data.aws_secretsmanager_secret_version.main.secret_string
}
メリット
- AWSに寄せることが出来る
- 機密情報をAWSで管理している場合、terraformもそれに寄せることが出来る
デメリット
- AWSに依存してしまう。
- マルチベンダであったり、移行するとなったら手間かもしれない
- コードが見づらい
- localsあたりで整理することになるでしょうか
- コードの記述が増える
- SecretManagerの取得にIAMユーザ/ロールが必要
- 動的クレデンシャルの導入をしていない場合、IAMユーザの管理が手間です
- https://dev.classmethod.jp/articles/terraform-cloud-dynamic-provider-credentials/
Hashicorp Vault
以下の記事を参考にさせていただきました。
terraformに限らずすべてのシークレットを管理するのに有用みたい
特にデメリットも思いつかない。がTerraform Cloudの変数ですでにシークレットを運用している場合、即置き換え!となるかはわからない。
とりあえずおしまい
このスクラップは2023/12/31にクローズされました