您可以通过存储空间(Bucket)的标签功能, 对Bucket进行分类管理。例如通过不同的标签来标记不同用途的Bucket,对拥有指定标签的Bucket设置访问权限等。
无地域属性Bucket不支持使用Bucket标签。
注意事项
Bucket标签使用一组键值对(Key-Value)来标记Bucket,您可以通过Bucket标签标记不同用途的Bucket,并进行分类管理。
每个Bucket最多可设置20个标签(Key-Value对)。
Key和Value必须为UTF-8编码。
Key最大长度为64字符,区分大小写,不能为空。Key不支持以
http://
、https://
、Aliyun
为前缀(不区分大小写)。Value最大长度为128字符,可以为空。
使用场景
当您的Bucket数量较多时,您可以使用Bucket标签对您的Bucket进行分类,并通过RAM策略授权指定用户(UID为193248792425xxxx)可以管理具有指定标签的Bucket。例如授权用户A可以列举所有具有Key为key1、Value为value1标签的Bucket,RAM Policy示例如下:
{
"Version": "1",
"Statement": [
{
"Action": [
"oss:ListBuckets"
],
"Resource": [
"acs:oss:*:193248792425xxxx:*"
],
"Effect": "Allow",
"Condition": {
"StringEquals": {
"oss:BucketTag/key1": "value1"
}
}
}
]
}
您还可以授予该用户其他操作权限(Action),例如向具有指定标签的Bucket写入数据、查看Bucket相关信息等。关于RAM Policy支持的Action信息,请参见RAM Policy。
操作方式
使用OSS控制台
登录OSS管理控制台。
单击Bucket 列表,然后单击目标Bucket名称。
在左侧导航栏,选择Bucket 配置 > Bucket 标签。
在Bucket 标签页面,单击创建标签。
单击+标签,分别输入标签的Key和Value或者选择已有标签。
如需添加多个标签,请单击+标签。
单击保存。
使用阿里云SDK
以下仅列举常见SDK的设置Bucket标签的代码示例。关于其他SDK的设置Bucket标签的代码示例,请参见SDK简介。
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.SetBucketTaggingRequest;
public class Demo {
public static void main(String[] args) throws Exception {
// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// 填写Bucket名称,例如examplebucket。
String bucketName = "examplebucket";
// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。
String region = "cn-hangzhou";
// 创建OSSClient实例。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// 设置Bucket标签。
SetBucketTaggingRequest request = new SetBucketTaggingRequest(bucketName);
// 依次填写Bucket标签的键(例如owner)和值(例如John)。
request.setTag("owner", "John");
request.setTag("location", "hangzhou");
ossClient.setBucketTagging(request);
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
const OSS = require('ali-oss')
const client = new OSS({
// yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
region: 'yourregion',
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// yourBucketName填写Bucket名称。
bucket: 'yourBucketName',
});
// 设置Bucket标签。
async function putBucketTags(bucketName, tag) {
try {
const result = await client.putBucketTags(bucketName, tag);
console.log(result);
} catch (e) {
console.log(e);
}
}
const tag = { a: '1', b: '2' };
putBucketTags('bucketName', tag)
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// 定义全局变量
var (
region string // 存储区域
bucketName string // 存储空间名称
)
// init函数用于初始化命令行参数
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}
func main() {
// 解析命令行参数
flag.Parse()
// 检查bucket名称是否为空
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// 检查region是否为空
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 创建设置存储空间标签的请求
request := &oss.PutBucketTagsRequest{
Bucket: oss.Ptr(bucketName), // 存储空间名称
Tagging: &oss.Tagging{
&oss.TagSet{
[]oss.Tag{
{
Key: oss.Ptr("k1"), // 标签键
Value: oss.Ptr("v1"), // 标签值
},
{
Key: oss.Ptr("k2"), // 标签键
Value: oss.Ptr("v2"), // 标签值
},
{
Key: oss.Ptr("k3"), // 标签键
Value: oss.Ptr("v3"), // 标签值
},
},
},
},
}
// 发送设置存储空间标签的请求
result, err := client.PutBucketTags(context.TODO(), request)
if err != nil {
log.Fatalf("failed to put bucket tags %v", err)
}
// 打印设置存储空间标签的结果
log.Printf("put bucket tags result:%#v\n", result)
}
using Aliyun.OSS;
using Aliyun.OSS.Common;
// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
var endpoint = "yourEndpoint";
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// 填写Bucket名称,例如examplebucket。
var bucketName = "examplebucket";
// 填写Bucket所在地域对应的Region。以华东1(杭州)为例,Region填写为cn-hangzhou。
const string region = "cn-hangzhou";
// 创建ClientConfiguration实例,按照您的需要修改默认参数。
var conf = new ClientConfiguration();
// 设置v4签名。
conf.SignatureVersion = SignatureVersion.V4;
// 创建OssClient实例。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
//设置Bucket标签。
var setRequest = new SetBucketTaggingRequest(bucketName);
var tag1 = new Tag
{
Key = "project",
Value = "projectone"
};
var tag2 = new Tag
{
Key = "user",
Value = "jsmith"
};
setRequest.AddTag(tag1);
setRequest.AddTag(tag2);
client.SetBucketTagging(setRequest);
Console.WriteLine("Set bucket:{0} Tagging succeeded ", bucketName);
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Failed with error info: {0}", ex.Message);
}
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/*初始化OSS账号信息。*/
/*yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
std::string Endpoint = "yourEndpoint";
/ *yourRegion填写Bucket所在地域对应的Region。以华东1(杭州)为例,Region填写为cn - hangzhou。 * /
std::string Region = "yourRegion";
/*填写Bucket名称,例如examplebucket。*/
std::string BucketName = "examplebucket";
/*初始化网络等资源。*/
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/*设置Bucket标签。*/
SetBucketTaggingRequest request(BucketName);
Tag tag1("yourTagkey1","yourTagValue1");
Tag tag2("yourTagkey2", "yourTagValue2");
TagSet tagset;
tagset.push_back(tag1);
tagset.push_back(tag2);
Tagging taging;
taging.setTags(tagset);
request.setTagging(taging);
auto outcome = client.SetBucketTagging(request);
if (outcome.isSuccess()) {
std::cout << " SetBucketTagging success " << std::endl;
}
else {
/*异常处理。*/
std::cout << "SetBucketTagging fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/*释放网络等资源。*/
ShutdownSdk();
return 0;
}
import argparse
import alibabacloud_oss_v2 as oss
# 创建命令行参数解析器,用于接收用户输入的参数
parser = argparse.ArgumentParser(description="put bucket tags sample")
# 添加命令行参数 --region,表示存储空间所在的地域,必填项
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# 添加命令行参数 --bucket,表示存储空间的名称,必填项
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
# 添加命令行参数 --endpoint,表示其他服务访问 OSS 时使用的域名,可选项
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
def main():
# 解析命令行参数
args = parser.parse_args()
# 从环境变量中加载凭证信息(AccessKeyId 和 AccessKeySecret)
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# 加载 SDK 的默认配置
cfg = oss.config.load_default()
# 设置凭证提供者
cfg.credentials_provider = credentials_provider
# 设置存储空间所在的地域
cfg.region = args.region
# 如果用户提供了自定义的 endpoint,则设置到配置中
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# 使用配置对象初始化 OSS 客户端
client = oss.Client(cfg)
# 调用 put_bucket_tags 方法为存储空间设置标签
result = client.put_bucket_tags(
oss.PutBucketTagsRequest(
bucket=args.bucket, # 指定目标存储空间的名称
tagging=oss.Tagging( # 构造标签集合
tag_set=oss.TagSet( # 标签集合包含多个标签
tags=[ # 定义标签列表
oss.Tag( # 第一个标签
key='test_key', # 标签键
value='test_value', # 标签值
),
oss.Tag( # 第二个标签
key='test_key2', # 标签键
value='test_value2', # 标签值
),
],
),
),
)
)
# 打印操作结果的状态码和请求 ID
print(f'status code: {result.status_code}, ' # HTTP 状态码,表示请求是否成功
f'request id: {result.request_id}') # 请求 ID,用于追踪请求日志和调试
if __name__ == "__main__":
# 程序入口,调用 main 函数执行逻辑
main()
<?php
// 引入自动加载文件 加载依赖库
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// 定义命令行参数描述
$optsdesc = [
"region" => ['help' => 'The region in which the bucket is located', 'required' => True], // 区域是必填项 存储空间所在的区域
"endpoint" => ['help' => 'The domain names that other services can use to access OSS', 'required' => False], // 终端节点是可选项 其他服务可以用来访问OSS的域名
"bucket" => ['help' => 'The name of the bucket', 'required' => True], // 存储空间名称是必填项
];
// 生成长选项列表 用于解析命令行参数
$longopts = \array_map(function ($key) {
return "$key:"; // 每个参数后面加冒号 表示需要值
}, array_keys($optsdesc));
// 解析命令行参数
$options = getopt("", $longopts);
// 检查必填参数是否缺失
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help"; // 提示用户缺少必填参数
exit(1);
}
}
// 获取命令行参数值
$region = $options["region"]; // 存储空间所在区域
$bucket = $options["bucket"]; // 存储空间名称
// 使用环境变量加载凭证信息 AccessKeyId 和 AccessKeySecret
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// 使用SDK的默认配置
$cfg = Oss\Config::loadDefault();
// 设置凭证提供者
$cfg->setCredentialsProvider($credentialsProvider);
// 设置区域
$cfg->setRegion($region);
// 如果提供了终端节点 则设置终端节点
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// 创建OSS客户端实例
$client = new Oss\Client($cfg);
// 创建存储空间标签对象 包含多个键值对
$tagging = new Oss\Models\Tagging(
tagSet: new Oss\Models\TagSet(
tags: [new Oss\Models\Tag(key: 'key1', value: 'value1'), new Oss\Models\Tag(key: 'key2', value: 'value2')]
)
);
// 创建设置存储空间标签的请求对象 并将标签内容传入
$request = new Oss\Models\PutBucketTagsRequest(bucket: $bucket, tagging: $tagging);
// 调用putBucketTags方法设置存储空间的标签
$result = $client->putBucketTags(request: $request);
// 打印返回结果
printf(
'status code:' . $result->statusCode . PHP_EOL . // HTTP响应状态码
'request id:' . $result->requestId // 请求的唯一标识
);
使用命令行工具ossutil
您可以使用命令行工具ossutil来添加或修改标签,ossutil的安装请参见安装ossutil。
以下示例展示了如何为存储空间examplebucket
添加或修改标签。
ossutil api put-bucket-tags --bucket examplebucket --tagging "{\"TagSet\":{\"Tag\":[{\"Key\":\"key1\",\"Value\":\"value1\"},{\"Key\":\"key2\",\"Value\":\"value2\"}]}}"
如果您想了解该命令的更多信息,请参见put-bucket-tags。
相关API
以上操作方式底层基于API实现,如果您的程序自定义要求较高,您可以直接发起REST API请求。直接发起REST API请求需要手动编写代码计算签名。更多信息,请参见PutBucketTags。
- 本页导读 (1)
- 注意事项
- 使用场景
- 操作方式
- 使用OSS控制台
- 使用阿里云SDK
- 使用命令行工具ossutil
- 相关API