Openstack Object Store(Swift)设置公有存储的方法

本文假设读者已对OOS有必定的认识了解而且已经自行成功搭建过Swift,背景还有部署方法这里就很少说了,这里Swift使用的身份认证组件为Keystone,参照官方文档步骤操做发现,对container设置ACL后仍无法实现容许任何人访问该容器下的object。后来查看Swift中间件源码中的注释得知,只需在proxy-server.conf中启动相应配置便可解决上述问题。 html

首先来看看proxy-server.conf中的pipline顺序:
[pipeline:main]
pipeline = catch_errors healthcheck proxy-logging cache bulk slo ratelimit authtoken keystoneauth container-quotas account-quotas staticweb proxy-logging proxy-server web

上面标红部分为keystone认证组件,在正常状况下,请求要顺利经过proxy-server,必需要从keystone或者cache中拿到一个有效token,然而要想拿到token的话,必需要输入Tenant、User和password等相关信息。这样来讲,swift仅提供了私有存储的服务,要想实现公有存储服务,仍需作如下操做。 shell

第一,修改proxy-server.conf配置
引用keystoneauth.py代码注释说明:
If support is required for unvalidated users (as with anonymous access) or for formpost/staticweb/tempurl middleware, authtoken will need to be configured with ``delay_auth_decision`` set to true.  swift

[filter:authtoken]
...
delay_auth_decision = true
...
查看swift和keystone相关代码暂时没有弄懂这个设置是在哪里、经过哪个逻辑判断生效的,经过字面意思能够看出,系统暂时延迟用户身份的认证,交由后面组件来把关是否Authentication required!

第二,对指定的Container设置ACL受权
参考 os-objectstorage-devguide-1.0.pdf 的4.8章节
在container的metadata元素当中,X-Container-Read有着特别重要的做用,它能够经过ACL受权指定谁能够直接读取该container当的全部objects,二在设定 X-Container-Read以前,ACL的逻辑规定访问请求是必须包含有一个有效的 X-Auth-Token,不然将没法进入访问!如今咱们尝试设定X-Container-Read看看可否实现container下面objects对任何人可读。
关于X-Container-Read的详细介绍可见 http://docs.openstack.org/developer/swift/misc.html#id5
eg:
这里对current容器添加容许任何人读取的设定, X-Container-Read: .r:*
结果以下:


第三,检查是否生效
首先查看一下current容器返回的http头部是否已经包含了X-Container-Read的信息:

能够清楚看到以前的PUT操做已经成功生效了,current容器下面有两个objects,接下来咱们经过浏览器尝试访问 新建文本文档.txt,因为object以前没有设置好content-type,浏览器打开直接变成了下载模式了。
相关文章
相关标签/搜索