如何在 Terraform 中使用 secret manager 创建 Aurora Serverless 数据库集群
How to create Aurora Serverless database cluster with secret manager in Terraform
我一直在阅读此页面:https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/rds_cluster
那里的例子主要是针对配置的数据库,我是无服务器数据库的新手,是否有一个 Terraform 示例来创建无服务器 Aurora 数据库集群 (SQL db),使用存储在秘密管理员?
非常感谢。
创建无服务器极光的基本示例是:
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"
}
}
我不确定你想用 Secret Manager 做什么。从你的问题中不清楚,所以我提供了任何例子。
我猜你想随机化 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 = "!#$%^*()-=+_?{}|"
}
接受的答案将仅使用 pre-set 密码创建 Aurora RDS 实例——但不包括 Secrets Manager。使用 Secrets Manager 是个好主意,这样您的数据库 和 应用程序(Lambdas、EC2 等)就可以从 Secrets Manager 访问密码,而无需 copy/paste到多个位置(例如应用程序配置)。
此外,通过使用 random_password
对密码进行变形,它将以明文形式存储在您的 terraform.tfstate
文件中,这可能是一个问题。要解决此问题,您还需要启用 Secrets Manager Automatic Secret Rotation.
自动旋转是 Terraform 的一种高级配置。涉及:
- 部署可访问 RDS 实例和 Secret 的 Lambda
- 通过 aws_secretsmanager_secret_rotation 资源配置旋转。
AWS provides ready-to-use Lambdas 用于许多常见的旋转场景。具体的 Lambda 将根据数据库引擎(MySQL vs. Postgres vs. SQL Server vs. Oracle 等)以及您是否将连接到数据库而有所不同您正在轮换的相同凭据。
例如,当秘密轮换过程是这样的:
- 调用轮换 lambda,Secrets Manager 会将密钥名称作为参数传递
- Lambda 将使用秘密中的详细信息(数据库主机、Post、用户名、密码)连接到 RDS
- Lambda 将生成一个新密码和运行“更新密码”命令,这可能因数据库引擎而异
- Lambda 会将新凭证更新到 Secrets Manager
要使所有这些正常工作,您还需要考虑 Lambda 需要的权限——例如与 RDS 实例的网络连接和对 read/write 机密的 IAM 权限。
如前所述,它有点高级——但会导致 Secrets Manager 成为密码的唯一持久位置。一旦设置完成,它就可以很好地工作,并且您的应用程序可以安全地从 Secrets Manager 检索密码(最后一个提示——可以在您的应用程序中缓存秘密以减少 Secrets Manager 调用 但是请务必在连接失败时刷新该缓存,以便您的应用程序将处理自动轮换)。
我一直在阅读此页面:https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/rds_cluster
那里的例子主要是针对配置的数据库,我是无服务器数据库的新手,是否有一个 Terraform 示例来创建无服务器 Aurora 数据库集群 (SQL db),使用存储在秘密管理员?
非常感谢。
创建无服务器极光的基本示例是:
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"
}
}
我不确定你想用 Secret Manager 做什么。从你的问题中不清楚,所以我提供了任何例子。
我猜你想随机化 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 = "!#$%^*()-=+_?{}|"
}
接受的答案将仅使用 pre-set 密码创建 Aurora RDS 实例——但不包括 Secrets Manager。使用 Secrets Manager 是个好主意,这样您的数据库 和 应用程序(Lambdas、EC2 等)就可以从 Secrets Manager 访问密码,而无需 copy/paste到多个位置(例如应用程序配置)。
此外,通过使用 random_password
对密码进行变形,它将以明文形式存储在您的 terraform.tfstate
文件中,这可能是一个问题。要解决此问题,您还需要启用 Secrets Manager Automatic Secret Rotation.
自动旋转是 Terraform 的一种高级配置。涉及:
- 部署可访问 RDS 实例和 Secret 的 Lambda
- 通过 aws_secretsmanager_secret_rotation 资源配置旋转。
AWS provides ready-to-use Lambdas 用于许多常见的旋转场景。具体的 Lambda 将根据数据库引擎(MySQL vs. Postgres vs. SQL Server vs. Oracle 等)以及您是否将连接到数据库而有所不同您正在轮换的相同凭据。
例如,当秘密轮换过程是这样的:
- 调用轮换 lambda,Secrets Manager 会将密钥名称作为参数传递
- Lambda 将使用秘密中的详细信息(数据库主机、Post、用户名、密码)连接到 RDS
- Lambda 将生成一个新密码和运行“更新密码”命令,这可能因数据库引擎而异
- Lambda 会将新凭证更新到 Secrets Manager
要使所有这些正常工作,您还需要考虑 Lambda 需要的权限——例如与 RDS 实例的网络连接和对 read/write 机密的 IAM 权限。
如前所述,它有点高级——但会导致 Secrets Manager 成为密码的唯一持久位置。一旦设置完成,它就可以很好地工作,并且您的应用程序可以安全地从 Secrets Manager 检索密码(最后一个提示——可以在您的应用程序中缓存秘密以减少 Secrets Manager 调用 但是请务必在连接失败时刷新该缓存,以便您的应用程序将处理自动轮换)。