本文假設讀者已對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!