首页 > 解决方案 > 使用 Terraform 在 Cloud SQL 中创建不是 cloudsqlsuperuser 的用户

问题描述

我想限制我通过 Google Terraform 提供程序创建的任何给定用户的权限。默认情况下,创建的任何用户都放在cloudsqlsuperuser组中,并且创建的任何新数据库都将该角色/组作为所有者。这使通过 GCP 控制台或google_sql_userTerraform 资源创建的任何用户可以完全控制以类似方式创建(或曾经)创建的任何数据库。

到目前为止,我们能想到的最好的方法是通过单次运行的 k8s 作业创建和更改用户。充其量,这似乎是迂回的,特别是考虑到如果我们想通过 Terraform 管理该资源,以后必须手动导入该资源。

是否有更好的方法来创建权限仅限于单个应用程序特定数据库的用户?

标签: google-cloud-sqlterraform-provider-gcp

解决方案


我也对这种行为感到困惑。它可能不是您想要的答案,但如果您可以使用 GCP IAM 帐户,则用户将在 PostgreSQL 实例中创建且没有角色。

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

如果未指定,则默认为内置类型。CLOUD_IAM_USER 和 CLOUD_IAM_SERVICE_ACCOUNTS 创建时没有任何角色。

我们使用这些是因为与 IAM 的集成在很多方面都很有用(在数据库级别不管理密码是一个主要优点,尤其是与 SQL Auth 代理一起使用时)。

BUILT_IN 帐户(即 old school 需要一个 postgres 用户名和密码)由于某种原因被授予“cloudsqlsuperuser”角色。

在没有被允许在 GCP 上的超级用户角色的情况下,这对我(和你)来说是一个奇怪的默认值。


推荐阅读