すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:バケットタグの管理

最終更新日:Mar 21, 2026

バケットタグは、プロジェクト、環境、またはチームごとに OSS バケットをグループ化するために、OSS バケットにアタッチするキーと値のペアです。タグ付けすると、Resource Access Management (RAM) ポリシーでこれらのタグを参照して、きめ細かなアクセスの制御を適用できます。これにより、どのユーザーがどのバケットのデータを読み書きできるかを制限します。

一般的な使用例:

  • アクセスの制御: バケットタグに基づいてアクセスを許可または拒否する RAM ポリシーを作成し、プロジェクト間のデータアクセスを防ぎます。

  • リソースのグループ化: 各バケットを開かずに、バケットの所有権を一目で識別します。

前提条件

開始する前に、以下があることを確認してください。

  • oss:PutBucketTagging 権限、またはバケット所有者としてのアクセス

この権限を持たないユーザーは、403 ForbiddenAccessDenied エラーコードを伴う応答を受け取ります。

制限事項

制約事項詳細
バケットあたりの最大タグ数20
エンコーディングUTF-8
タグキーの長さ最大 64 文字。大文字と小文字を区別。空欄不可
制限付きキープレフィックスhttp://https://、および Aliyun(大文字・小文字を区別しない)で始まらないこと
タグ値の長さ最大 128 文字。空欄可
リージョン属性のないバケット非対応

バケットへのタグ追加

OSS コンソールの使用

  1. OSS コンソールにログインしてください。OSS コンソール

  2. 左側のナビゲーションウィンドウで、[バケット] をクリックします。バケットページで、対象のバケットを検索してクリックします。

  3. 左側のナビゲーションツリーで、バケット設定バケットタグ付け を選択します。

  4. [バケットタグ付け] ページで、[タグの作成] をクリックします。

  5. [+ Tag] をクリックし、タグキーと値を入力するか、既存のタグを選択します。複数のタグを追加するには、追加するタグごとに [+ Tag] をクリックします。

  6. [保存]」をクリックします。

OSS SDK の使用

以下のすべての例では、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数から認証情報をロードします。examplebucket およびリージョンを、実際の値に置き換えてください。

<details> <summary>Python</summary>

import argparse
import alibabacloud_oss_v2 as oss

parser = argparse.ArgumentParser(description="Put bucket tags")
parser.add_argument('--region', help='The region where the bucket is located.', required=True)
parser.add_argument('--bucket', help='The bucket name.', required=True)
parser.add_argument('--endpoint', help='Custom endpoint (optional).')

def main():
    args = parser.parse_args()

    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    cfg.region = args.region

    if args.endpoint:
        cfg.endpoint = args.endpoint

    client = oss.Client(cfg)

    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'),
                    ],
                ),
            ),
        )
    )

    print(f'status code: {result.status_code}, request id: {result.request_id}')


if __name__ == "__main__":
    main()

</details>

<details> <summary>Java</summary>

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.SetBucketTaggingRequest;

public class Demo {

    public static void main(String[] args) throws Exception {
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        EnvironmentVariableCredentialsProvider credentialsProvider =
            CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        String bucketName = "examplebucket";
        String region = "cn-hangzhou";

        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
            .endpoint(endpoint)
            .credentialsProvider(credentialsProvider)
            .clientConfiguration(clientBuilderConfiguration)
            .region(region)
            .build();

        try {
            SetBucketTaggingRequest request = new SetBucketTaggingRequest(bucketName);
            request.setTag("owner", "John");
            request.setTag("location", "hangzhou");
            ossClient.setBucketTagging(request);
        } catch (OSSException oe) {
            System.out.println("Error code: " + oe.getErrorCode());
            System.out.println("Request ID: " + oe.getRequestId());
        } catch (ClientException ce) {
            System.out.println("Error: " + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

</details>

<details> <summary>Go</summary>

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
)

func init() {
	flag.StringVar(&region, "region", "", "The region where the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The bucket name.")
}

func main() {
	flag.Parse()

	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("bucket name is required")
	}
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("region is required")
	}

	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	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)
}

</details>

<details> <summary>PHP</summary>

<?php

require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

$optsdesc = [
    "region" => ['help' => 'The region where the bucket is located.', 'required' => true],
    "endpoint" => ['help' => 'Custom endpoint (optional).', 'required' => false],
    "bucket" => ['help' => 'The bucket name.', 'required' => true],
];

$longopts = array_map(fn($key) => "$key:", array_keys($optsdesc));
$options = getopt("", $longopts);

foreach ($optsdesc as $key => $value) {
    if ($value['required'] && empty($options[$key])) {
        echo "Error: --$key is required. " . $value['help'];
        exit(1);
    }
}

$region = $options["region"];
$bucket = $options["bucket"];

$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);

if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]);
}

$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);
$result = $client->putBucketTags($request);

printf(
    'status code: %s' . PHP_EOL .
    'request id: %s' . PHP_EOL,
    $result->statusCode,
    $result->requestId
);

</details>

<details> <summary>Node.js</summary>

const OSS = require('ali-oss');

const client = new OSS({
  region: 'oss-cn-hangzhou',
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  bucket: 'examplebucket',
});

async function putBucketTags(bucketName, tags) {
  try {
    const result = await client.putBucketTags(bucketName, tags);
    console.log(result);
  } catch (e) {
    console.log(e);
  }
}

const tags = { owner: 'John', location: 'hangzhou' };
putBucketTags('examplebucket', tags);

</details>

<details> <summary>C#</summary>

using Aliyun.OSS;
using Aliyun.OSS.Common;

var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
var bucketName = "examplebucket";
const string region = "cn-hangzhou";

var conf = new ClientConfiguration();
conf.SignatureVersion = SignatureVersion.V4;

var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);

try
{
    var setRequest = new SetBucketTaggingRequest(bucketName);
    setRequest.AddTag(new Tag { Key = "project", Value = "projectone" });
    setRequest.AddTag(new Tag { Key = "user", Value = "jsmith" });
    client.SetBucketTagging(setRequest);
    Console.WriteLine("Bucket tags set successfully.");
}
catch (OssException ex)
{
    Console.WriteLine("Error code: {0}, Message: {1}, RequestID: {2}",
        ex.ErrorCode, ex.Message, ex.RequestId);
}
catch (Exception ex)
{
    Console.WriteLine("Error: {0}", ex.Message);
}

</details>

<details> <summary>C++</summary>

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    std::string Endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    std::string Region = "cn-hangzhou";
    std::string BucketName = "examplebucket";

    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    SetBucketTaggingRequest request(BucketName);
    Tag tag1("key1", "value1");
    Tag tag2("key2", "value2");
    TagSet tagset;
    tagset.push_back(tag1);
    tagset.push_back(tag2);
    Tagging tagging;
    tagging.setTags(tagset);
    request.setTagging(tagging);

    auto outcome = client.SetBucketTagging(request);
    if (outcome.isSuccess()) {
        std::cout << "SetBucketTagging succeeded." << std::endl;
    } else {
        std::cout << "SetBucketTagging failed. Code: " << outcome.error().Code()
                  << ", Message: " << outcome.error().Message()
                  << ", RequestId: " << outcome.error().RequestId() << std::endl;
        return -1;
    }

    ShutdownSdk();
    return 0;
}

</details>

他の言語の SDK の例については、「OSS SDK の概要」をご参照ください。

ossutil の使用

ossutil を使用してバケットタグを追加または更新する手順については、「バケットにタグを追加するか、バケットのタグを変更する」をご参照ください。

OSS API の使用

API を直接呼び出すには、リクエストに署名計算を含めます。詳細については、「PutBucketTags」をご参照ください。

例: プロジェクトごとの RAM ベースのアクセスの制御を適用する

各プロジェクトが専用の OSS バケットを使用する企業では、各バケットにプロジェクト名でタグ付けし、特定のタグに一致するバケットへのアクセスを制限する RAM ポリシーを作成できます。これにより、チームが誤って別のプロジェクトのバケットのデータを読み書きするのを防ぎます。ステップバイステップガイドについては、「特定のタグを持つバケット内のデータを読み書きするように RAM ユーザーを承認する」をご参照ください。

次のステップ