使用Terraform在Cloud SQL中创建一个非cloudsqlsuperuser用户。

4
我希望通过Google Terraform提供程序创建的任何给定用户的特权受到限制。默认情况下,创建的任何用户都被放置在“cloudsqlsuperuser”组中,任何新创建的数据库都将该角色/组作为所有者。这样,通过GCP控制台或“google_sql_user” Terraform资源创建的任何用户都可以完全控制以类似方式创建的任何数据库(或已创建的数据库)。
到目前为止,我们能想到的最好方法是通过单次运行k8s作业创建和更改用户。这似乎是一个迂回的方法,尤其是考虑到如果我们想通过Terraform进行管理,那么必须稍后手动导入该资源。
是否有更好的方法创建具有权限限制于单个应用程序特定数据库的用户?
1个回答

5

我对这种行为也感到困惑。也许不是你想要的答案,但如果你可以使用GCP IAM帐户,则用户在PostgreSQL实例中创建时不会分配角色。

可以从"gcloud sql users create"或terraform模块"google_sql_user"创建3种类型的帐户:"CLOUD_IAM_USER"、"CLOUD_IAM_SERVICE_ACCOUNT"或"BUILT_IN"。

如果未指定,则默认为内建类型。CLOUD_IAM_USER和CLOUD_IAM_SERVICE_ACCOUNTS将不会被分配任何角色。

我们使用这些帐户进行集成,因为IAM在很多方面都很有用(在与SQL Auth Proxy结合使用时,无需在数据库级别管理密码是一个主要优点)。

BUILT_IN账户(即老式的需要postgresql用户名和密码的账户)由于某些原因被授予了“cloudsqlsuperuser”角色。

在没有被允许在GCP上拥有超级用户角色的情况下,这是你可以获得的最高权限,因此在我(和你)看来,这是一种奇怪的默认设置。


你是如何使用IAM账户登录的?我已经设置了Cloud SQL Instance UserCloud SQL Client角色的IAM账户,并且正在使用-enable_iam_login参数运行代理,但我甚至无法使用IAM账户登录到数据库。我需要授予新创建的IAM账户哪些权限才能至少登录? - Sergio Garcia
1
您需要启用CloudSQL实例以接受IAM认证用户:"gcloud sql instances patch <instance-name> --database-flags cloudsql.iam_authentication=on" - mallen
1
  1. 添加IAM用户"gcloud sql users create "name@domain" --instance=<instance-name> --type=cloud_iam_user"。
  2. cloud_sql_auth_proxy所需的唯一角色是roles/cloudsql.client。
- mallen
我检查了你说的一切,但最终我意识到我在代理上使用了一个IAM账户,在数据库上使用了另一个账户。你必须在代理和数据库连接上使用相同的账户!感谢你的帮助! - Sergio Garcia
不是绝对正确的。您可以使用SQL身份验证代理创建SSL隧道。然后,您可以在psql连接字符串上使用不同的用户名/密码组合。有点丑陋但是可行的。在这种特定情况下,您不需要在代理上使用-enable_iam_login。 - mallen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接