條件
更新時間 2023-09-20 15:53:31
最近更新時間: 2023-09-20 15:53:31
分享文章
本節主要介紹桶策略的生效條件。
除了指定允許/拒絕、被授權用戶、資源、動作外,桶策略還可以指定生效條件。只有當條件設置的表達式與訪問請求中的值匹配時,桶策略才生效。條件是可選參數,用戶可以根據業務需要選擇是否使用。
例如,帳號A想要擁有帳號B向其example桶中上傳的對象的完全控制權限(因為默認情況下對象由上傳該對象的帳號B擁有),則可以指定上傳請求中必須包含acl鍵,以及顯式授予完全控制權限,完整的條件表達式如下:
條件運算符 鍵 值 StringEquals acl bucket-owner-full-control ?
條件由條件運算符、鍵、值三部分組成,最終組成一個條件表達式,決定桶策略生效的條件。條件運算符、鍵兩者之間存在互相限制的關聯關系,例如:
條件運算符選擇了一個String類型的,比如StringEquals,鍵就只能選擇String類型的,比如UserAgent。
鍵選擇了一個Date類型,比如CurrentTime,條件運算符就只能選擇Date類型的,比如DateEquals。
OBS提供如下表所示的預定義條件運算符。
類型 關鍵字 說明 String StringEquals 字符串匹配,簡化為:streq。 StringNotEquals 字符串不匹配,簡化為:strneq。 StringEqualsIgnoreCase 忽略大小寫的字符串匹配,簡化為:streqi。 StringNotEqualsIgnoreCase 忽略大小寫的字符串不匹配,簡化為:strneqi。 StringLike 寬松的區分大小寫的匹配。這些值可以在字符串中的任何地方包括一個多字符匹配的通配符(*)和單字符匹配通配符(?)。簡化為:strl。 StringNotLike 非寬松區分大小寫的匹配。這些值可以在字符串中的任何地方包括一個多字符匹配的通配符(*)和單字符匹配通配符(?)。簡化為:strnl。 Numeric NumericEquals 相等,簡化為:numeq。 NumericNotEquals 不相等,簡化為:numneq。 NumericLessThan 小于,簡化為:numlt。 NumericLessThanEquals 小于等于,簡化為:numlteq。 NumericGreaterThan 大于,簡化為:numgt。 NumericGreaterThanEquals 大于等于,簡化為:numgteq。 Date DateEquals 日期時間相等,簡化為:dateeq。 DateNotEquals 日期時間不相等,簡化為:dateneq。 DateLessThan 日期時間小于,簡化為:datelt。 DateLessThanEquals 日期時間小于等于,簡化為:datelteq。 DateGreaterThan 日期時間大于,簡化為:dategt。 DateGreaterThanEquals 日期時間大于等于,簡化為:dategteq。 Boolean Bool 嚴格布爾值相等。 IP address IpAddress 指定的IP或IP范圍,例如x.x.x.x/24。 NotIpAddress 除指定的IP或IP范圍外所有IP,例如x.x.x.x/24。 ?
條件中可選的鍵包括以下三種:動作無關的通用鍵、與桶動作有關的鍵和與對象動作有關的鍵。
表 通用鍵
鍵 類型 描述 CurrentTime Date 服務器接收請求的時間,格式滿足ISO 8601標準。 EpochTime Numeric 服務器接收請求的時間,格式為1970.01.01 00:00:00 UTC開始所經過的秒數,不考慮閏秒。 SecureTransport Bool 請求是否使用SSL加密。 SourceIp IP address 請求發起的源IP。 UserAgent String 請求的客戶端軟件代理程序。 Referer String 請求從哪個鏈接發起。
表 與桶動作有關的鍵
Action 可選鍵 描述 說明 ListBucket prefix String類型,列舉以指定的字符串prefix開頭的對象。 配置prefix、delimiter、max-keys后,執行List操作時需要帶上符合條件的鍵值對信息,桶策略才生效。
例如,某桶配置了匿名用戶可讀的桶策略,且條件運算符=NumericEquals,鍵=max-keys,值=100。則匿名用戶列舉對象時需要在桶訪問域名末尾加上?max-keys=100,才能完成對象列舉,且列舉的對象將是按照字典順序的前100個對象。max-keys Numeric類型,指定返回的最大數,返回的對象列表將是按照字典順序的最多前max-keys個對象。 ListBucketVersions prefix String類型,列舉以指定的字符串prefix開頭的多版本對象。 max-keys Numeric類型,指定返回的最大數,返回的對象列表將是按照字典順序的最多前max-keys個對象。 PutBucketAcl acl String類型,設置桶ACL。修改桶ACL時在頭域中可以包含的Canned ACL,取值范圍為private|public-read|public-read-write|authenticated-read|bucketowner-read|bucket-owner-full-control|log-delivery-write。 無
表 與對象動作相關的鍵
Action 可選鍵 描述 PutObject acl String類型,設置對象ACL。上傳對象時在頭域中可以包含的Canned ACL,取值范圍為private|public-read|public-read-write|authenticated-read|bucketowner-read|bucket-owner-full-control|log-delivery-write。 copysource String類型,用來指定復制對象時對象操作的源桶名以及源對象名。格式如/bucketname/keyname。 metadata-directive String類型,用來指定新對象的元數據是從元對象中復制,還是用請求中的元數據替換,取值范圍為COPY|REPLACE。 PutObjectAcl acl String類型,設置對象ACL。上傳對象時在頭域中可以包含的Canned ACL,取值范圍為private|public-read|public-read-write|authenticated-read|bucketowner-read|bucket-owner-full-control|log-delivery-write。 GetObjectVersion VersionId String類型,獲取VersionId為xxx版本的對象。 GetObjectVersionAcl VersionId String類型,獲取VersionId為xxx版本的對象ACL。 PutObjectVersionAcl VersionId String類型,設置VersionId。 acl String類型,設置VersionId為xxx版本的對象ACL。上傳對象時在頭域中可以包含的Canned ACL,取值范圍為private|public-read|public-read-write|authenticated-read|bucketowner-read|bucket-owner-full-control|log-delivery-write。 DeleteObjectVersion VersionId String類型,刪除VersionId為xxx版本的對象。