阻止公用訪問是OSS提供的安全防護功能。當需要防止資料被匿名使用者存取時,可在OSS全域、Bucket、存取點或對象FC存取點維度開啟此功能。開啟後,已有的公用存取權限會被忽略,且無法建立新的公用存取權限。
工作原理
阻止公用訪問通過多層級訪問限制機制保護資料安全。開啟後,OSS會忽略Bucket Policy和ACL中的公用存取權限配置,同時阻止建立新的公用存取權限;關閉後,已有許可權恢複生效,並允許建立新的公用存取權限。
OSS支援在以下四個維度開啟阻止公用訪問,當不同維度設定不一致時,遵循以下優先順序:
OSS全域 > 單個Bucket > 單個存取點 > 單個對象FC存取點上層開啟阻止公用訪問後,下層無論如何設定都不允許公用訪問:
如果希望單個Bucket允許公用訪問,需關閉OSS全域和該Bucket的阻止公用訪問。
如果希望單個存取點允許公用訪問,需關閉OSS全域、存取點關聯的Bucket和該存取點的阻止公用訪問。
如果希望單個對象FC存取點允許公用訪問,需關閉OSS全域、對象FC存取點關聯的存取點、存取點關聯的Bucket和該對象FC存取點的阻止公用訪問。
開啟方式
控制台
OSS全域
前往OSS管理主控台。
在左側導覽列,選擇。
開啟阻止公用訪問,按照頁面指引完成操作。
Bucket
前往Bucket列表,單擊目標Bucket名稱。
在左側導覽列,選擇。
開啟阻止公用訪問,按照頁面指引完成操作。
存取點
前往OSS管理主控台。
在左側導覽列,單擊存取點列表,然後單擊目標存取點。
在存取點基礎資訊地區,開啟阻止公用訪問,按照頁面指引完成操作。
對象FC存取點
前往OSS管理主控台。
在左側導覽列,單擊對象 FC 存取點列表,然後單擊目標對象FC存取點。
在FC 存取點基礎資訊地區,開啟阻止公用訪問,按照頁面指引完成操作。
命令列工具ossutil
可以使用命令列工具ossutil 2.0開啟阻止公用訪問。
OSS全域
put-public-access-block命令用於開啟OSS全域阻止公用訪問。
ossutil api put-public-access-block --public-access-block-configuration "{\"BlockPublicAccess\":\"true\"}"Bucket
put-bucket-public-access-block命令用於開啟Bucket的阻止公用訪問。
ossutil api put-bucket-public-access-block --bucket example-bucket --public-access-block-configuration "{\"BlockPublicAccess\":\"true\"}"存取點
put-access-point-public-access-block命令用於開啟存取點的阻止公用訪問。
ossutil api put-access-point-public-access-block --bucket example-bucket --access-point-name example-ap --public-access-block-configuration "{\"BlockPublicAccess\":\"true\"}"判斷是否包含公用訪問語義
需要結合Bucket Policy和ACL(包括Bucket ACL和Object ACL)判斷OSS資源是否包含公用訪問的語義。如果存在任意一種包含公用訪問的語義,資源可能存在安全風險,建議開啟阻止公用訪問功能。
Bucket Policy
(推薦)調用API介面判斷
可以調用GetBucketPolicyStatus介面判斷當前Bucket Policy是否包含公用訪問的語義。
如果
IsPublic返回欄位取值為true,表示當前Bucket Policy包含公用訪問的語義。如果
IsPublic返回欄位取值為false,表示當前Bucket Policy不包含公用訪問的語義或者沒有設定Bucket Policy。
自行判斷
Bucket Policy中每條Statement的判定規則:滿足以下任一條件即視為非公用訪問,否則為公用訪問。
Effect為Deny
Principal指定固定值(不含萬用字元
*)Condition包含以下任一限制條件:
Condition欄位
取值要求
acs:SourceVpcId
指定固定值(不含萬用字元
*)acs:SourceVpc
指定固定值(不含萬用字元
*)acs:AccessId
指定固定值(不含萬用字元
*)acs:SourceVpcIp
IPv4掩碼≥8,IPv6掩碼≥32
acs:SourceIp
IPv4掩碼≥8,IPv6掩碼≥32
說明Action和Resource不作為判斷公用訪問的條件。
ACL
Bucket ACL或者Object ACL設定為公用讀取或者公用讀寫,允許公用訪問。
Bucket ACL和Object ACL同時設定為私人,不允許公用訪問。
配額與限制
RAM使用者佈建阻止公用訪問需要以下許可權:
阻止公用訪問維度
要求的權限
OSS全域
oss:PutPublicAccessBlock、oss:GetPublicAccessBlock、oss:DeletePublicAccessBlockBucket
oss:PutBucketPublicAccessBlock、oss:GetBucketPublicAccessBlock、oss:DeleteBucketPublicAccessBlock存取點
oss:PutAccessPointPublicAccessBlock、oss:GetAccessPointPublicAccessBlock、oss:DeleteAccessPointPublicAccessBlock對象FC存取點
oss:PutAccessPointConfigForObjectProcess、oss:GetAccessPointConfigForObjectProcess、oss:DeleteAccessPointForObjectProcess如果在Bucket Policy中設定了允許任何人操作存取點的管控API,即使該存取點開啟了阻止公用訪問,使用者仍然可以通過Bucket第三層網域名修改該存取點的阻止公用訪問,原因是通過Bucket第三層網域名訪問的請求不受存取點的配置影響。
對於跨地區或者同地區複製,無論源Bucket和目標Bucket是否開啟阻止公用訪問,均不影響複製前後的Object ACL。如果目標Bucket開啟了阻止公用訪問,則複製到目標Bucket中ACL為公用讀取或者公用讀寫的Object,仍不允許公用訪問。
API說明
如果程式自訂要求較高,可以直接發起REST API請求。直接發起REST API請求需要手動編寫代碼計算簽名。
API | 說明 |
OSS全域開啟阻止公用訪問 | |
Bucket開啟阻止公用訪問 | |
存取點開啟阻止公用訪問 | |
對象FC存取點開啟阻止公用訪問 |
相關文檔
阻止公用訪問用於集中管控OSS全域、Bucket、存取點及對象FC存取點的許可權。如果需要細粒度地管控Bucket內的部分資源或單個Object的許可權,請結合使用Bucket Policy和Object ACL。