【发布时间】:2021-01-08 23:37:38
【问题描述】:
概述
- 创建 aws_secretsmanager_secret
- 创建 aws_secretsmanager_secret_version
- 将唯一生成的字符串存储为上述版本
- 使用 local-exec 配置器通过 bash 存储实际的安全字符串
- 在例如 RDS 实例部署中使用 secretsmanager 资源引用该字符串。
目标
- 将所有纯文本字符串排除在 S3 存储桶中的远程状态
- 使用 AWS Secrets Manager 存储这些字符串
- 设置一次,调用 Terraform 中的资源检索
问题
错误:Secrets Manager 秘密 “arn:aws:secretsmanager:us-east-1:82374283744:secret:Example-rds-secret-fff42b69-30c1-df50-8e5c-f512464a4a11-pJvC5U” 未找到版本“AWSCURRENT”
运行时terraform apply
问题
为什么不自动移动 AWSCURRENT 版本?我错过了什么吗?我的 bash 命令错了吗?该值不会写入 secret_version,但会正确引用它。
查看实际执行命令的 main.tf 代码:
provisioner "local-exec" {
command = "bash -c 'RDSSECRET=$(openssl rand -base64 16); aws secretsmanager put-secret-value --secret-id ${data.aws_secretsmanager_secret.secretsmanager-name.arn} --secret-string $RDSSECRET --version-stages AWSCURRENT --region ${var.aws_region} --profile ${var.aws-profile}'"
}
代码
main.tf
data "aws_secretsmanager_secret_version" "rds-secret" {
secret_id = aws_secretsmanager_secret.rds-secret.id
}
data "aws_secretsmanager_secret" "secretsmanager-name" {
arn = aws_secretsmanager_secret.rds-secret.arn
}
resource "random_password" "db_password" {
length = 56
special = true
min_special = 5
override_special = "!#$%^&*()-_=+[]{}<>:?"
keepers = {
pass_version = 1
}
}
resource "random_uuid" "secret-uuid" { }
resource "aws_secretsmanager_secret" "rds-secret" {
name = "DAL-${var.environment}-rds-secret-${random_uuid.secret-uuid.result}"
}
resource "aws_secretsmanager_secret_version" "rds-secret-version" {
secret_id = aws_secretsmanager_secret.rds-secret.id
secret_string = random_password.db_password.result
provisioner "local-exec" {
command = "bash -c 'RDSSECRET=$(openssl rand -base64 16); aws secretsmanager put-secret-value --secret-id ${data.aws_secretsmanager_secret.secretsmanager-name.arn} --secret-string $RDSSECRET --region ${var.aws_region} --profile ${var.aws-profile}'"
}
}
variables.tf
variable "aws-profile" {
description = "Local AWS Profile Name "
type = "string"
}
variable "aws_region" {
description = "aws region"
default="us-east-1"
type = "string"
}
variable "environment" {}
terraform.tfvars
aws_region="us-east-1"
aws-profile="Example-Environment"
environment="dev"
【问题讨论】:
标签: bash amazon-web-services security terraform aws-secrets-manager