TerraformでSecretsManagerに秘匿情報を登録する。
はじめに
在宅が始まってからやる気が出ない&職場も変わり忙しいかったと言い訳ばかりで久しぶりの投稿です。
本題ですが、最近AWS上にKubernetesをTerraformで構築するプロジェクトに参加してました。その中で秘匿情報を構築資材内から排除しようという流れになり、AWS Secrets Managerを使用することになりました。流れとしてTerraformから登録することになり調べて実装したので書き残しておきたいと思います。
環境
$ terraform --version Terraform v1.0.1 on linux_amd64 + provider registry.terraform.io/hashicorp/aws v3.48.0
資材
variable "my_secrets" { default = { key1 = "secret_value1" key2 = "secret_value2" } } resource "aws_secretsmanager_secret" "bunsen" { name = "bunsen_blog_secrets" } resource "aws_secretsmanager_secret_version" "bunsen" { secret_id = aws_secretsmanager_secret.bunsen.id secret_string = jsonencode(var.my_secrets) }
まずは上記資材を作成。
リソースはaws_secretsmanager_secretとaws_secretsmanager_secret_versionを使用する。
実行
$ terraform apply ~~~~~~ Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
以下のように確認。
うまくSecretが作成されていることを確認。
秘匿情報外だし
variable "secret_value1" {} variable "secret_value2" {} locals { my_secrets = { key1 = var.secret_value1 key2 = var.secret_value2 } } resource "aws_secretsmanager_secret" "bunsen" { name = "bunsen_blog_secrets" } resource "aws_secretsmanager_secret_version" "bunsen" { secret_id = aws_secretsmanager_secret.bunsen.id secret_string = jsonencode(local.my_secrets) }
最後に変数定義の箇所を変更し、資材から秘匿情報を削除。
$ terraform apply var.secret_value1 Enter a value: secret1 var.secret_value2 Enter a value: secret2 ~~~
apply時に秘匿情報を入力させることができる。
後片付け
Secrets Managerは即削除はされず数日間残り続けます。 その間同名のSecretを作成することはできない為、改めてSecretを作成したい場合はSecret名を変更する必要があります。
$ terraform destroy $ terraform apply ~~~ │ Error: error creating Secrets Manager Secret: InvalidRequestException: You can't create this secret because a secret with this name is already scheduled for deletion. │ │ with aws_secretsmanager_secret.bunsen, │ on main.tf line 11, in resource "aws_secretsmanager_secret" "bunsen": │ 11: resource "aws_secretsmanager_secret" "bunsen" { │