秘密不要为数据库创建应有的相同密码 - terraform

问题描述 投票:0回答:1

这里创建一个随机密码:

resource "random_password" "password" {
  length  = 12  
  special = true
  override_special = "!#$%&*()-_=+[]{}:?"
}

这里我为数据库创建一个秘密:

resource "kubernetes_secret" "db_pass" {
  metadata {
    name = "db-pass"
  }
  data = {
    MYSQL_PASSWORD = "${aws_db_instance.database.password}"
    S3_ACCESS_KEY_ID : ""
    S3_SECRET_KEY : ""
    RABBITMQ_PASSWORD     = "${var.rabbitpassw}"
    RABBITMQ_ERLANGCOOKIE = "${var.erlangcookie}"
  }

  depends_on = [
    aws_db_instance.database,
    module.s3_bucket
  ]
}

那么这段代码应该使用数据库用于连接的随机密码:

resource "aws_db_instance" "database" {
  allocated_storage       = var.instance_storage_db
  max_allocated_storage   = var.max_storage_db
  engine                  = var.instance_engine_db
  engine_version          = var.instance_engine_version_db
  instance_class          = var.instance_size_db
  identifier              = "${var.cluster_name}-db-instance"
  db_name                 = "tester"
  username                = "admin"
  password                = random_password.password.result
  snapshot_identifier     = var.db_snapshot_id
  db_subnet_group_name    = aws_db_subnet_group.default.name
  vpc_security_group_ids  = [aws_security_group.db_sg.id]
  skip_final_snapshot     = var.skip_final_snapshot_db
  multi_az                = var.multi_az_db
  backup_retention_period = var.ret_period_db
}

我以前用过它,它工作正常,现在我创建新集群并秘密创建24个字符的密码,我无法使用mysql连接到RDS

创建硬编码密码时,与RDS的连接正常

grafana 随机密码也有同样的问题。

有人解决这个问题吗?

amazon-web-services terraform amazon-rds password-encryption secret-manager
1个回答
0
投票

首先,我将使用

random_password.password.result
作为 kubernetes 秘密的数据内容。您正在创建不必要的依赖关系。

当您在 aws_db_instance 资源中创建硬编码密码(不推荐)或

random_password.password.result
时,它会起作用,因为它使用真实内容。

但请记住,kubernetes Secret内容是用base64格式混合的。因此,当您创建资源时

kubernetes_secret
,它已经生成了带有 base64 的 random_password。

无论如何,你可以调试你的 kubernetes 秘密和随机密码的内容。

调试

即使使用sensitive = false,terraform的输出选项也不允许显示密码,但如果您有权访问纯文本teraform.tfstate,您可以找到随机密码的纯文本(类似于

"result": "V1dp81Dxr#nj",
)并检查它是否与类似查询结果匹配:

kubectl get secret db-pass -o jsonpath='{.data.MYSQL_PASSWORD}' -n namespace | base64 --decode | awk '{print $1}'

希望对你有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.