如何使用秘密管理器在Terraform中创建Aurora Serverless数据库集群

4

您可以查看此博客文章:https://alfilatov.com/posts/how-to-create-aws-rds-cluster-with-imported-sql-dump-from-s3-using-terraform - Alex Filatov
3个回答

4

我猜您想要随机化主密码吧?您可以像这样做:

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 = "!#$%^*()-=+_?{}|"
}

这个方案比被接受的答案更好,因为它将密码存储到了 Secrets Manager 中(其他应用程序可以通过编程方式检索它)。需要注意的一件事是,密码仍将以明文形式存储在 terraform.tfstate 中,并且将保持静态。我添加了一个答案,描述了启用自动密钥轮换所需的额外步骤,可以按照预定时间表自动更改密码。 - STW

4
创建无服务器Aurora的基本示例如下:
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"
  }  
}

我不确定你想用秘密管理器做什么。从你的问题中无法清楚了解,请看以下示例。


1
被接受的答案只会创建带有预设密码的Aurora RDS实例,但不包括Secrets Manager。使用Secrets Manager是一个好主意,这样你的数据库和应用程序(如Lambda、EC2等)就可以从Secrets Manager访问密码,而无需将其复制/粘贴到多个位置(如应用程序配置)。
此外,通过使用random_password来建立密码,它将以明文形式存储在您的terraform.tfstate文件中,这可能会引起关注。要解决这个问题,您还需要启用Secrets Manager自动密钥轮换
自动轮换是Terraform的一种较为高级的配置。它涉及: AWS为许多常见的轮换场景提供了现成的Lambda函数。具体的Lambda函数将取决于数据库引擎(MySQL vs. Postgres vs. SQL Server vs. Oracle等),以及您是否使用相同的凭据连接到数据库进行轮换。
例如,当密钥轮换时,流程如下:
- 调用轮换lambda函数,Secrets Manager将密钥名称作为参数传递 - Lambda函数将使用密钥中的详细信息(DB主机、端口、用户名、密码)连接到RDS - Lambda函数将生成一个新密码并运行“更新密码”命令,该命令可以根据DB引擎而变化 - Lambda函数将新凭据更新到Secrets Manager 为了使所有这些工作正常运行,您还需要考虑Lambda所需的权限,例如与RDS实例的网络连接以及读/写秘密的IAM权限。
正如所提到的那样,这有点高级——但结果是Secrets Manager成为密码的唯一持久位置。一旦设置完成,它的工作非常顺畅,您的应用程序可以安全地从Secrets Manager检索密码(最后一个提示——在应用程序中缓存密钥以减少Secrets Manager调用是可以的,但一定要在连接失败时清除该缓存,以便您的应用程序能够处理自动轮换)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接