更新时间:2026-08-03 GMT+08:00
分享

设置桶清单

功能说明

桶清单功能可以定期生成桶内对象的元数据信息,通过查看这些信息,可以帮助您更好地了解桶内对象的状态。桶拥有者或拥有设置桶清单的用户,可以通过本接口为桶配置清单规则,每个桶最多配置10条清单规则。有关更多桶清单的介绍和使用限制,请参见桶清单

要使用此操作,需确保执行者有PutBucketInventoryConfiguration操作的权限 。桶拥有者默认具有此权限,并且可以将此权限授予其他人。

融合桶场景,主桶支持配置桶清单,备桶不支持配置桶清单。

接口约束

表1 桶清单约束限制

限制类型

限制内容

桶版本限制

只有OBS 3.0的桶支持配置清单,目标桶无OBS版本限制。

清单数量限制

一个桶最多支持10条桶清单。

源桶和目标桶限制

  • 桶清单配置的源桶和目标桶必须归属同一个账号。
  • 桶清单配置的源桶和目标桶必须归属同一个租户。
  • 桶清单配置的源桶和目标桶必须归属同一个区域。
  • 桶清单中配置的目标桶不能开启桶默认加密服务端加密

功能限制

  • 只支持生成CSV格式的清单文件。
  • 桶清单筛选条件目前仅支持设置为所有对象或指定前缀的对象。
  • 同一个桶中多条清单规则的筛选条件不能彼此包含:
    • 如果已经存在针对桶中所有对象的规则,则无法再创建按对象名前缀筛选的规则。如需创建,要先删除针对所有对象的规则。
    • 如果已经存在按对象名前缀筛选的规则,则无法再创建针对桶中所有对象的规则。如需创建,要先删除所有按对象名前缀筛选的规则。
    • 如果已经存在某个按对象名前缀筛选的规则(如前缀ab),则无法再创建与其存在包含或被包含关系的规则(如前缀a或前缀abc)。如需创建,要先删除存在包含或被包含关系的规则。
  • 桶清单加密方式目前只支持SSE-KMS。

权限限制

清单文件使用OBS系统用户上传到目标桶,目标桶必须给OBS系统用户写权限,即目标桶必须包含一条Principal取值则固定为{"Service": "obs"},授予写权限的桶策略,详见为目标桶添加桶策略

其他

  • 暂不对桶清单功能收费,桶清单生成后只按照存储容量计费。
  • 不支持联邦用户使用桶清单。

授权信息

您必须是桶拥有者或拥有设置桶清单的权限,才能调用本接口,建议使用IAM或桶策略进行授权。了解更多OBS授权方式请参见OBS不同权限控制方式的区别

  • 如果使用IAM授权,那么请在“角色与策略授权”、“身份策略授权”两种IAM授权方式中选择一种,并配置相应权限:
    • 如果使用角色与策略授权(旧版IAM,即IAM v3接口),需具备obs:bucket:PutBucketInventoryConfiguration权限,授权操作请参见创建IAM自定义策略
    • 如果使用身份策略授权(新版IAM,即IAM v5接口),如下表所示,需具备obs:bucket:putBucketInventoryConfiguration权限,授权操作请参见创建IAM自定义身份策略

      授权项

      Action

      访问级别

      Access Level

      资源类型(*为必须)

      Resource Type (*: required)

      条件键

      Condition Key

      别名别名

      Alias

      依赖的授权项

      Dependencies

      obs:bucket:putBucketInventoryConfiguration

      Write

      bucket *

      -

      -

      -

      • obs:EpochTime
      • obs:SourceIp
      • obs:TlsVersion
      • obs:CustomDomain
  • 如果使用桶策略进行授权,需具备obs:bucket:PutBucketInventoryConfiguration权限,具体操作请参见自定义创建桶策略

方法定义

func (obsClient ObsClient) SetBucketInventory(input *SetBucketInventoryInput, extensions ...extensionOptions) (output *BaseModel, err error)

请求参数说明

表2 SetBucketInventoryInput请求参数说明

参数

类型

是否必选

说明

Bucket

string

桶的名称。

Id

string

清单配置 ID,用于唯一标识一个清单规则。

规格:最长64字节。

默认值:无。

有效字符:"a-z"、"A-Z"、"0-9"、"-"、"_"和"."。

IsEnabled

bool

规则是否启用,如果设置为true,则生成清单,反之不生成。

Destination

InventoryDestination

清单报告的存储位置和格式。

Schedule

InventorySchedule

清单文件的生成周期。

Filter

*InventoryFilter

清单过滤器配置,清单只包含符合过滤器规则的对象(只支持按对象名前缀进行过滤),如果没有配置过滤器,则包含所有对象。

IncludedObjectVersions

string

清单文件中包含对象的多版本配置。

有效值:

  • All:清单会包含对象所有的版本,清单中会增加版本相关的字段:VersionId、IsLatest、和DeleteMarker。
  • Current:清单文件中只会列出当前版本信息,不会出现与多版本相关的VersionId、IsLatest、DeleteMarker字段。

OptionalFields

*InventoryOptionalFields

清单报告中包含的可选字段。

表2 InventoryDestination参数说明

参数

类型

是否必选

说明

Format

string

生成的清单文件的格式,现只支持CSV格式。

Bucket

string

存放清单文件的目标桶的桶名。

Prefix

string

生成的清单文件对象名会以此前缀开头,如果不配置前缀,则生成的清单文件对象名默认以BucketInventory开头。

表3 InventorySchedule参数说明

参数

类型

是否必选

说明

Frequency

string

清单文件的生成周期,只支持按天和按周生成清单,第一次配置完桶清单,任务会在一个小时内启动,之后每隔一个周期启动一次。

有效值:Daily、Weekly

表4 InventoryFilter参数说明

参数

类型

是否必选

说明

Prefix

string

前缀过滤条件,清单文件中只生成以此前缀开头的对象列表。

表5 InventoryOptionalFields参数说明

参数

类型

是否必选

说明

Fields

[]string

可选字段列表,有效值

Size、LastModifiedDate、StorageClass、ETag、IsMultipartUploaded、ReplicationStatus、EncryptionStatus

代码示例

本示例用于为桶examplebucket创建桶清单配置,ID为inventory-rule-1。

package main

import (
	"fmt"
	"log"
        obs "github.com/huaweicloud/huaweicloud-sdk-go-obs/obs"
)

func main() {
    //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。
    //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html。
        ak := os.Getenv("AccessKeyID")
        sk := os.Getenv("SecretAccessKey")
    // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。
    securityToken := os.Getenv("SecurityToken")
    // endpoint填写Bucket对应的Endpoint,这里以华北-北京四为例,其他地区请按实际情况填写。     endPoint := "https://obs.cn-north-4.myhuaweicloud.com"
	// 创建客户端
    obsClient, err := obs.New(ak, sk, endPoint, obs.WithSecurityToken(securityToken))
    if err != nil {
        fmt.Printf("Create obsClient error, errMsg: %s", err.Error())
    }

	// 设置清单配置
	input := &obs.SetBucketInventoryInput{
		Bucket: "my-bucket",
		InventoryConfiguration: obs.InventoryConfiguration{
			Id:        "inventory-rule-1",
			IsEnabled: true,
			Destination: obs.InventoryDestination{
				Format: "CSV",
				Bucket: "report-bucket",
				Prefix: "inventory-reports/",
			},
			Schedule: obs.InventorySchedule{
				Frequency: "Daily", // 每日生成
			},
			IncludedObjectVersions: "All", // 包含所有版本
			OptionalFields: &obs.InventoryOptionalFields{
				Fields: []string{
					"Size",
					"LastModifiedDate",
					"StorageClass",
					"ETag",
					"IsMultipartUploaded",
				},
			},
		},
	}

	output, err := client.SetBucketInventory(input)
	if err != nil {
		log.Fatalf("Failed to set bucket inventory: %v", err)
	}

	fmt.Printf("Request ID: %s\n", output.RequestId)
	fmt.Println("Inventory configuration set successfully")
}

相关链接

  • 更多关于桶清单的示例代码,请参见Github示例
  • 桶清单接口返回的错误码含义、问题原因及处理措施可参考OBS错误码

相关文档