天天看點

OSS移動開發實戰3 (30分鐘快速搭建移動應用之安全政策)搭建應用伺服器之STS Policy常見Policy

上一篇文章中介紹了如何快速搭建應用伺服器,在本文中會基于上文提到的應用伺服器,以上海的bucket <code>app-base-oss</code>為例子,配置不同的policy以實作不同的權限控制。

以下說明中假設你已經開通了sts,并完全閱讀了上一篇文章。以下提到的policy都是指上文提到的config.json中指定的policy檔案的内容。

以下講述的<code>擷取sts token 後對oss操作</code>指的是應用伺服器指定policy,從sts擷取臨時憑證後,應用通過臨時憑證通路oss。

上文為了示範友善,預設policy如下,表示的意思是允許應用對所有oss的操作。

這對移動應用來說是不安全的授權,不推薦。

| 擷取sts token 後對oss操作 | 結果 |

| -------- | -----: |

| 列出所有建立的bucket | 成功 |

| 上傳不帶字首的object,test.txt | 成功 |

| 下載下傳不帶字首的object, test.txt | 成功 |

| 上傳帶字首的object, user1/test.txt | 成功 |

| 下載下傳帶字首的object, user1/test.txt | 成功 |

| 列出object, test.txt | 成功 |

| 帶字首的object, user1/test.txt | 成功 |

這個policy表示,應用可以對bucket <code>app-base-oss</code>下所有的object可列舉,可下載下傳。

| 列出所有建立的bucket | 失敗 |

| 上傳不帶字首的object,test.txt | 失敗 |

| 上傳帶字首的object, user1/test.txt | 失敗 |

這個policy表示,應用可以對bucket <code>app-base-oss</code>下帶有字首<code>user1/</code>的object可列舉,可下載下傳。但無法下載下傳其他字首的object。

這樣不同的應用如果對應不同的字首,就可以達到在同一個bucket中空間隔離的效果。

| 下載下傳不帶字首的object, test.txt |失敗 |

這個policy表示,應用可以對bucket <code>app-base-oss</code>下所有的object可上傳。

| 下載下傳帶字首的object, user1/test.txt | 失敗 |

| 列出object, test.txt | 失敗 |

| 帶字首的object, user1/test.txt | 失敗 |

這個policy表示,應用可以對bucket <code>app-base-oss</code>下帶有字首<code>user1/</code>的object可上傳。但無法上傳其他字首的object。

這個policy表示,應用可以對bucket <code>app-base-oss</code>下所有的object可列舉,可下載下傳,可上傳和删除。

這個policy表示,應用可以對bucket <code>app-base-oss</code>下帶有字首<code>user1/</code>的object可列舉,可下載下傳,可上傳和删除。但無法對其他字首的object進行讀寫。

| 下載下傳不帶字首的object, test.txt | 失敗 |

從上面的例子可以看出

可以根據不同的應用場景制定不同的policy,然後對應用伺服器稍作修改就可以實作對不用的應用使用者實作不同的權限控制。

另外也可以在應用端做優化,在sts token過期之前不需要向應用伺服器再次請求。這裡就不多講。

需要特别注意的是token實際頒發是由sts頒發的,應用伺服器相當于定制了policy,向sts請求token,然後将token轉發給應用。

這裡的token是一個簡略的說法。實際上包含了"accesskeyid","accesskeysecret","expiration","securitytoken",這些在oss提供給應用的sdk中會用到。

詳細參見各個sdk的實作。

以上的policy中的<code>app-base-oss</code>是本文使用的bucket,如果在實際使用中需要替換成自己的bucket。

ram和sts在oss中的使用指南 oss中的通路控制 ram官方文檔和sts官方文檔