文档首页/ 对象存储服务 OBS/ SDK参考/ Go/ 桶相关接口(Go SDK)/ 设置桶日志管理配置(Go SDK)
更新时间:2024-12-09 GMT+08:00

设置桶日志管理配置(Go SDK)

功能说明

调用设置桶日志管理配置接口,您可以为指定桶打开桶日志功能,并配置日志存放的目标桶。创建桶时,默认是不生成桶的日志的,调用Go SDK的设置桶日志管理配置接口时,接口会自动为您打开桶日志配置。桶日志功能开启后,桶的每次操作将会产生一条日志,并将多条日志打包成一个日志文件。日志文件存放位置需要在开启桶日志功能时指定,可以存放到开启日志功能的桶中,也可以存放到其他您有权限的桶中,但需要和开启日志功能的桶在同一个region中。您还可以根据需要配置日志文件的访问权限,以及日志文件的文件名前缀。

接口约束

  • 由于日志文件是OBS产生,并且由OBS上传到存放日志的桶中,因此OBS需要获得委托授权,用于上传生成的日志文件,所以在配置桶日志管理前,需要先到统一身份认证服务生成一个对OBS服务的委托,委托配置权限只需设置目标桶的上传对象权限。
  • 您必须是桶拥有者或拥有设置桶日志管理配置的权限,才能设置桶日志管理配置。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:bucket:PutBucketLogging权限,如果使用桶策略则需授予PutBucketLogging权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略自定义创建桶策略
  • OBS支持的Region与Endpoint的对应关系,详细信息请参见地区与终端节点

方法定义

func (obsClient ObsClient) SetBucketLoggingConfiguration(input *SetBucketLoggingConfigurationInput) (output *BaseModel, err error)

请求参数说明

表1 请求参数列表

参数名称

参数类型

是否必选

描述

input

*SetBucketLoggingConfigurationInput

必选

参数解释:

设置桶日志管理配置请求参数,详见SetBucketLoggingConfigurationInput

表2 SetBucketLoggingConfigurationInput

参数名称

参数类型

是否必选

描述

Bucket

string

必选

参数解释

桶名。

约束限制:

  • 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。
  • 桶命名规则如下:
    • 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。
    • 禁止使用IP地址。
    • 禁止以“-”或“.”开头及结尾。
    • 禁止两个“.”相邻(如:“my..bucket”)。
    • 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。
  • 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。

默认取值:

Agency

string

作为请求参数时如果是设置桶日志配置则必选

参数解释:

目标桶(存放日志文件的桶)的所有者通过统一身份认证服务(IAM)创建对OBS云服务委托的名称

可以选择账号下已有的IAM委托,也可以创建一个新的委托。创建委托参见创建IAM委托

约束限制:

默认情况下,在为委托配置权限时只需设置日志存储桶的上传对象(PutObject)权限。如果日志存储桶开启了默认加密功能,还需要委托同时具有日志存储桶所在区域的KMS Administrator权限。

默认取值:

TargetBucket

string

设置logging时必选。

关闭logging时勿选。

参数解释:

日志存储桶的桶名,该桶用于存放日志文件。

约束限制:

  • 需要和开启日志功能的桶在同一个region中。
  • 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。
  • 桶命名规则如下:
    • 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。
    • 禁止使用IP地址。
    • 禁止以“-”或“.”开头及结尾。
    • 禁止两个“.”相邻(如:“my..bucket”)。
    • 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。
  • 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。

默认取值:

TargetPrefix

string

设置logging时必选。

关闭logging时勿选。

参数解释:

日志文件对象的对象名前缀,设置后日志文件对象将携带统一前缀存储在日志存储桶中。

取值范围:

长度大于0且不超过1024的字符串。

默认取值:

TargetGrants

[]Grant

可选

参数解释:

被授权用户的权限信息列表,定义哪些用户可以针对日志文件进行哪些访问操作,详见Grant

表3 Grant

参数名称

参数类型

是否必选

描述

Grantee

Grantee

作为请求参数时必选

参数解释:

被授权用户信息详见Grantee

Permission

PermissionType

作为请求参数时必选

参数解释:

被授予的权限。

取值范围:

授权策略 的取值范围详见PermissionType

默认取值:

表4 Grantee

参数名称

参数类型

是否必选

描述

Type

GranteeType

必选

参数解释:

被授权用户的类型。

取值范围:

用户类型的取值范围详见GranteeType

默认取值:

ID

string

如果Type为用户类型则必选。

参数解释:

被授权用户的账号ID,即domain_id。

取值范围:

如何获取账号ID请参见获取账号ID

默认取值:

DisplayName

string

可选

参数解释:

被授权用户的账号名。

约束限制:

  • 只能以字母开头。长度为6-32个字符。
  • 只能包含英文字母、数字或特殊字符(-_)。

默认取值:

URI

GroupUriType

如果Type为用户组类型则必选。

参数解释:

被授权的用户组。

取值范围:

授权用户组取值范围详见GroupUriType

默认取值:

表5 GranteeType

常量名

原始值

说明

GranteeGroup

Group

用户组。

GranteeUser

CanonicalUser

单个用户。

表6 GroupUriType

常量名

原始值

说明

GroupAllUsers

AllUsers

所有用户。

表7 PermissionType

常量名

原始值

说明

PermissionRead

READ

读权限。

PermissionWrite

WRITE

写权限。

PermissionReadAcp

READ_ACP

读取ACL配置的权限。

PermissionWriteAcp

WRITE_ACP

修改ACL配置的权限。

PermissionFullControl

FULL_CONTROL

完全控制权限,包括对桶或对象的读写权限,以及对桶或对象ACL配置的读写权限。

返回结果说明

表8 返回结果列表

参数名称

参数类型

描述

output

*BaseModel

参数解释:

接口返回信息,详见BaseModel

err

error

参数解释:

接口返回错误信息。

表9 BaseModel

参数名称

参数类型

描述

StatusCode

int

参数解释:

HTTP状态码。

取值范围:

状态码是一组从2xx(成功)到4xx或5xx(错误)的数字代码,状态码表示了请求响应的状态。完整的状态码列表请参见状态码

默认取值:

RequestId

string

参数解释:

OBS服务端返回的请求ID。

默认取值:

ResponseHeaders

map[string][]string

参数解释:

HTTP响应头信息。

默认取值:

代码示例

本示例用于设置桶名为examplebucket的桶日志管理配置,使用委托名称为obs_test_agency,生成以TargetPrefixtest/为前缀的日志文件,并将此日志存放在桶名为TargetBucketname内。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package main
import (
    "fmt"
    "os"
    obs "github.com/huaweicloud/huaweicloud-sdk-go-obs/obs"
)
func main() {
    //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。
    //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/intl/zh-cn/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.ap-southeast-1.myhuaweicloud.com"
    // 创建obsClient实例
    // 如果使用临时AKSK和SecurityToken访问OBS,需要在创建实例时通过obs.WithSecurityToken方法指定securityToken值。
    obsClient, err := obs.New(ak, sk, endPoint, obs.WithSignature(obs.SignatureObs)/*, obs.WithSecurityToken(securityToken)*/)
    if err != nil {
        fmt.Printf("Create obsClient error, errMsg: %s", err.Error())
    }
    input := &obs.SetBucketLoggingConfigurationInput{}
    // 指定桶名称
    input.Bucket = "examplebucket"
    // 指定委托的名称,此处以obs_test_agency为例。
    input.Agency = "obs_test_agency"
    // 指定用于存放产生的日志文件的桶名,此处以TargetBucketname为例。
    input.TargetBucket = "TargetBucketname"
    // 指定用于生成的日志文件的名称前缀,此处以TargetPrefixtest/为例。
    input.TargetPrefix = "TargetPrefixtest/"
    // 设置桶的日志管理配置
    output, err := obsClient.SetBucketLoggingConfiguration(input)
    if err == nil {
        fmt.Printf("Set bucket(%s)'s logging configuration successful!\n", input.Bucket)
        fmt.Printf("RequestId:%s\n", output.RequestId)
        return
    }
    fmt.Printf("Set bucket(%s)'s logging configuration fail!\n", input.Bucket)
    if obsError, ok := err.(obs.ObsError); ok {
        fmt.Println("An ObsError was found, which means your request sent to OBS was rejected with an error response.")
        fmt.Println(obsError.Error())
    } else {
        fmt.Println("An Exception was found, which means the client encountered an internal problem when attempting to communicate with OBS, for example, the client was unable to access the network.")
        fmt.Println(err)
    }
}

相关链接

  • 关于设置桶日志管理配置的API说明,请参见设置桶日志管理配置
  • 更多关于设置桶日志管理配置的示例代码,请参见Github示例
  • 设置桶日志管理配置过程中返回的错误码含义、问题原因及处理措施可参考OBS错误码