BUNSEN

個人的な学習ログ

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_secretaws_secretsmanager_secret_versionを使用する。

実行

$ terraform apply
~~~~~~
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.

以下のように確認。

f:id:ahyt910:20210704125436p:plain
AWS Secrets Manager

f:id:ahyt910:20210704132123p:plain
AWS Secrets Manager-Secret

うまく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" {
│ 

f:id:ahyt910:20210704141748p:plain
AWS Secrets Manager-Deleted Secret