google-cloud-sql - 使用 Terraform 在 Cloud SQL 中创建不是 cloudsqlsuperuser 的用户
问题描述
我想限制我通过 Google Terraform 提供程序创建的任何给定用户的权限。默认情况下,创建的任何用户都放在cloudsqlsuperuser
组中,并且创建的任何新数据库都将该角色/组作为所有者。这使通过 GCP 控制台或google_sql_user
Terraform 资源创建的任何用户可以完全控制以类似方式创建(或曾经)创建的任何数据库。
到目前为止,我们能想到的最好的方法是通过单次运行的 k8s 作业创建和更改用户。充其量,这似乎是迂回的,特别是考虑到如果我们想通过 Terraform 管理该资源,以后必须手动导入该资源。
是否有更好的方法来创建权限仅限于单个应用程序特定数据库的用户?
解决方案
我也对这种行为感到困惑。它可能不是您想要的答案,但如果您可以使用 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 上的超级用户角色的情况下,这对我(和你)来说是一个奇怪的默认值。
推荐阅读
- jquery - 通过 jQuery EACH 循环添加多个 WooCommerce 产品
- php - 我如何在 PHP 中使用动态变量
- node.js - Mongodb:仅FindOne那些与mongodb中的条件匹配的数组对象
- angular - 如何修复angular2-signaturePad中的“无法读取未定义的属性'toDataURL'”
- django - modelchoicefield 显示没有名称的对象 1 和对象 2 的问题?
- python - 如何使多线程我的树莓派之间的通信代码?
- php - wordpress 帖子无法在自定义模板上检索
- angular - 嵌套的 http 调用不适用于 ForkJoin
- excel - 在同一行中选择列表项后,如何确定单元格的颜色?
- javascript - 离线时如何使用 Sentry 记录错误?