Bucket Policy是基于資源的授權策略,Bucket擁有者可以通過Bucket Policy授權其他用戶訪問OSS指定資源。bucket-policy命令用于添加、修改、查詢、刪除Bucket授權策略(Bucket Policy)。
注意事項
要添加或修改Bucket Policy,您必須具有
oss:PutBucketPolicy
權限;要獲取Bucket Policy配置,您必須具有oss:GetBucketPolicy
權限;要刪除Bucket Policy配置,您必須具有oss:DeleteBucketPolicy
權限。具體操作,請參見為RAM用戶授權自定義的權限策略。從ossutil 1.6.16版本開始,命令行中Binary名稱支持直接使用ossutil,您無需根據系統刷新Binary名稱。如果您的ossutil版本低于1.6.16,則需要根據系統刷新Binary名稱。更多信息,請參見命令行工具ossutil命令參考。
關于Bucket Policy的更多信息,請參見Bucket Policy。
當您在OSS ON云盒中使用該命令時:
將配置文件中的Endpoint替換為云盒Endpoint。更多信息,請參見云盒Endpoint。
在本文已有示例的基礎上添加--sign-version、--region以及--cloudbox-id選項。關于這三個選項的具體用法,請參見通用選項。
添加或修改Bucket Policy
添加或修改Bucket Policy前,需要在本地創建JSON格式的文件,并在JSON文件中配置Bucket Policy。單個JSON文件可以配置多條Bucket Policy,但所有Bucket Policy的總大小不能超過16 KB。
添加或修改Bucket Policy時,ossutil先從JSON格式的文件中讀取Bucket Policy配置,然后將讀取到Bucket Policy添加到指定的Bucket。添加Bucket Policy為覆蓋語義,即新添加的Bucket Policy會覆寫已有的Bucket Policy配置。
命令格式
ossutil bucket-policy --method put oss://bucketname local_json_file
參數說明如下:
參數
說明
bucketname
添加或修改Bucket Policy的目標存儲空間名稱。
local_json_file
配置Bucket Policy的本地JSON文件名稱。
使用示例
在本地創建名為local_json_file文件,并根據使用場景寫入不同的Bucket Policy。
Bucket Policy的常見配置示例如下:
說明以下為資源擁有者(即Resource中UID為
174649585760xxxx
的Bucket Owner)通過Bucket Policy授權指定用戶(例如Principal中UID為20214760404935xxxx
的RAM用戶,匿名用戶為*
)不同權限的示例。僅允許指定IP的匿名用戶訪問目標存儲空間examplebucket內的所有資源。
{ "Statement": [ { "Action": [ "oss:GetObject", "oss:GetObjectAcl", "oss:ListObjects", "oss:RestoreObject", "oss:GetVodPlaylist", "oss:ListObjectVersions", "oss:GetObjectVersion", "oss:GetObjectVersionAcl", "oss:RestoreObjectVersion" ], "Condition": { "IpAddress": { "acs:SourceIp": [ "10.10.10.10" ] } }, "Effect": "Allow", "Principal": [ "*" ], "Resource": [ "acs:oss:*:174649585760xxxx:examplebucket/*" ] }, { "Action": [ "oss:ListObjects", "oss:GetObject" ], "Condition": { "StringLike": { "oss:Prefix": [ "*" ] }, "IpAddress": { "acs:SourceIp": [ "10.10.10.10" ] } }, "Effect": "Allow", "Principal": [ "*" ], "Resource": [ "acs:oss:*:174649585760xxxx:examplebucket" ] } ], "Version": "1" }
授權指定的RAM用戶擁有讀取examplebucket中
hangzhou/2020
和hangzhou/2015
目錄的只讀權限。{ "Statement": [ { "Action": [ "oss:GetObject", "oss:GetObjectAcl", "oss:ListObjects", "oss:RestoreObject", "oss:GetVodPlaylist", "oss:ListObjectVersions", "oss:GetObjectVersion", "oss:GetObjectVersionAcl", "oss:RestoreObjectVersion" ], "Effect": "Allow", "Principal": [ "20214760404935xxxx" ], "Resource": [ "acs:oss:*:174649585760xxxx:examplebucket/hangzhou/2020/*", "acs:oss:*:174649585760xxxx:examplebucket/hangzhou/2015/*" ] }, { "Action": [ "oss:ListObjects", "oss:GetObject" ], "Condition": { "StringLike": { "oss:Prefix": [ "hangzhou/2020/*", "hangzhou/2015/*" ] } }, "Effect": "Allow", "Principal": [ "20214760404935xxxx" ], "Resource": [ "acs:oss:*:174649585760xxxx:examplebucket" ] } ], "Version": "1" }
拒絕匿名用戶訪問examplebucket中
hangzhou/2021/
目錄下的所有文件。{ "Statement": [ { "Action": [ "oss:RestoreObject", "oss:ListObjects", "oss:AbortMultipartUpload", "oss:PutObjectAcl", "oss:GetObjectAcl", "oss:ListParts", "oss:DeleteObject", "oss:PutObject", "oss:GetObject", "oss:GetVodPlaylist", "oss:PostVodPlaylist", "oss:PublishRtmpStream", "oss:ListObjectVersions", "oss:GetObjectVersion", "oss:GetObjectVersionAcl", "oss:RestoreObjectVersion" ], "Effect": "Deny", "Principal": [ "*" ], "Resource": [ "acs:oss:*:174649585760xxxx:examplebucket/hangzhou/2021/*" ] }, { "Action": [ "oss:ListObjects", "oss:GetObject" ], "Condition": { "StringLike": { "oss:Prefix": [ "hangzhou/2021/*" ] } }, "Effect": "Deny", "Principal": [ "*" ], "Resource": [ "acs:oss:*:174649585760xxxx:examplebucket" ] } ], "Version": "1" }
為examplebucket添加Bucket Policy。
ossutil bucket-policy --method put oss://examplebucket local_json_file
以下輸出結果表明已成功添加Bucket Policy。
1.125101(s) elapsed
獲取Bucket Policy配置
命令格式
ossutil bucket-policy --method get oss://bucketname local_json_file
參數
說明
bucketname
獲取Policy配置的目標Bucket名稱。
local_json_file
用于存放Policy配置的本地JSON文件名稱。如果未指定此參數,則Policy配置將直接輸出到屏幕。
使用示例
獲取examplebucket配置的Bucket Policy。
ossutil bucket-policy --method get oss://examplebucket local_json_file
以下輸出結果表明已成功獲取Bucket Policy配置,并將其寫入了本地JSON文件。
0.212407(s) elapsed
刪除Bucket Policy配置
當您不再需要通過Bucket Policy授權其他用戶訪問您的OSS資源時,請刪除已配置的Bucket Policy。
命令格式
ossutil bucket-policy --method delete oss://bucketname
使用示例
刪除examplebucket中所有已配置的Bucket Policy。
ossutil bucket-policy --method delete oss://examplebucket
以下輸出結果表明examplebucket中已配置的所有Bucket Policy均已刪除。
0.530750(s) elapsed
通用選項
當您需要通過命令行工具ossutil切換至另一個地域的Bucket時,可以通過-e選項指定該Bucket所屬的Endpoint。當您需要通過命令行工具ossutil切換至另一個阿里云賬號下的Bucket時,可以通過-i選項指定該賬號的AccessKey ID,并通過-k選項指定該賬號的AccessKey Secret。
例如您需要為另一個阿里云賬號下,華東1(杭州)名為examplebucket的存儲空間配置Bucket Policy,命令如下:
ossutil bucket-policy --method put oss://examplebucket local_json_file -e oss-cn-hangzhou.aliyuncs.com -i LTAI4Fw2NbDUCV8zYUzAxxxx -k 67DLVBkH7EamOjy2W5RVAHUY9Hxxxx
關于此命令的其他通用選項的更多信息,請參見通用選項。