3

我一直在阅读此页面:https ://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/rds_cluster

该示例主要针对预置数据库,我是无服务器数据库的新手,是否有使用存储在密钥管理器中的密钥创建无服务器 Aurora 数据库集群(SQL db)的 Terraform 示例?

非常感谢。

4

3 回答 3

4

我猜你想随机化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 = "!#$%^*()-=+_?{}|"
}
于 2021-01-13T06:48:51.193 回答
2

创建无服务极光的基本示例是:

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"
  }  
}

我不确定你想对秘密经理做什么。从你的问题中不清楚,所以我提供了任何例子。

于 2021-01-08T05:22:33.823 回答
0

接受的答案只会使用预设密码创建 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,Secrets Manager 将密钥的名称作为参数传递
  • Lambda 将使用密钥中的详细信息(数据库主机、帖子、用户名、密码)连接到 RDS
  • Lambda 将生成一个新密码并运行“更新密码”命令,该命令可能因数据库引擎而异
  • Lambda 会将新凭证更新到 Secrets Manager

要使所有这些工作,您还需要考虑 Lambda 所需的权限——例如​​与 RDS 实例的网络连接和 IAM 读取/写入密钥的权限。

如前所述,它有点先进——但导致 Secrets Manager 成为密码的唯一持久位置。一旦设置好,它就可以很好地工作,并且您的应用程序可以安全地从 Secrets Manager 检索密码(最后一个提示 - 可以在您的应用程序中缓存密钥以减少 Secrets Manager 调用,但请确保在连接失败时刷新该缓存,以便您的应用程序将处理自动轮换)。

于 2022-02-02T22:32:29.210 回答