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

Object Storage Service:オブジェクトのタグ付け

最終更新日:Dec 14, 2023

Object Storage Service (OSS) では、オブジェクトタグを設定してオブジェクトを分類できます。 タグに基づいて、オブジェクトのライフサイクルルールとアクセス制御リスト (ACL) を設定できます。

タグ付けルール

オブジェクトタグ付けは、キーと値のペアを使用してオブジェクトにタグ付けします。 オブジェクトをアップロードするときと後に、オブジェクトにタグを追加できます。

  • オブジェクトは最大10個のタグを持つことができます。 オブジェクトに追加されるタグには、一意のタグキーが必要です。

  • タグキーの長さは最大128文字です。 タグ値の長さは最大256文字です。

  • タグキーとタグ値は大文字と小文字を区別します。

  • タグのキーと値には、英数字、スペース、および次の特殊文字を含めることができます。

    + - = . _ : /

    HTTPヘッダーのタグに文字が含まれている場合は、タグのキーと値に対してURLエンコードを実行する必要があります。

使用上の注意

  • バケット内のオブジェクトのタグを読み書きできるのは、バケットの所有者とoss:PutObjectTagging権限を持つRAMユーザーのみです。

  • 簡易アップロード、マルチパートアップロード、追加アップロード、およびオブジェクトコピー操作を実行するときに、オブジェクトにタグを追加できます。 アップロードされたオブジェクトにタグを追加することもできます。

  • オブジェクトにタグを追加すると、1時間ごとに追加されたタグの数に基づいて、オブジェクトのタグ付けに対して課金されます。 詳細については、「オブジェクトタグ付け料金」をご参照ください。

  • オブジェクトのタグを変更しても、オブジェクトのLast-Modifiedパラメーターは更新されません。

  • クロスリージョンレプリケーション (CRR) の場合、オブジェクトタグはソースオブジェクトから宛先オブジェクトにレプリケートされます。

シナリオ

  • オブジェクトタグに基づいたライフサイクルルールの設定

    長期間保存する必要のない定期的に生成されたオブジェクトに特定のタグを追加し、ストレージコストの最適化のために定期的にこれらのタグを持つオブジェクトを自動的に削除するようにライフサイクルルールを設定できます。 たとえば、次のライフサイクルルールを設定して、名前にdir1プレフィックスがあり、key1:value1タグが最後に更新されてから30日後にオブジェクトを削除できます。

    <LifecycleConfiguration>
     <Rule>
      <ID>rule1</ID>
      <Prefix>dir1</Prefix>
      <Tag><Key>key1</Key><Value>value1</Value></Tag>
      <Status>Enabled</Status>
      <Expiration>
        <Days>30</Days>
      </Expiration>
     </ルール>
    </LifecycleConfiguration> 
  • RAMユーザーに特定のタグを持つオブジェクトへのアクセスを許可する

    たとえば、次のRAMポリシーを設定して、key2:value2タグを持つオブジェクトにアクセスする権限をRAMユーザーに付与できます。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "oss:GetObject",
          "Resource": "*",
          "Condition": {
            "StringEquals": {
              "oss:ExistingObjectTag/key2": [
                "value2"
              ]
            }
          }
        }
      ]
    }

    RAMユーザーに、特定のタグを持つオブジェクトへのデータの書き込みやオブジェクトに関する情報の表示など、より多くの操作を実行する権限を与えることもできます。 RAMポリシーでサポートされているアクションの詳細については、「概要」をご参照ください。

OSS コンソールの使用

  1. OSSコンソールにログインします。

  2. 左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。

  3. 左側のナビゲーションツリーで、ファイル > オブジェクト を選択します。

  4. タグを追加します。

    1. タグを追加するオブジェクトを選択します。

      • バケットのバージョン管理が有効になっていない

        タグを追加するオブジェクトを見つけて、more > タグを選択します。

      • バケットのバージョン管理が有効

        タグを設定するオブジェクトのバージョンを見つけ、more > タグを選択します。

    2. タグパネルで、画面の指示に従ってキーを設定します。

  5. OK をクリックします。

OSS SDKの使用

次のサンプルコードは、一般的なプログラミング言語のOSS SDKを使用して、単純なアップロードでオブジェクトにタグを追加する方法の例を示しています。 他のプログラミング言語のOSS SDKを使用して、シンプルアップロード、マルチパートアップロード、追加アップロード、およびオブジェクトコピー操作でオブジェクトにタグを追加する方法の詳細については、「概要」をご参照ください。

com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;
java.io.ByteArrayInputStreamをインポートします。java.util.HashMapをインポートします。java.util.Mapをインポートします。public classデモ {
    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";
        // オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: exampledir/exampleobject.txt。 
        文字列objectName = "exampledir/exampleobject.txt";

        // Create an OSSClient instance. 
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        try {
            Map<String, String> tags = new HashMap<String, String>();
            // オブジェクトタグのキーと値を指定します。 たとえば、キーをownerに、値をJohnに設定します。 
            tags.put("所有者" 、"ジョン");
            tags.put("type" 、"document");

            // HTTPヘッダーのタグを設定します。 
            ObjectMetadata metadata = new ObjectMetadata();
            metadata.setObjectTagging (タグ);

            // オブジェクトをアップロードし、オブジェクトにタグを追加します。 
            String content = "<yourtContent>";
            ossClient.putObject(bucketName、objectName、new ByteArrayInputStream(content.getBytes()) 、メタデータ);
        } catch (Exception e) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "しかし、何らかの理由でエラー応答で拒否されました。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエストID:" + oe.getRequestId());
            System.out.println("ホストID:" + oe.getHostId());
        } catch (ClientException e) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + 「ネットワークにアクセスできないなど」;
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } 最後に{
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
} 
<?php
if (is_file(__DIR__) 。 '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__) 。 '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

OSS\OssClientを使用します。OSS\Core\OssExceptionを使用します。// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
$end point = "yourEndpoint";
// バケットの名前を指定します。 例: examplebucket. 
$bucket = "examplebucket";
// オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: exampledir/exampleobject.txt。 
$object = "exampledir/exampleobject.txt";
// アップロードする文字列を指定します。 
$content = "hello world";

$ossClient = new OssClient($accessKeyId, $accessKeySecret, $end point, false);

// オブジェクトにタグを追加します。 
$options = array(
      OssClient::OSS_HEADERS => array(
              'x-oss-tagging' => 'key1=value1&key2=value2&key3=value3' 、));
  
try {
      // シンプルアップロードを使用してオブジェクトをアップロードします。 
      $ossClient->putObject($bucket、$object、$content、$options);
} catch (OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage()) 。 "\n");
    戻ります。}

print(__FUNCTION__) 。 ": OK" 。 "\n"); 
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、
  // バケットの名前を指定します。 
  bucket: 'yourbucketname'
});

// オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: exampledir/exampleobject.txt。 
const objectName = 'exampledir/exampleobject.txt'
// ローカルファイルのフルパスを指定します。 例: D :\\ localpath\\examplefile.txt。 
// デフォルトでは、ローカルパスを指定せずにexamplefile.txtなどのローカルファイル名のみを指定すると、サンプルプログラムが属するプロジェクトのパスからローカルファイルがアップロードされます。 
const localFilepath = 'D :\\ localpath\\examplefile.txt'

// リクエストヘッダーを設定します。 
const headers = {
  // オブジェクトタグのキーと値を指定します。 たとえば、キーをownerに、値をJohnに設定します。 
  'x-oss-tagging': 'owner=John&type=document' 、}

client.put(objectName, localFilepath, {
  ヘッダー
})
# -*-コーディング: utf-8 -*-

oss2のインポート
oss2.headersからOSS_OBJECT_TAGGINGをインポート
oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート

# 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
# バケットの名前を指定します。 
bucket = oss2.Bucket(auth, 'https:// oss-cn-hangzhou.aliyuncs.com ', 'examplebucket')
# オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: exampledir/exampleobject.txt。 
object_name = 'exampledir/exampleobject.txt'

# タグ文字列を設定します。 
tagging = "k1=v1&k2=v2&k3=v3"

# タグに文字が含まれている場合は、URLエンコードを使用してタグのキーと値をエンコードする必要があります。 
k4 = "k4 +-="
v4 = "+-=._:/"
tagging += "&" oss2.urlquote(k4) + "=" oss2.urlquote(v4)

# HTTPヘッダーにタグ設定を追加します。 
headers = dict()
ヘッダー [OSS_OBJECT_TAGGING] =タグ付け

# put_object操作を呼び出すときにヘッダーを指定して、オブジェクトのアップロード時にタグがオブジェクトに追加されるようにします。 
result = bucket.put_object(object_name, 'content', headers=headers)
print('http response status: ', result.status)

# オブジェクトに追加されたタグを表示します。 
result = bucket.get_object_tagging(object_name)
結果のキーに対してtag_set.tagging_rule:
    System.Textを使用した;
Aliyun.OSSを使用します。System.Textを使用する。Aliyun.OSS.Utilを使用します。// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを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");
// バケットの名前を指定します。 
var bucketName = "examplebucket";
// オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 
var objectName = "exampleobject.txt";
var objectContent = "単なるクラウドではありません。";

文字列UrlEncodeKey (文字列キー)
{
const文字列CharsetName = "utf-8";
const char separator = '/';
var segments = key分割 (セパレータ);

var encodedKey = new StringBuilder();
encodedKey.Append(HttpUtils.EncodeUri(segments[0], CharsetName));
for (var i = 1; i < segments.Length; i ++)
    encodedKey.Append(separator).Append(HttpUtils.EncodeUri(segments[i], CharsetName));

    if (key.EndsWith(separator.ToString()))
    {
        // String#splitは後続の空の文字列を無視します。たとえば、"a/b/" は2エントリの配列として分割され、
        // 末尾のスラッシュをすべてuriに追加する必要があります。
        foreach (キーのvar ch)
        {
            if (ch == separator)
                encodedKey.Append(separator);
            else
                break;
        }
    }

encodedKey.ToString() を返します。}
// OSSClientインスタンスを作成します。 
var client = new OssClient (エンドポイント、accessKeyId、accessKeySecret);
トライ
{
    byte[] binaryData = Encoding.ASCII.GetBytes(objectContent);
    MemoryStream requestContent = new MemoryStream(binaryData);

    var meta = new ObjectMetadata();
    // HTTPヘッダーのタグを設定します。 
    string str = UrlEncodeKey("key1") + "=" + UrlEncodeKey("value1") + "&" + UrlEncodeKey("key2") + "=" + UrlEncodeKey("value2");
    meta.AddHeader("x-oss-tagging" 、str);
    var putRequest = new PutObjectRequest(bucketName, objectName, requestContent);
    putRequest. メタデータ=メタ;

    // オブジェクトをアップロードし、オブジェクトにタグを追加します。 
    client.PutObject(putRequest);
    Console.WriteLine("Put object successed");
}
キャッチ (例外ex)
{
    Console.WriteLine("Put object failed, {0}", ex.Message);
} 
の印刷 ('tagging key: {}, value: {}'.format(key, result.tag_set.tagging_rule[key]))
パッケージメイン

import (import (import)
"fmt"
"os"
"strings"

「github.com/aliyun/aliyun-oss-go-sdk/oss」
)

func main() {
// 環境変数からアクセス資格情報を取得します。 コードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// OSSClientインスタンスを作成します。 
	// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。 
	client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}

// バケットの名前を指定します。 例: examplebucket. 
	bucketName := "examplebucket"
// オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: exampledir/exampleobject.txt。 
	objectName := "exampledir/exampleobject.txt"

// バケット情報を取得します。 
	bucket, err := client.Bucket(bucketName)
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}

// オブジェクトタグのキーと値を指定します。 たとえば、キーをownerに設定し、値をJohnに設定します。 
	tag1 := oss.Tag {
キー: "owner" 、値: "ジョン" 、}
tag2 := oss. タグ {
キー: "type" 、値: "document" 、}
tagging := oss.Tagging {
タグ: []oss.Tag{tag1, tag2},
}

// オブジェクトにタグを追加します。 
	err = bucket.PutObject(objectName、strings.NewReader("Hello OSS") 、oss.SetTagging (タグ付け))
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println(bucket.GetObjectTagging(objectName))
}
#include <alibabacloud/oss/OssClient.h>
名前空間listaCloud::OSSを使用します。int main(void)
{
    /* OSSへのアクセスに使用されるアカウントに関する情報を初期化します。 */
    
    /* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 */
    std::stringエンドポイント="https://oss-cn-hangzhou.aliyuncs.com";
    /* バケットの名前を指定します。 例: examplebucket. */
    std::string BucketName = "examplebucket";
    /* オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: exampledir/exampleobject.txt。 */
    std::string ObjectName = "exampledir/exampleobject.txt";

    /* ネットワークリソースなどのリソースを初期化します。 */
    InitializeSdk();

    ClientConfiguration conf;
    /* 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClientクライアント (Endpoint, credentialsProvider, conf);
    std::shared_ptr<std::iostream> content = std::make_shared<std::stringstream>();
    * content << "test cpp sdk";
    PutObjectRequestリクエスト (BucketName, ObjectName, content);

    /* タグを指定します。 */
    タグ付け;
    tagging.addTag (タグ ("key1", "value1"));
    tagging.addTag (タグ ("key2", "value2"));
    request.setTagging(tagging.toQueryParameters());

    /* オブジェクトをアップロードします。 */
    auto outcome = client.PutObject (リクエスト);

    if (!outcome.isSuccess()) {
        /* 例外を処理します。 */
        std::cout << "PutObject fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* ネットワークリソースなどのリソースをリリースします。 */
    ShutdownSdk();
    0を返します。} 

ossutil の使用

ossutilを使用してオブジェクトにタグを追加できます。 詳細については、「オブジェクトタグの追加または変更」をご参照ください。

RESTful APIの使用

ビジネスで高度なカスタマイズが必要な場合は、RESTful APIを直接呼び出すことができます。 APIを直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、「PutObjectTagging」をご参照ください。