Cloud SQL使用IAM组作为IAM用户登录失败及配置方案咨询
问题原因说明
- Cloud SQL for PostgreSQL的IAM认证逻辑分为两层:IAM层权限控制你是否有权限生成登录令牌,数据库层的用户实体控制你是否能以对应身份登录实例
- 你最初用个人邮箱登录失败,是因为数据库层没有你个人账号的用户实体,IAM组的权限仅能让你拿到合法令牌,无法代替数据库层的用户存在性校验
- 你用组邮箱登录失败,是因为Cloud SQL不支持直接以IAM组身份作为登录用户名,组仅可用于权限分配,不能作为登录账号使用
可行方案(无需逐个添加组成员)
该方案仅要求你的Cloud SQL PostgreSQL实例版本 ≥ 14,低版本实例需先升级到14及以上版本才可使用:
- 你已完成的前置配置无需修改:保持
cloudsql.iam_authentication标志开启、group@iam.example.com已被添加为Cloud SQL实例的IAM用户、该组已持有Cloud SQL Instance User权限 - 以高权限账号登录PostgreSQL数据库,执行以下授权命令,注意邮箱大小写需和IAM侧完全一致,必须加双引号包裹:
-- 给IAM组授予Cloud SQL IAM认证的必备角色 GRANT cloudsqliam TO "group@iam.example.com"; -- 按需给组分配数据库权限,示例为授予public schema下所有表的全权限 GRANT ALL ON ALL TABLES IN SCHEMA public TO "group@iam.example.com"; -- 配置默认权限,保证后续新建的表也自动对组开放权限 ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO "group@iam.example.com";
- 组成员登录时,使用个人邮箱作为用户名,密码仍用
gcloud auth print-access-token生成的访问令牌即可,无需将个人账号添加为Cloud SQL IAM用户,示例命令如下:
PGPASSWORD=$(gcloud auth print-access-token) psql --host=127.0.0.1 --username=user@example.com --dbname=<DB_NAME>
注意事项
- 所有涉及IAM邮箱的SQL命令必须加双引号,避免PostgreSQL自动将标识符转为小写导致匹配失败
- 登录前需确认gcloud当前活跃账号为对应组成员账号,可执行
gcloud config get-value account校验 - 如果你使用公网直连而非Cloud SQL Auth Proxy,需在psql命令中添加
--sslmode=require参数保证通信加密
内容的提问来源于stack exchange,提问作者0xC0DED00D
相关产品推荐
相关产品推荐

