amazon-web-services - 使用 Terraform 管理访问 RDS 数据库的凭据时出现问题
问题描述
我通过 Terraform 创建了一个机密,该机密用于访问也在 Terraform 中定义的 RDS 数据库,并且在机密中,我不想包含username
and password
,所以我创建了一个空机密,然后在 AWS 控制台中手动添加凭据.
然后在 RDS 定义中:
resource "aws_rds_cluster" "example_db_cluster" {
cluster_identifier = local.db_name
engine = "aurora-mysql"
engine_version = "xxx"
engine_mode = "xxx"
availability_zones = [xxx]
database_name = "xxx"
master_username = jsondecode(aws_secretsmanager_secret_version.db_secret_string.secret_string)["username"]
master_password = jsondecode(aws_secretsmanager_secret_version.db_secret_string.secret_string)["password"]
.....
问题是当我应用 terraform 时,因为秘密是空的,所以 Terraform 找不到字符串username
,password
这会导致错误,有没有人有更好的方法来实现这个?感觉在 Secret Manager 中手动创建秘密更容易。
解决方案
您可以生成一个 random_password 并使用aws_secretsmanager_secret_version
.
这是一个例子:
resource "random_password" "default_password" {
length = 20
special = false
}
variable "secretString" {
default = {
usernae = "dbuser"
password = random_password.default_password.result
}
type = map(string)
}
resource "aws_secretsmanager_secret" "db_secret_string" {
name = "db_secret_string"
}
resource "aws_secretsmanager_secret_version" "secret" {
secret_id = aws_secretsmanager_secret.db_secret_string.id
secret_string = jsonencode(var.secretString)
}
推荐阅读
- spring - Spring Batch 的问题
- apache-spark - 如何通过 Apache Livy 设置 --master、--deploy-mode、--driver-class-path 和 --driver-java-options?
- java - java.lang.IllegalArgumentException:org.hibernate.hql.internal.ast.QuerySyntaxException:用户未映射[来自用户]
- c# - C# SqlCommands 不起作用
- node.js - 代理在 nginx 上传递 Socket.IO 连接不起作用
- lightgbm - LightGBM 选择回归目标(GPU)
- ios - iOS 如何在 Apple 的私有 API 中找到字符串
- c# - 如何在列表中 StreamWrite 画笔的颜色
? - c# - C#我想对exe进行mac地址验证
- mysql - mysql 说 root@localhost 是使用空密码创建的!但是什么也没发生。我错过了什么?