openstack踩过的坑:swift stat 报错Account GET failed:……403 Forbidden

openstack踩过的坑:swift stat 报错Account GET failed:……403 Forbidden

Scroll Down

分享一个swift cli操作过程中踩的大坑,耽搁了我挺长的玩耍时间!

这里主要给大家分享一下我个人在排除问题时的一个大致思路,可供参考,如若无此需求可直接跳转到 四、问题所在 与 解决方法寻找解决方法

一、需求分析:

1、通过命令行操作熟悉cIi 命令方式操作 swift 云存储

二、操作过程:

1、创建了一个新用户ishells(我是化名~),并将其添加到项目和角色当中
# openstack user create --domain default --password-prompt ishells
# openstack role add --project myproject --user ishells myrole
2、创建一个ishells用户的环境变量文件

# cat -n ishells.rc

1  export OS_USERNAME=ishells
2  export OS_PASSWORD=1790600080
3  export OS_PROJECT_NAME=myproject
4  export OS_USER_DOMAIN_NAME=Default
5  export OS_PROJECT_DOMAIN_NAME=Default
6  export OS_AUTH_URL=http://controller-zjb:5000/v3
7  export OS_IDENTITY_API_VERSION=3

3、使用swift stat查看服务状态
结果:403!就这样困扰了我几个小时,且也没有找到相关解决的帖子!
image.png

三、排错过程

1、首先我通过查看日志的方法来寻找错误
# tail -n 10 -f /var/log/keystone/keystone.log
image.png
问题来了:could not find role:myrole;could not find user:ishells;could not find project:myprokect?
这不是我之前都创建好的嘛?怎么都找不到呢?
# openstack user list
image.png
# openstack project list
image.png

# openstack role list
image.png

这不都有嘛?咋还能找不到呢?我就奇了怪了!不仅被整的一头雾水还被指向了一个错误方向……

2、然后我尝试了各种诸如新建用户、角色等的验证,结果依旧403!(漫长的一段时间,各种恢复快照!)

3、然后我使用了swift --debug stat来找错,就看到了这么一行!
image.png
account denied,权限问题,难道是selinux的原因?
# getenforce
image.png
果然状态为:Enforcing,待我修改完应该就成了吧!
# setenforce 0
image.png
这次应该没问题了吧?
image.png
“妈妈,我想吃烤山药……”

4、崩溃的边缘继续寻找问题,都没有问题的话,那应该就是keystone的原因了,创建用户成功,日志又显示not find user等信息,那我就看下能不能获取到用户的身份验证token
image.png
emmmmmm,都能获取到(不一一展示获取结果了),说明我的user、project、role和keystone是没问题的,那问题肯定是出在swift上了,但是我的admin又可以通过swift stat查看服务状态,那是不是跟swift使用keystone的某一部分权限设置有关呢?
带着这个疑问,我仔细查看了官方文档给出的配置文件参数,终于找到了问题所在!

四、问题所在 与 解决方法

1、问题所在
在/etc/swift/proxy-server.conf 配置文件中,有一个[filter:keystoneauth]单元块,fileter(过滤)、keystoneauth(显然是keystone身份认证的参数),其中有这么一行参数operator_roles = admin,user,操作者角色----admin、user,到这也就很清晰了,很明显这个参数设置之后,你的用户只能要加入了admin、user角色,否则将无权对其进行操作!
image.png

2、解决方法
找到问题之后就好办了:
① 创建user角色,将用户加入user角色即可
# . admin-rc
# openstack role add --project myproject --user ishells user
# . ishells.rc
# swift stat
image.png
② 修改配置文件operator_roles =,添加自己的角色(我并没有尝试,应该行得通)