バケットタグを使用して、OSS バケットを分類および管理します。たとえば、異なる目的で使用するバケットを識別するために異なるタグを付与したり、特定のタグが付与されたバケットに対してアクセスの制御を設定したりできます。
制限事項
-
各バケットには最大 20 個のタグ(キーと値のペア)を設定できます。
-
タグのキーと値は UTF-8 エンコードである必要があります。
-
タグキーの長さは最大 64 文字で、大文字と小文字を区別し、空にすることはできません。また、キーは
http://、https://、またはAliyun(大文字・小文字を区別しない)で始まってはなりません。 -
タグ値の長さは最大 128 文字で、空文字列にすることもできます。
操作手順
OSS コンソール
-
OSS コンソールにログインします。
-
左側のナビゲーションウィンドウで、バケット をクリックします。表示されたページで、対象のバケット名をクリックします。
-
左側のナビゲーションウィンドウで、バケットの設定 > バケットタグ を選択します。
-
バケットタグ ページで、タグの作成 をクリックします。
-
+ Tag をクリックし、タグのキーと値を入力するか、既存のタグを選択します。
複数のタグを追加するには、+ Tag をクリックします。
-
設定 をクリックします。
Alibaba Cloud SDK
以下のコードは、一般的な Alibaba Cloud SDK を使用してバケットタグを設定する方法を示しています。その他の SDK を使用したコード例については、「SDK overview」をご参照ください。
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";
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET の環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// バケットの名前を指定します。例:examplebucket。
String bucketName = "examplebucket";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
String region = "cn-hangzhou";
// OSSClient インスタンスを作成します。
// OSSClient の使用が完了したら、shutdown メソッドを呼び出してリソースを解放してください。
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);
// タグのキーと値を指定します。たとえば、キーを 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({
// バケットが配置されているリージョンを設定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、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,
// バケット名を設定します。
bucket: 'yourBucketName',
});
// バケットタグを設定します。
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('yourBucketName', 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", "", "バケットが配置されているリージョン。")
flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
}
func main() {
// コマンドラインパラメーターを解析します。
flag.Parse()
// バケット名が空かどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// リージョンが空かどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// デフォルト設定を読み込み、認証情報プロバイダーおよびリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSSClient インスタンスを作成します。
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;
// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを 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");
// バケットの名前を指定します。例:examplebucket。
var bucketName = "examplebucket";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを 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);
c.SetRegion(region);
try
{
// バケットにタグを設定します。
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 をバケットのリージョンのエンドポイントに設定します。たとえば、中国 (杭州) リージョンの場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
std::string Endpoint = "yourEndpoint";
/* yourRegion をバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) リージョンの場合は、リージョンを cn-hangzhou に設定します。 */
std::string Region = "yourRegion";
/* バケット名を指定します。例: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);
/* バケットタグを設定します。 */
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")
# (必須)リージョンパラメーターを指定します。これはバケットが配置されているリージョンを示します。
parser.add_argument('--region', help='バケットが配置されているリージョン。', required=True)
# (必須)--bucket パラメーターを指定します。これはバケットの名前を示します。
parser.add_argument('--bucket', help='バケットの名前。', required=True)
# (オプション)--endpoint パラメーターを指定します。これは他のサービスが OSS にアクセスするために使用できるエンドポイントを示します。
parser.add_argument('--endpoint', help='他のサービスが OSS にアクセスするために使用できるドメイン名。')
def main():
# コマンドラインパラメーターを解析します。
args = parser.parse_args()
# 環境変数からアクセス認証情報(AccessKey ID および AccessKey Secret)を読み込みます。
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
# 上記の設定を使用して OSSClient インスタンスを初期化します。
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( # 2 番目のタグ。
key='test_key2', # タグキー。
value='test_value2', # タグ値。
),
],
),
),
)
)
# 操作の HTTP ステータスコードおよびリクエスト 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' => 'バケットが配置されているリージョン', 'required' => True], // リージョンパラメーターは必須です。
"endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名', 'required' => False], // エンドポイントパラメーターはオプションです。
"bucket" => ['help' => 'バケットの名前', '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"]; // バケットの名前。
// 環境変数を使用して認証情報(AccessKey ID および AccessKey Secret)を読み込みます。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// SDK のデフォルト設定を使用します。
$cfg = Oss\Config::loadDefault();
// 認証情報プロバイダーを指定します。
$cfg->setCredentialsProvider($credentialsProvider);
// リージョンを指定します。
$cfg->setRegion($region);
// エンドポイントが提供されている場合、それを設定します。
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// OSSClient インスタンスを作成します。
$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);
// 結果を出力します。
printf(
'status code:' . $result->statusCode . PHP_EOL . // HTTP ステータスコード。
'request id:' . $result->requestId // リクエストの一意な ID。
);
ossutil CLI
ossutil を使用してタグを追加または変更できます。ossutil のインストール方法については、「Install 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 リクエストを直接送信できます。この場合、署名を手動で計算する必要があります。詳細については、「PutBucketTags」をご参照ください。
権限付与の例
企業内の異なるプロジェクトでは、通常、個別の OSS バケットを使用します。これらのバケットにプロジェクト固有のタグを追加することで、RAM ポリシーを使用してユーザーに自分のプロジェクトに関連付けられたバケットへのみアクセスを許可できます。これにより、きめ細かなアクセス制御が可能になり、プロジェクト間でのリソースへの不正アクセスを防止できます。具体的な権限付与の例については、「特定のタグを持つバケットでデータの読み取りおよび書き込みを行うための RAM ユーザーへの権限付与」をご参照ください。