
# 设置桶标签-SetBucketTagging
#### 功能介绍
标签用于标识OBS中的桶或对象，帮助您对桶或对象进行分类。可以在创建桶时配置桶标签，也可以在创建桶后再配置标签，调用本接口可为一个已经存在的桶添加标签。了解更多桶标签相关信息，请参见[桶标签](https://support.huaweicloud.com/usermanual-obs/obs_03_0331.html)。
为桶添加标签后，该桶上所有请求产生的计费话单里都会带上这些标签，从而可以针对话单报表做分类筛选，进行更详细的成本分析。例如：某个应用程序在运行过程会往桶里上传数据，我们可以用应用名称作为标签，设置到被使用的桶上。在分析话单时，就可以通过应用名的标签来分析此应用的成本。
#### 接口约束
- OBS以键值对的形式来描述标签。桶标签key和value区分大小写。
- 一个桶默认最大拥有20个标签。每个标签有且只有一对键值。
- 同一个桶标签的键不能重复，但是值可以重复，并且可以为空。
- 设置桶标签后，大约需要等待3分钟才能生效。
 
#### 授权信息
您必须是桶拥有者或拥有设置桶标签的权限，才能调用本接口，建议使用IAM或桶策略进行授权。了解更多OBS授权方式请参见[OBS不同权限控制方式的区别](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0001.html)。
- 如果使用**IAM授权** ，那么请在"角色与策略授权"、"身份策略授权"两种IAM授权方式中选择一种，并配置相应权限：
  - 如果使用**角色与策略授权** （旧版IAM，即IAM v3接口），需具备**obs:bucket:PutBucketTagging** 权限，授权操作请参见[创建IAM自定义策略](https://support.huaweicloud.com/usermanual-iam/iam_01_0605.html)。
  
  - 如果使用**身份策略授权** （新版IAM，即IAM v5接口），如下表所示，需具备**obs:bucket:putBucketTagging** 权限，授权操作请参见[创建IAM自定义身份策略](https://support.huaweicloud.com/usermanual-iam5/iam_01_0917.html)。
    
    | 授权项 Action | 访问级别 Access Level | 资源类型（\*为必须） Resource Type (\*: required) | [条件键](https://support.huaweicloud.com/api-obs/obs_04_0112.html#ZH-CN_TOPIC_0000002375307974__condition_table) Condition Key                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | [别名](https://support.huaweicloud.com/iam5_faq/iam_01_1103.html) Alias | 依赖的授权项 Dependencies |
    |:---|:---|:---|:---|:---|:---|
    | obs:bucket:putBucketTagging                         | Tagging                                                    | bucket \*                                                                          | - [g:EnterpriseProjectId](https://support.huaweicloud.com/usermanual-iam5/iam_01_0934.html#section2)  - [g:ResourceTag/\<tag-key\>](https://support.huaweicloud.com/usermanual-iam5/iam_01_0934.html#section2)                                                                                                                                                                                                                                                                                                                                                                                                                 | -                                                                                                              | -             |
    | obs:bucket:putBucketTagging                         | Tagging                                                    | -                                                                                  | - [g:RequestTag/\<tag-key\>](https://support.huaweicloud.com/usermanual-iam5/iam_01_0934.html#section2)  - [g:TagKeys](https://support.huaweicloud.com/usermanual-iam5/iam_01_0934.html#section2)  - obs:EpochTime  - obs:SourceIp  - obs:TlsVersion  - obs:CustomDomain   | -                                                                                                              | -             |
       
    
   
- 如果使用**桶策略** 进行授权，需具备**obs:bucket:PutBucketTagging** 权限，具体操作请参见[自定义创建桶策略](https://support.huaweicloud.com/usermanual-obs/obs_03_0123.html)。
 
#### URI
PUT /
#### 调用方法
请参见[如何调用API](https://support.huaweicloud.com/api-obs/obs_04_0006.html)。调用前需要先[计算API签名](https://support.huaweicloud.com/api-obs/obs_04_0009.html)，并将签名添加到请求中。
您还可以使用[API Explorer](https://console.huaweicloud.com/apiexplorer/#/openapi/OBS/doc?api=SetBucketTagging)在线调试接口。
#### 请求消息样式
以下为请求消息样例，请将示例中的*BucketName* 修改为您的桶名，*RegionID* 修改为桶所在的区域ID，可参考[支持区域](https://console.huaweicloud.com/apiexplorer/#/endpoint/OBS)获取区域ID。
```
PUT /?tagging HTTP/1.1 
Host: BucketName.obs.RegionID.myhuaweicloud.com 
Date: GMT Date
Authorization: SignatureValue
Content-MD5: md5
<Tagging> 
    <TagSet>
        <Tag> 
            <Key>Tag Name</Key> 
            <Value>Tag Value</Value> 
        </Tag> 
    </TagSet> 
</Tagging>
```
#### URI参数（URI Parameters）
表1URI参数 
| 参数      | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
|:---|:---|:---|:---|
| tagging | 是    | String | **参数解释**： 用于标识API接口与桶标签有关。 **约束限制**： 计算签名时，请在CanonicalizedResource中添加"/*BucketName* /?tagging"，详情参见[签名计算](https://support.huaweicloud.com/api-obs/obs_04_0010.html)。 **取值范围**： tagging **默认取值**： 不涉及 |
   
#### 请求头参数（Request headers）
该请求使用的消息头如下[表2]所示。
 表2请求头参数 
| 消息头名称       | 参数类型   | 是否必选 | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
|:---|:---|:---|:---|
| Content-MD5 | String | 是    | **参数解释：** 按照RFC 1864标准计算出消息体的MD5摘要字符串，即消息体128-bit MD5值经过base64编码后得到的字符串。也支持设置Content-SHA256头域，其值为消息体256-bit SHA256值经过base64编码后得到的字符串，Content-MD5和Content-SHA256二选一。 示例：n58IG6hfM7vqI4K0vnWpog== **约束限制：** 无 **取值范围：** 无 **默认取值：** 无 |
   
#### 请求体参数（Request body）
在此请求中，需要在请求的消息体中配置桶的标签。标签的配置信息以XML格式上传。具体的配置元素如[表3]。
 表3桶标签请求体参数 
| 消息头名称   | 参数类型   | 是否必选 | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
|:---|:---|:---|:---|
| Tagging | XML    | 是    | **参数解释：** TagSet和Tag的父元素。 **约束限制：** 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| TagSet  | XML    | 是    | **参数解释：** Tag的父元素。父元素：Tagging **约束限制：** 每个桶最多能设置20个标签，即TagSet下最多有20个Tag节点。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| Tag     | XML    | 是    | **参数解释：** Tag的信息元素。父元素：TagSet **约束限制：** 每个桶最多能设置20个标签，即TagSet下最多有20个Tag节点。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| Key     | String | 是    | **参数解释：** 标签的名字。父元素：Tag **约束限制：** - 标签的键名（Key）的最大长度为128个字符。  - 标签的键名（Key）和键值（Value）不能包含字符","、"\*"、"\|"、"/"、"\<"、"\>"、"="、"\\"以及ASCII码0x00\~0x1F的控制字符，在发送到服务器之前，必须将键名（Key）和键值（Value）进行UrlEncode编码。   **取值范围：** 长度为1\~128的字符串。 **默认取值：** 无    |
| Value   | String | 是    | **参数解释：** 标签的值。父元素：Tag **约束限制：** - 标签的键值（Value）的最大长度为255个字符。  - 标签的键名（Key）和键值（Value）不能包含字符","、"\*"、"\|"、"/"、"\<"、"\>"、"="、"\\"以及ASCII码0x00\~0x1F的控制字符，在发送到服务器之前，必须将键名（Key）和键值（Value）进行UrlEncode编码。   **取值范围：** 长度大于等于0小于255的字符串。 **默认取值：** 无 |
   
#### 响应消息样式
```
HTTP/1.1 204 No Content
x-obs-request-id: request id
x-obs-id-2: id
Content-Length: length
Date: date
```
#### 响应头 (Response Headers)
该请求的响应消息使用公共响应头，具体请参考[表1](https://support.huaweicloud.com/api-obs/obs_04_0013.html#ZH-CN_TOPIC_0173612084__d0e686)。
#### 响应体 (Response Body)
本接口的响应消息中不携带响应体。
#### 错误响应消息
除了公共的错误码外，此接口还会返回一些其他的错误码。下表中列出本接口的一些常见错误，以及可能原因。如[表4]。
 表4配置桶标签错误码列表 
| 错误码               | 描述                | HTTP状态码         |
|:---|:---|:---|
| InvalidTagError   | 配置桶标签时，提供了无效的Tag。 | 400 Bad Request |
| MalformedXMLError | 配置桶标签时，提供的xml格式错误 | 400 Bad Request |
   
#### 请求示例
例如要为桶名为examplebucket的桶打上键名（Key）为TagKey(Name1)，键值（Value）为TagValue(Value1)的标签，则发送的请求为：
```
PUT /?tagging HTTP/1.1
User-Agent: curl/7.29.0
Host: examplebucket.obs.cn-north-4.myhuaweicloud.com
Accept: */*
Date: Wed, 27 Jun 2018 13:22:50 GMT
Authorization: OBS H4IPJX0TQTHTHEBQQCEC:Pf1ZyGvVYg2BzOjokZ/BAeR1mEQ=
Content-MD5: MnAEvkfQIGnBpchOE2U6Og==
Content-Length: 182
<Tagging xmlns="http://obs.cn-north-4.myhuaweicloud.com/doc/2015-06-30/">
  <TagSet>
    <Tag>
      <Key>TagKey%28Name1%29</Key>
      <Value>TagValue%28Value1%29</Value>
    </Tag>
  </TagSet>
</Tagging>
```
#### 响应示例
```
HTTP/1.1 204 No Content
Server: OBS
x-obs-request-id: BF26000001643FEBA09B1ED46932CD07
x-obs-id-2: 32AAAQAAEAABSAAgAAEAABAAAQAAEAABCSEZp87iEirC6DggPB5cN49pSvHBWClg
Date: Wed, 27 Jun 2018 13:22:50 GMT
```
#### 使用SDK调用接口
建议您使用OBS SDK调用接口。SDK对API进行了封装以简化您的开发工作，直接调用SDK接口函数即可访问OBS，无需手动计算签名。
| [Java](https://support.huaweicloud.com/sdk-java-devg-obs/obs_21_1702.html) | [Python](https://support.huaweicloud.com/sdk-python-devg-obs/obs_22_0834.html) | [C](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_1302.html) | [Go](https://support.huaweicloud.com/sdk-go-devg-obs/obs_33_0436.html) | [BrowserJS](https://support.huaweicloud.com/sdk-browserjs-devg-obs/obs_24_1302.html) | [.NET](https://support.huaweicloud.com/sdk-dotnet-devg-obs/obs_25_1302.html) | [Android](https://support.huaweicloud.com/sdk-android-devg-obs/obs_26_1302.html) | [iOS](https://support.huaweicloud.com/sdk-ios-devg-obs/obs_27_1302.html) | [PHP](https://support.huaweicloud.com/sdk-php-devg-obs/obs_28_1302.html) | [Node.js](https://support.huaweicloud.com/sdk-nodejs-devg-obs/obs_29_1302.html) |
|---|---|---|---|---|---|---|---|---|---|
   
#### 相关文档
- 了解更多桶标签相关信息，请参见[桶标签](https://support.huaweicloud.com/usermanual-obs/obs_03_0331.html)。
- API操作涉及的计费项参见[计费项](https://support.huaweicloud.com/price-obs/obs_42_0002.html)。
 
