閱讀464 返回首頁    go iPhone_iPad_Mac_手機_平板_蘋果apple


權限控製__移動應用端直傳實踐_最佳實踐_對象存儲 OSS-阿裏雲

本文基於30分鍾快速搭建移動應用直傳服務 中提到的應用服務器,以上海的Bucket app-base-oss為例子,配置不同的Policy以實現不同的權限控製。以下說明中假設您已經開通了STS,並完全閱讀了30分鍾快速搭建移動應用直傳服務。以下提到的Policy都是上文提到的config.json中指定的Policy文件的內容。以下講述的獲取STS Token 後對OSS操作指的是應用服務器指定Policy,從STS獲取臨時憑證後,應用通過臨時憑證訪問OSS。

常見Policy

完全授權的Policy

上文為了演示方便,默認Policy如下,表示的意思是允許應用對所有OSS的操作。這對移動應用來說也是不安全的授權,不推薦

  1. {
  2. "Statement": [
  3. {
  4. "Action": [
  5. "oss:*"
  6. ],
  7. "Effect": "Allow",
  8. "Resource": ["acs:oss:*:*:*"]
  9. }
  10. ],
  11. "Version": "1"
  12. }
獲取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

不限製前綴的隻讀不寫Policy

這個Policy表示,應用可以對Bucket app-base-oss下所有的Object可列舉,可下載。

  1. {
  2. "Statement": [
  3. {
  4. "Action": [
  5. "oss:GetObject",
  6. "oss:ListObjects"
  7. ],
  8. "Effect": "Allow",
  9. "Resource": ["acs:oss:*:*:app-base-oss/*", "acs:oss:*:*:app-base-oss"]
  10. }
  11. ],
  12. "Version": "1"
  13. }
獲取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

這個Policy表示,應用可以對Bucket app-base-oss下帶有前綴user1/的Object可列舉,可下載。但無法下載其他前綴的Object。這樣不同的應用如果對應不同的前綴,就可以達到在同一個bucket中空間隔離的效果。

  1. {
  2. "Statement": [
  3. {
  4. "Action": [
  5. "oss:GetObject",
  6. "oss:ListObjects"
  7. ],
  8. "Effect": "Allow",
  9. "Resource": ["acs:oss:*:*:app-base-oss/user1/*", "acs:oss:*:*:app-base-oss"]
  10. }
  11. ],
  12. "Version": "1"
  13. }
獲取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

不限製前綴的隻寫不讀Policy

這個Policy表示,應用可以對Bucket app-base-oss下所有的Object進行上傳。

  1. {
  2. "Statement": [
  3. {
  4. "Action": [
  5. "oss:PutObject"
  6. ],
  7. "Effect": "Allow",
  8. "Resource": ["acs:oss:*:*:app-base-oss/*", "acs:oss:*:*:app-base-oss"]
  9. }
  10. ],
  11. "Version": "1"
  12. }
獲取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

這個Policy表示,應用可以對Bucket app-base-oss下帶有前綴user1/的Object進行上傳。但無法上傳其他前綴的Object。這樣不同的應用如果對應不同的前綴,就可以達到在同一個bucket中空間隔離的效果。

  1. {
  2. "Statement": [
  3. {
  4. "Action": [
  5. "oss:PutObject"
  6. ],
  7. "Effect": "Allow",
  8. "Resource": ["acs:oss:*:*:app-base-oss/user1/*", "acs:oss:*:*:app-base-oss"]
  9. }
  10. ],
  11. "Version": "1"
  12. }
獲取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

不限製前綴的讀寫Policy

這個Policy表示,應用可以對Bucket app-base-oss下所有的Object進行列舉、下載、上傳和刪除。

  1. {
  2. "Statement": [
  3. {
  4. "Action": [
  5. "oss:GetObject",
  6. "oss:PutObject",
  7. "oss:DeleteObject",
  8. "oss:ListParts",
  9. "oss:AbortMultipartUpload",
  10. "oss:ListObjects"
  11. ],
  12. "Effect": "Allow",
  13. "Resource": ["acs:oss:*:*:app-base-oss/*", "acs:oss:*:*:app-base-oss"]
  14. }
  15. ],
  16. "Version": "1"
  17. }
獲取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

這個Policy表示,應用可以對Bucket app-base-oss下帶有前綴user1/的Object進行列舉、下載、上傳和刪除。但無法對其他前綴的Object進行讀寫。這樣不同的應用如果對應不同的前綴,就可以達到在同一個bucket中空間隔離的效果。

  1. {
  2. "Statement": [
  3. {
  4. "Action": [
  5. "oss:GetObject",
  6. "oss:PutObject",
  7. "oss:DeleteObject",
  8. "oss:ListParts",
  9. "oss:AbortMultipartUpload",
  10. "oss:ListObjects"
  11. ],
  12. "Effect": "Allow",
  13. "Resource": ["acs:oss:*:*:app-base-oss/user1/*", "acs:oss:*:*:app-base-oss"]
  14. }
  15. ],
  16. "Version": "1"
  17. }
獲取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,然後對應用服務器稍作修改就可以實現對不用的應用用戶實現不同的權限控製。
  • 也可以在應用端做優化,在STS Token過期之前不需要向應用服務器再次請求。
  • 需要特別注意的是Token實際是由STS頒發的,應用服務器相當於定製了Policy,向STS請求Token,然後將Token轉發給應用。這裏的Token是一個簡略的說法。實際上包含了“AccessKeyId”、“AccessKeySecret”、“Expiration”、“SecurityToken”,這些在OSS提供給應用的SDK中會用到。詳細參見各個SDK的實現。

更多參考資料

最後更新:2016-11-23 16:04:09

  上一篇:go 快速搭建移動應用直傳服務__移動應用端直傳實踐_最佳實踐_對象存儲 OSS-阿裏雲
  下一篇:go 快速搭建移動應用上傳回調服務__移動應用端直傳實踐_最佳實踐_對象存儲 OSS-阿裏雲