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,瀏覽器打開直接變成了下載模式了。
相關文章
相關標籤/搜索