【对象存储】关于阿里云OSS踩坑记录
? ? 前言:最近筆者通過PHP做了一個上傳文件到阿里云OSS存儲的程序,在上傳過程中官方文檔寫的很清楚,幾乎沒有遇到什么問題,但在訪問文件的過程中,遇到了問題,由于筆者的bucket是私有域,所以訪問時,首先要授權,通過sts生成臨時用戶和token,然后通過oss授權訪問接口生成臨時訪問鏈接,但是在生成訪問鏈接的時候官方文檔并沒有寫清楚調用方式,所以筆者把文檔重新梳理了一下。
一、STS拿到臨時AK和securityToken?(通過阿里云子用戶生成臨時用戶和令牌)
1、創建用戶子賬號
? ?1)云賬號登錄RAM控制臺。
? ?2)在左側導航欄的人員管理菜單下,單擊用戶。
? ?3)單擊新建用戶。
? ?4)輸入登錄名稱和顯示名稱。
? ?5)在訪問方式區域下,選擇編程訪問。
? ?6)單擊確定。
? ?7)勾選目標RAM用戶,單擊添加權限,被授權主體會自動填入。
? ?8)在添加權限頁面,為已創建子賬號添加AliyunSTSAssumeRoleAccess權限。
2、創建權限策略
? ?1)云賬號登錄RAM控制臺。
? ?2)在左側導航欄的權限管理菜單下,單擊權限策略管理。
? ?3)單擊新建權限策略。
? ?4)填寫策略名稱和備注。
? ?5)配置模式選擇可視化配置或腳本配置。
? ?以腳本配置為例,對ram-test(OSS的BUCKET)添加ListObjects與GetObject等只讀權限,在策略內容中配置腳本如下:
?
3、創建角色。
? ?1)云賬號登錄RAM控制臺。
? ?2)在左側導航欄,單擊RAM角色管理。
? ?3)單擊新建RAM角色,選擇可信實體類型為阿里云賬號,單擊下一步。
? ?4)在新建RAM角色頁面,填寫RAM角色名稱和備注,本示例RAM角色名稱為RamOssTest。
? ?5)選擇云賬號為當前云賬號。
? ?6)單擊完成。
? ?7)單擊為角色授權,被授權主體會自動填入。
? ?8)在添加權限頁面,選擇自定義權限策略,添加步驟2中創建的策略Ramtest。
? ?添加策略后,頁面如下圖所示:
4、通過STS API獲取STS AK與SecurityToken。
通過調用STS服務接口AssumeRole來獲取有效訪問憑證。STS SDK的安裝及使用詳見STS PHP SDK安裝及使用。
以下是官方代碼:
參數說明如下:
- AccessKeyId、AccessKeySecret:子賬號AK信息。
- RoleArn:需要扮演的角色ID。
- RoleSessionName:用來標識臨時憑證的名稱,建議使用不同的應用程序用戶來區分。
- Policy:在扮演角色的時候額外添加的權限限制。
注意:
? ? ?① ? ?REGION_ID?和?ENDPOINT
? ? ? ? ? ? ?這里的ENDPOINT并不是OSS云存儲的ENDPOINT
? ? ? ? ? ? ?具體請參考STS各區域的endpoint,接入地址
? ? ? ? ? ? ?下面列出部分:
? ? ? ? ? ? ?大中華地區都可以用,但最好是在OSS同地區
? ? ?② ? ?POLICY
? ? ?以上代碼是官方給出的代碼,但插入我的PHP項目中會報錯,因為php不支持json格式的變量聲明
? ? ?做以下修改
? ? ?③ ? ??最大的坑
?
? ? ?本來以為只用一個STS的SDK就夠了,原來還有一個core的SDK,官方并沒有對這SDK進行說明
? ? 而且STS的SDK在GITHUB上并沒有單獨下載的地方,所以要全部下載
? ? https://github.com/aliyun/aliyun-openapi-php-sdk
? ? 只使用下面兩個:
?
? ?關于調用方式
? ?由于core SDK并沒有用到命名空間,做以下修改
二、使用STS進行臨時授權訪問
參數說明如下:
- accessKeyId?、第一步拿到的臨時AK
- accessKeySecret?:第一步拿到的臨時AKS
- securityToken?:第一步拿到的臨時令牌
最后:基本上第一步沒有問題的話,第二步會很流暢的運行,但就是因為官方文檔寫的不清不楚,導致在調用的時候好多都要靠猜,對第一次調用PHPer來說很不友好,此篇文章是自己第一次調用“授權訪問”的筆記,也希望對以后調用的人有幫助。
總結
以上是生活随笔為你收集整理的【对象存储】关于阿里云OSS踩坑记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: untiy 移除一个组件
- 下一篇: 如何让EXCEL公式结果不显示#N/A、