Google CloudSQL:如何移除Terraform创建用户的超级用户权限
问题解答
一、Terraform PostgreSQL Provider 是否可以实现权限撤销
可以通过 Terraform 的 PostgreSQL Provider 相关资源完成权限撤销操作,分两部分处理:
1. 从 cloudsqlsuperuser 角色中移除用户
cloudsqlsuperuser 是 CloudSQL PostgreSQL 的内置角色,要移除用户的角色成员身份,需使用 postgresql_role 资源,通过调整 members 参数排除目标用户:
resource "postgresql_role" "cloudsqlsuperuser" { name = "cloudsqlsuperuser" members = [for u in google_sql_user.all_users : u.name if u.name != "target_user"] skip_drop = true # 避免误删内置角色 }
2. 撤销 CREATE ROLE、CREATE DATABASE 权限
使用 postgresql_grant 资源撤销全局级权限:
resource "postgresql_grant" "revoke_create_role" { role = "target_user" database = "postgres" privilege = ["CREATEROLE"] with_grant_option = false revoke = true # 启用撤销模式 } resource "postgresql_grant" "revoke_create_db" { role = "target_user" database = "postgres" privilege = ["CREATEDB"] with_grant_option = false revoke = true }
执行前需确保 Terraform 连接 CloudSQL 的用户拥有足够权限(如本身是 cloudsqlsuperuser)。
二、Ansible community.postgresql.postgresql_privs 模块是否可行
完全可以用该模块完成权限撤销,同时配合 community.postgresql.postgresql_user 模块移除角色成员身份:
1. 移除用户的 cloudsqlsuperuser 角色
- name: 移除用户的 cloudsqlsuperuser 角色 community.postgresql.postgresql_user: name: target_user role_attr_flags: NOSUPERUSER,NOCREATEDB,NOCREATEROLE groups: [] # 清空用户所属的额外角色组 login_host: your_cloudsql_ip login_user: cloudsql_admin login_password: your_admin_password
2. 撤销 CREATE ROLE、CREATE DATABASE 权限
- name: 撤销 CREATE ROLE 权限 community.postgresql.postgresql_privs: role: target_user type: database database: postgres privs: CREATEROLE state: absent login_host: your_cloudsql_ip login_user: cloudsql_admin login_password: your_admin_password - name: 撤销 CREATE DATABASE 权限 community.postgresql.postgresql_privs: role: target_user type: database database: postgres privs: CREATEDB state: absent login_host: your_cloudsql_ip login_user: cloudsql_admin login_password: your_admin_password
执行时需确保 Ansible 能连接到 CloudSQL 实例(如通过公网 IP 或 VPC 对等连接),且登录用户具备足够权限。
内容的提问来源于stack exchange,提问作者Abhishek Solanki
相关产品推荐
相关产品推荐

