AWS DocDB非root角色登录及授权失败问题求助
AWS DocDB 创建只读权限用户的问题排查与解决
一、非root角色用户认证失败的排查要点
- 确认用户创建的正确位置:DocDB要求所有用户必须在
admin数据库下创建,且认证时指定--authenticationDatabase admin(你已按此操作,但需确保创建用户时确实切换到admin库执行db.createUser)。错误地在业务库创建用户会直接导致认证失败。 - 角色赋值必须绑定具体数据库:DocDB不支持全局角色,所有权限角色必须明确指定目标数据库。例如给用户赋予业务库的只读权限,正确语法为:
若错误地将use admin db.createUser({ user: "svc_ise", pwd: "your_secure_password", roles: [{ role: "read", db: "your_target_business_db" }] })read角色绑定到admin库,用户仅能访问admin库的只读资源,无法正常访问业务库,部分场景下DocDB会将此类权限不足判定为认证失败。 - 检查DocDB认证模式:确保实例未开启IAM认证,若开启IAM,密码认证的用户会无法登录。可在AWS控制台DocDB实例详情页查看认证模式配置。
- 分析CloudWatch审计日志:重点搜索
Authentication failed关键字,日志会给出具体失败原因(如用户不存在、密码错误、authSource不匹配等)。
二、show users授权失败的解决方法
show users(等价于db.getUsers())本质是查询admin.system.users集合,因此需要用户对该集合拥有读权限,可选择以下两种方案:
- 方案1:赋予admin库只读角色:若允许用户查看admin库的所有只读资源,直接给用户添加对应角色:
use admin db.grantRolesToUser("svc_ise_read", [{ role: "read", db: "admin" }]) - 方案2:创建细粒度自定义角色:若仅需用户查看用户列表,可创建仅允许读取
system.users集合的自定义角色:use admin // 创建自定义角色 db.createRole({ role: "view_only_users", privileges: [ { resource: { db: "admin", collection: "system.users" }, actions: ["find"] } ], roles: [] }) // 给用户赋予该角色 db.grantRolesToUser("svc_ise_read", [{ role: "view_only_users", db: "admin" }])
三、验证只读用户权限的步骤
- 用只读用户登录DocDB:
mongosh --ssl --host your-docdb-endpoint:27017 --username svc_ise_read --password your_password --sslCAFile rds-combined-ca-bundle.pem --authenticationDatabase admin - 切换到业务库验证权限:
use your_target_business_db // 验证只读权限(可正常执行) db.your_collection.find().limit(1) // 验证写入限制(执行会报错) db.your_collection.insertOne({test: 1})
内容的提问来源于stack exchange,提问作者Raviteja Ainampudi
相关产品推荐
相关产品推荐

