Object Storage Service (OSS) では、バケットタグを使用してバケットを分類および管理できます。バケットタグ付け機能を使用すると、さまざまな目的に使用されるバケットのタグを設定し、特定のタグを持つバケットのアクセス制御リスト (ACL) を設定できます。
注意事項
バケットオーナーと
oss:PutBucketTagging
権限が付与されているユーザーのみが、バケットのタグを設定できます。他のユーザーがバケットのタグを設定しようとすると、AccessDenied エラーコードを含む 403 Forbidden メッセージが返されます。バケットごとに最大 20 個のタグ (キーと値のペア) を設定できます。
タグのキーと値は UTF-8 でエンコードする必要があります。
キーは最大 64 文字まで使用できます。大文字と小文字が区別され、空にすることはできません。キーは
http://
、https://
、またはAliyun
で始めることはできません。これらのプレフィックスは大文字と小文字が区別されません。タグの値は最大 128 文字まで使用でき、空にすることもできます。
手順
OSS コンソールを使用する
OSS コンソール にログオンします。
左側のナビゲーションウィンドウで、バケット をクリックします。[バケット] ページで、目的のバケットを見つけてクリックします。
左側のナビゲーションツリーで、バケットの設定 > バケットタグ を選択します。
バケットタグ ページで、タグの作成 をクリックします。
[+ タグ] をクリックしてタグのキーと値を入力するか、既存のタグを選択します。
バケットに複数のタグを追加するには、[+ タグ] をクリックします。
設定 をクリックします。
OSS SDK を使用する
次のコードは、一般的なプログラミング言語の OSS SDK を使用してバケットのタグを設定する方法の例を示しています。他のプログラミング言語の OSS 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 {
// この例では、中国 (杭州) リージョンのエンドポイントが使用されています。実際のエンドポイントを指定してください。
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 インスタンスを作成します。
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({
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを 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('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", "", "バケットが配置されているリージョン。")
flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
}
func main() {
// コマンドラインパラメータを解析します。
flag.Parse()
// バケット名が空かどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータ、バケット名が必要です")
}
// リージョンが空かどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータ、リージョンが必要です")
}
// デフォルト設定を読み込み、認証情報プロバイダーとリージョンを指定します。
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("バケットタグの設定に失敗しました %v", err)
}
// タグ設定の結果を表示します。
log.Printf("バケットタグの設定結果:%#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 にアクセスするために使用するアカウントに関する情報を初期化します。 */
/* バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
std::string Endpoint = "yourEndpoint";
/* バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを 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")
# コマンドライン引数 --region を追加します。バケットが配置されているリージョンを示し、必須です
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()
# 環境変数から認証情報 (AccessKeyId と AccessKeySecret) をロードします
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# SDK のデフォルト設定をロードします
cfg = oss.config.load_default()
# 認証情報プロバイダーを設定します
cfg.credentials_provider = credentials_provider
# バケットが配置されているリージョンを設定します
cfg.region = args.region
# ユーザーがカスタムエンドポイントを提供する場合は、設定で設定します
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( # 2 番目のタグ
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' => 'バケットが配置されているリージョン', '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 シークレット) をロードします。
$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: $request);
// 結果を出力します。
printf(
'status code:' . $result->statusCode . PHP_EOL . // HTTP ステータスコード。
'request id:' . $result->requestId // リクエストの一意の ID。
);
ossutil を使用する
ossutil を使用してバケットタグを設定する方法の詳細については、「バケットにタグを追加する、またはバケットのタグを変更する」をご参照ください。
OSS API を使用する
ビジネスで高度なカスタマイズが必要な場合は、RESTful API を直接呼び出すことができます。API を直接呼び出すには、コードに署名計算を含める必要があります。詳細については、「PutBucketTags」をご参照ください。
例
ある会社では、各プロジェクトにデータストレージ用の個別の OSS バケットが割り当てられています。さまざまなプロジェクトに関連付けられたこれらのバケットにタグを付けることで、RAM ポリシーを通じてきめ細かいアクセス制御を実施し、各プロジェクトのユーザーが指定されたタグが付いたバケット内のデータのみを読み書きできるようにすることができます。このアプローチにより、プロジェクト間の不正アクセスを効果的に防ぐことができます。詳細については、「特定のタグが付いたバケット内のデータを読み書きするための RAM ユーザーの承認」をご参照ください。