【Terraform】Terraform ~ AWS Secrets Manager ~

■ はじめに

https://dk521123.hatenablog.com/entry/2023/04/05/000224
https://dk521123.hatenablog.com/entry/2023/04/09/104204
https://dk521123.hatenablog.com/entry/2023/04/08/220411

の続き。

今回は、Terraform で AWS Secrets Manager について扱う。

目次

【1】Secrets Manager
【2】公式ドキュメント
【3】サンプル
【4】補足:ランダム文字列生成「random_password」「random_string」
 1)使用上の注意
 2)サンプル

【1】Secrets Manager

* Secrets Manager については、以下の関連記事を参照のこと

機密データの管理 ~ Secrets Manager 編 ~
https://dk521123.hatenablog.com/entry/2020/03/12/220717

【2】公式ドキュメント

* 以下のAPI を使う

aws_secretsmanager_secret
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/secretsmanager_secret
aws_secretsmanager_secret_version
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/secretsmanager_secret_version

【3】サンプル

# [0]-1 To define setting values
locals {
  env = "dev" # or stage or prod
  aws_region = "us-west-2"
}

# [0]-2:To specify AWS
provider "aws" {
  region = local.aws_region
  default_tags {
    tags = {
      env = local.env
    }
  }
}

# [Option] Create password
resource "random_password" "demo_password" {
  length  = 20
  special = false
}

# Set your secret values
variable "demo_secret_values" {
  default = {
    key1 = "secret_value1"
    key2 = "secret_value2"
    key3 = random_password.demo_password.result
  }

  type = map(string)
}

# aws_secretsmanager_secret
resource "aws_secretsmanager_secret" "your_secret" {
  name = "your_secret_name"
  description = "This is a just sample secret..."
}

# aws_secretsmanager_secret_version
resource "aws_secretsmanager_secret_version" "your_secret_version" {
  secret_id     = aws_secretsmanager_secret.your_secret.id
  secret_string = jsonencode(var.demo_secret_values)
}

【4】補足:ランダム文字列生成「random_password」「random_string」

random_password
https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/password
random_string
https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/string

1)使用上の注意

* random_stringは、パスワードには使用しないこと
 => 生成結果が標準出力として表示されるため

https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/string

より抜粋
~~~~~
This resource does use a cryptographic random number generator.
~~~~~

2)サンプル

# 実験コード
resource "random_string" "experiment1" {
  length = 16
  special = false
  override_special = "_%@"
}

resource "random_password" "experiment2" {
  length = 16
  special = true
  override_special = "_%@"
}

output "experiment1" {
  value = random_string.experiment1.result
  sensitive = false
}

output "experiment2" {
  value = random_password.experiment2.result
  sensitive = true
}

出力例

# 事前に「terraform init」「terraform plan」は行っておくこと
#  => ★1は、random_stringを使っていて内容が出力される
#  => ★2は、random_passwordを使っており出力されない

$ terraform apply

・・・略・・・
random_string.experiment1: Refreshing state... [id=idl8DgafJYy8S9Nf] << ★1
random_password.experiment2: Refreshing state... [id=none] << ★2
・・・略・・・

Outputs:

experiment1 = "idl8DgafJYy8S9Nf" << ★1
experiment2 = <sensitive> << ★2

参考文献

https://ahyt910.hateblo.jp/entry/2021/07/04/142112
https://engineering.mobalab.net/2021/03/25/handling-secrets-with-terraform/

関連記事

Terraform ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/04/05/000224
Terraform ~ AWS S3 ~
https://dk521123.hatenablog.com/entry/2023/04/09/104204
Terraform ~ AWS IAM ~
https://dk521123.hatenablog.com/entry/2023/04/12/214311
Terraform ~ AWS Glue ~
https://dk521123.hatenablog.com/entry/2023/04/08/220411
Terraform ~ Docker ~
https://dk521123.hatenablog.com/entry/2023/04/10/193239
Terraform ~ 機密情報の扱いを考える ~
https://dk521123.hatenablog.com/entry/2023/05/18/005103
機密データの管理 ~ Secrets Manager 編 ~
https://dk521123.hatenablog.com/entry/2020/03/12/220717
ScalaAWS SDK / Secrets Managerサンプル ~
https://dk521123.hatenablog.com/entry/2023/04/03/012600
機密データの管理 ~ Secrets Manager / AWS CLI 編 ~
https://dk521123.hatenablog.com/entry/2022/06/14/110641