我一直在阅读此页面:https ://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/rds_cluster
该示例主要针对预置数据库,我是无服务器数据库的新手,是否有使用存储在密钥管理器中的密钥创建无服务器 Aurora 数据库集群(SQL db)的 Terraform 示例?
非常感谢。
我一直在阅读此页面:https ://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/rds_cluster
该示例主要针对预置数据库,我是无服务器数据库的新手,是否有使用存储在密钥管理器中的密钥创建无服务器 Aurora 数据库集群(SQL db)的 Terraform 示例?
非常感谢。
我猜你想随机化master_password?你可以这样做:
master_password = random_password.DatabaseMasterPassword.result
SSM 参数可以这样创建:
resource "aws_ssm_parameter" "SSMDatabaseMasterPassword" {
name = "database-master-password"
type = "SecureString"
value = random_password.DatabaseMasterPassword.result
}
随机密码可以这样定义:
resource "random_password" "DatabaseMasterPassword" {
length = 24
special = true
override_special = "!#$%^*()-=+_?{}|"
}
创建无服务极光的基本示例是:
resource "aws_rds_cluster" "default" {
cluster_identifier = "aurora-cluster-demo"
engine = "aurora-mysql"
engine_mode = "serverless"
database_name = "myauroradb"
enable_http_endpoint = true
master_username = "root"
master_password = "chang333eme321"
backup_retention_period = 1
skip_final_snapshot = true
scaling_configuration {
auto_pause = true
min_capacity = 1
max_capacity = 2
seconds_until_auto_pause = 300
timeout_action = "ForceApplyCapacityChange"
}
}
我不确定你想对秘密经理做什么。从你的问题中不清楚,所以我提供了任何例子。
接受的答案只会使用预设密码创建 Aurora RDS 实例,但不包括 Secrets Manager。使用 Secrets Manager 是个好主意,这样您的数据库和应用程序(Lambda、EC2 等)就可以从 Secrets Manager 访问密码,而无需将其复制/粘贴到多个位置(例如应用程序配置)。
此外,通过对密码进行地形改造,密码random_password
将以明文形式存储在您的terraform.tfstate
文件中,这可能是一个问题。要解决此问题,您还需要启用Secrets Manager Automatic Secret Rotation。
自动旋转是 Terraform 的一种高级配置。它涉及:
AWS为许多常见的轮换场景提供了现成的 Lambda 。特定的 Lambda 将因数据库引擎(MySQL、Postgres、SQL Server、Oracle 等)以及您是否使用与您轮换的相同凭据连接到数据库而异。
例如,当秘密轮换时,过程类似于:
要使所有这些工作,您还需要考虑 Lambda 所需的权限——例如与 RDS 实例的网络连接和 IAM 读取/写入密钥的权限。
如前所述,它有点先进——但导致 Secrets Manager 成为密码的唯一持久位置。一旦设置好,它就可以很好地工作,并且您的应用程序可以安全地从 Secrets Manager 检索密码(最后一个提示 - 可以在您的应用程序中缓存密钥以减少 Secrets Manager 调用,但请确保在连接失败时刷新该缓存,以便您的应用程序将处理自动轮换)。