调用OpenStack API的Curl请求返回403 Forbidden错误求助
解决OpenStack Keystone API 403 Forbidden(identity:list_users权限问题)
从你给出的请求和响应信息来看,问题的核心非常清晰:你使用的认证Token对应的账号,没有权限执行用户列表查询操作(identity:list_users)。下面我会帮你一步步排查和解决这个问题:
1. 先确认当前Token的用户角色权限
OpenStack Keystone的权限是基于角色管控的,identity:list_users这类全局用户查询操作,通常需要Admin角色或者自定义的包含该权限的角色。你可以先检查当前Token所属用户的角色:
用这个API请求查看用户角色(替换<user-id>、<project-id>和你的Token):
curl -i -X GET "https://cloud.lab.fiware.org:5000/v3/users/<user-id>/roles?project=<project-id>" -H "X-Auth-Token: <your-token>"
如果返回的角色列表里没有Admin或对应权限角色,那这就是权限不足的根源。
2. 补充对应权限角色
- 私有OpenStack环境:如果你是环境管理员,可以直接给目标用户添加Admin角色:
openstack role add --user <user-id> --project <project-id> admin - 公共云环境(如你用的Fiware云):你需要联系云服务提供商的管理员,申请获取用户列表的权限,或者确认是否有其他合法路径查询用户信息(比如仅允许查询自身用户信息)。
3. 检查Token的作用域是否正确
你的请求用的是项目级Token吗?identity:list_users通常需要域级或全局Admin级的Token权限。你可以尝试申请一个域级Token再重试:
curl -i -X POST "https://cloud.lab.fiware.org:5000/v3/auth/tokens" -H "Content-Type: application/json" -d '{ "auth": { "identity": { "methods": ["password"], "password": { "user": { "name": "<你的用户名>", "domain": {"name": "Default"}, "password": "<你的密码>" } } }, "scope": { "domain": {"name": "Default"} } } }'
用这个请求返回的新Token去调用用户列表API,看看是否能正常返回结果。
4. (管理员专属)验证Keystone权限策略
如果你管理着自己的OpenStack环境,还可以检查Keystone的policy.yaml配置文件(通常在/etc/keystone/目录下),确认identity:list_users的权限规则:
默认规则是这样的:
"identity:list_users": "rule:admin_required"
如果这条规则被修改过,可能导致权限验证失败,需要恢复默认或调整规则以匹配你的权限需求。
内容的提问来源于stack exchange,提问作者Kushagra Srivastava




