You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform调用GCP Secret Manager创建Cloud SQL用户认证失败排查

排查Terraform创建Cloud SQL Postgres 15用户登录失败问题

问题场景

通过Terraform从Google Secret Manager读取秘钥,将其同时作为Cloud SQL Postgres 15用户的用户名和密码。执行terraform apply后用户创建成功(用户名显示为预期的aStrongPassword123),但登录时提示FATAL: password authentication failed;通过Cloud Console UI创建的用户可正常登录。

原因分析

Secret Manager中存储的秘钥大概率包含末尾换行符或前后空白字符:

  • 当秘钥值赋值给google_sql_user的name字段时,Cloud SQL会自动过滤无效空白字符,因此用户名显示正常;
  • 但password字段会完整保留这些隐藏字符,导致实际生效的密码是aStrongPassword123\n(带换行符),和你输入的预期值不匹配,最终触发认证失败。

解决方案

使用Terraform内置的trim()函数对Secret Manager获取的secret_data进行处理,去除前后所有空白字符(包括换行、空格、制表符等)。修改后的代码如下:

data "google_secret_manager_secret_version" "cloud-sql-admin-user-password" {
  secret  = "cloud-sql-admin-user-password"
  version = "latest"
  project = var.project_id
}

resource "google_sql_user" "new-user" {
  name     = trim(data.google_secret_manager_secret_version.cloud-sql-admin-user-password.secret_data)
  instance = google_sql_database_instance.cloud_sql.name
  password = trim(data.google_secret_manager_secret_version.cloud-sql-admin-user-password.secret_data)
}

验证步骤

  1. 执行terraform apply更新用户配置;
  2. 使用预期的密码值尝试登录,即可正常完成认证。

额外验证:可以通过以下gcloud命令确认Secret Manager中的秘钥是否包含多余字符:

gcloud secrets versions access latest --secret=cloud-sql-admin-user-password | cat -A

如果输出末尾带有$符号,说明秘钥确实包含换行符。

内容的提问来源于stack exchange,提问作者Thanh Tran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 23:40:20