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) }
验证步骤
- 执行
terraform apply更新用户配置; - 使用预期的密码值尝试登录,即可正常完成认证。
额外验证:可以通过以下gcloud命令确认Secret Manager中的秘钥是否包含多余字符:
gcloud secrets versions access latest --secret=cloud-sql-admin-user-password | cat -A
如果输出末尾带有$符号,说明秘钥确实包含换行符。
内容的提问来源于stack exchange,提问作者Thanh Tran
相关产品推荐
相关产品推荐

