cinder服务端的keystone认证机制
keystone在openstack中的地位
Keystone作为OpenStack中的身份管理与授权模块,主要实现系统用户的身份认证、基于角色的授权管理、其他OpenStack服务的地址发现和安全策略管理等功能
keystone提供的认证机制
下面以cinder为例梳理cinder服务端在收到cinder_client的请求后,具体的认证过程,如下图:
其中虚线连接的部分为/etc/cinder/api-paste.ini
中composite设置的的pipline,图中只截取了两个跟keystone相关的,当cinder-server收到cinder-client的restful请求后,一次经过pipline的factory过滤,与api-paste相关的内容,参考:
以下是api-paste.ini中的配置:
[filter:keystonecontext]
paste.filter_factory = cinder.api.middleware.auth:CinderKeystoneContext.factory
[filter:authtoken]
paste.filter_factory = keystoneclient.middleware.auth_token:filter_factory
auth_host = 172.20.0.5
auth_port = 35358
auth_protocol = http
admin_tenant_name = service
admin_user = cinder
admin_password = cinder
通过调试,我们发现,在keystoneclient.middleware.auth_token只是实现了对request请求中的token的是否认证做了校验,而并没有对该request请求的发起者(对应的用户)的权限范围做校验,这就是认证机制中的policy.json加入了。