【问题标题】:Issue when using Terraform to manage credentials that access RDS database使用 Terraform 管理访问 RDS 数据库的凭据时出现问题
【发布时间】:2021-06-13 23:05:07
【问题描述】:

我通过 Terraform 创建了一个秘密,该秘密是用于访问在 Terraform 中定义的 RDS 数据库,而在秘密中,我不想包括 usernamepassword,所以我创建了一个空的然后在 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 找不到 usernamepassword 的字符串,这会导致错误,有没有人有更好的方法来实现这个?感觉在 Secret Manager 中手动创建秘密更容易。

【问题讨论】:

    标签: amazon-web-services amazon-rds terraform-provider-aws aws-secrets-manager


    【解决方案1】:

    您可以生成一个 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)
    }
    

    【讨论】:

      猜你喜欢
      • 2021-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多