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。
添加或修改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
關於此命令的其他通用選項的更多資訊,請參見通用選項。