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

Object Storage Service:同一アカウント同一リージョンレプリケーション (SRR)

最終更新日:Mar 28, 2026

同一アカウント同一リージョンレプリケーション (SRR) は、ソースバケットから送信先バケットへ、オブジェクト(作成・更新・削除を含む)を自動的かつ非同期(ニアリアルタイム)でレプリケーションします。ソースバケットと送信先バケットは、同一の Alibaba Cloud アカウントに属し、かつ同一リージョン内に配置する必要があります。本トピックでは、同一アカウント内のバケットに対する SRR の設定方法について説明します。

前提条件

  • ご利用の Alibaba Cloud アカウント内で、任意のリージョンにソースバケットが作成済みであり、アカウント UID、ソースバケット名、およびリージョンが記録済みである。

  • 同一の Alibaba Cloud アカウント内で、同一リージョンに送信先バケットが作成済みであり、送信先バケット名が記録済みである。

RAM ロールの種類

SRR を実行するには、Object Storage Service (OSS) が偽装可能な RAM ロールを指定する必要があります。このロールは、ソースバケットから送信先バケットへオブジェクトをレプリケーションするために使用されます。SRR タスクには、以下のいずれかのロールタイプを使用できます。

重要

RAM ユーザーを使用してロールを作成できます。その RAM ユーザーには、以下の権限が必要です:ram:CreateRoleram:GetRoleram:ListPoliciesForRole、および ram:AttachPolicyToRole。ただし、ram:CreateRoleram:GetRole などのロール関連権限を RAM ユーザーに付与することは高いリスクを伴うため、RAM ユーザーに関連付けられた Alibaba Cloud アカウントを使用して、RAM ロールの作成および権限付与を行うことを推奨します。権限付与が完了後、RAM ユーザーは Alibaba Cloud アカウントが作成した RAM ロールを直接再利用できます。

新規 RAM ロール(推奨)

同一アカウント内で同一リージョンレプリケーションルールを作成する際、新しいロールを作成してレプリケーションタスクを完了させることができます。新規ロールを選択した場合、バックグラウンドで名前形式が oss-replication-{uuid} のロールが自動的に作成され、KMS 暗号化オブジェクトのレプリケーション有無に応じて異なる権限ポリシーが付与されます。

  • KMS 暗号化オブジェクトのレプリケーション

    ロールが作成された後、画面上の指示に従って権限付与を行います。権限付与が完了すると、データレプリケーション用の詳細なポリシーおよび KMS 管理用の AliyunKMSCryptoUserAccess ポリシーがロールに付与されます。

  • KMS 暗号化オブジェクトのレプリケーションなし

    ロールが作成された後、画面上の指示に従って権限付与を行います。権限付与が完了すると、データレプリケーション用の詳細なポリシーがロールに付与されます。

AliyunOSSRole

SRR ルールを作成する際、レプリケーションタスクに AliyunOSSRole を選択できます。このロールを選択すると、KMS 暗号化オブジェクトのレプリケーション有無に応じて、対応するポリシーが自動的にアタッチされます。

  • KMS 暗号化オブジェクトのレプリケーション

    AliyunOSSRole を選択した場合、システムは自動的に AliyunOSSFullAccess ポリシー(OSS 管理権限を付与)および AliyunKMSCryptoUserAccess ポリシー(KMS 管理権限を付与)をロールにアタッチします。

    警告

    このロールには、現在のアカウント内のすべてのバケットおよび KMS キーに対する全操作権限があります。権限範囲が広いため、使用には十分ご注意ください。

  • KMS 暗号化オブジェクトのレプリケーションなし

    AliyunOSSRole を選択した場合、システムは自動的に AliyunOSSFullAccess ポリシー(OSS 管理権限を付与)をロールにアタッチします。

    警告

    このロールには、現在のアカウント内のすべてのバケットに対する全操作権限があります。権限範囲が広いため、使用には十分ご注意ください。

カスタムロール

SRR ルールを作成する際、カスタムロールをレプリケーションタスクに使用できます。この場合、RAM コンソールでカスタムロールを作成し、必要な権限を付与する必要があります。

  1. 通常のサービスロールを作成します。

    ロール作成時に、信頼できるエンティティの種類として Alibaba Cloud サービス を、信頼できるサービスとして Object Storage Service を選択します。詳細については、「通常のサービスロールの作成」をご参照ください。

  2. ロールに権限を付与します。

    ロールへの権限付与は、以下のいずれかの方法で行えます。

    システムポリシー

    警告

    システムポリシー AliyunOSSFullAccess を RAM ロールに付与できます。AliyunOSSFullAccess は、デフォルトで現在のアカウント内のすべてのバケットに対して完全な権限を付与します。このポリシーの使用には十分ご注意ください。

    送信先バケットへ KMS 暗号化オブジェクトをコピーする場合は、さらに AliyunKMSFullAccess システムポリシーをロールに付与する必要があります。

    詳細については、「RAM ロールへの権限付与」をご参照ください。

    カスタムポリシー

    ソースバケット(src-bucket)から送信先バケット(dest-bucket)へのオブジェクトレプリケーションに必要な最小限の権限のみを RAM ロールに付与することを推奨します。

    説明

    ポリシーを使用する際は、ソースおよび送信先バケットの名前を実際の名前に置き換えてください。

    {
       "Version":"1",
       "Statement":[
          {
             "Effect":"Allow",
             "Action":[
                "oss:ReplicateList",
              	"oss:ReplicateGet"
             ],
             "Resource":[
              	"acs:oss:*:*:src-bucket",
                "acs:oss:*:*:src-bucket/*"
             ]
          },
          {
             "Effect":"Allow",
             "Action":[
              	"oss:ReplicateList",
                "oss:ReplicateGet",
                "oss:ReplicatePut",
                "oss:ReplicateDelete"
             ],
             "Resource":[
              	"acs:oss:*:*:dest-bucket",
                "acs:oss:*:*:dest-bucket/*"
             ]
          }
       ]
    }

    詳細については、「RAM ロールへの権限付与」をご参照ください。

    説明

    送信先バケットへ KMS 暗号化オブジェクトをコピーする場合は、さらに AliyunKMSFullAccess システムポリシーをロールに付与する必要があります。

重要

同一アカウント内の SRR では、OSS は RAM ロールのポリシーのみに基づいて権限を評価します。ソースバケットおよび送信先バケットのバケットポリシーはチェックされません。

操作手順

OSS コンソール

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

  2. 左側ナビゲーションウィンドウで、バケット をクリックします。[バケット] ページで、ソースバケットの名前をクリックします。

  3. 左側ナビゲーションウィンドウで、データ管理 > 同一リージョン内のレプリケーション を選択します。

  4. [同一リージョン内のレプリケーション] タブで、同一リージョン内のレプリケーション をクリックします。

  5. [同一リージョン内のレプリケーション] パネルで、以下のパラメーターを設定します。

    セクション

    パラメーター

    説明

    ターゲットバケットの設定

    ソースバケット

    ソースバケットのリージョンおよび名前が表示されます。

    ターゲットバケット

    [このアカウント内のバケットを選択] を選択し、次に同じリージョンの送信先バケットをドロップダウンリストから選択します。

    レプリケーションポリシーの設定

    複製するオブジェクト

    レプリケーション対象のソースオブジェクトを選択します。

    • すべてのファイルの同期:バケット内のすべてのオブジェクトを送信先バケットへレプリケーションします。

    • [指定プレフィックスを持つオブジェクト]:指定したプレフィックスを持つオブジェクトを送信先バケットへレプリケーションします。デフォルトでは最大 10 個のプレフィックスを追加できます。上限を増やす場合は、テクニカルサポート までお問い合わせください。上限は 100 まで増加可能です。

    [オブジェクトタグ]

    説明

    このパラメーターを設定するには、以下の条件を満たす必要があります:

    • オブジェクトに既にタグが設定されていること。

    • [削除マーカーのレプリケーション] および [削除操作のレプリケーション] のいずれも選択されていないこと。

    [ルールの設定] チェックボックスを選択後、特定のタグを持つオブジェクトを送信先バケットへレプリケーションできます。最大 10 個のタグ(キーと値のペア)を追加できます。タグを追加した後、以下のいずれかの [タグフィルタリングポリシー] を選択できます。

    • すべてのタグを含む:フィルタリングルールで定義されたすべてのタグがオブジェクトに存在する場合にのみ、オブジェクトがレプリケーションされます。

    • いずれか 1 つのタグを含む:フィルタリングルールで定義されたタグのうち、少なくとも 1 つがオブジェクトに存在する場合に、オブジェクトがレプリケーションされます。

      説明

      タグフィルタリングは、以下のリージョンでは現在サポートされていません:中国 (張家口)、中国 (中衛)、メキシコ。

    コピー削除操作

    データのレプリケーション方法を選択します。

    説明

    レプリケーションルールが作成された後、ライフサイクルルールまたは CopyObject オペレーションによってソースバケット内のオブジェクトのストレージクラスが変更された場合、およびオブジェクトの最終アクセス時刻(x-oss-last-access-time プロパティ)は、送信先バケットへレプリケーションされません。

    • [いいえ](ディザスタリカバリシナリオ向け):ソースバケットから送信先バケットへ、オブジェクトの作成および更新操作をレプリケーションします。

      重要
      • これにより、ソースバケットでの削除(手動またはライフサイクルルールによる)によって送信先バケットで意図しないデータ損失が発生するのを防ぎます。

      • ソースバケットでバージョン管理が有効になっている場合、バージョン ID を指定せずにオブジェクトを削除すると、削除マーカーが作成され、これが送信先バケットへレプリケーションされます。

    • [はい]データ共有シナリオ向け:ソースバケットから送信先バケットへ、オブジェクトの作成、更新、および削除操作をレプリケーションします。

      重要

      このオプションは、作成・更新・削除をレプリケーションすることでバケット間の同期を保ちます。複数のユーザーまたはアプリケーションが同一のデータセットにアクセスする必要がある環境に適しています。ただし、ソースバケットでオブジェクトを削除すると(手動またはライフサイクルルールによる)、送信先バケットのオブジェクトも同時に削除され、復元できませんのでご注意ください。

    マルチパートアップロードでアップロードされたオブジェクトについては、OSS は各パートがアップロードされる都度レプリケーションします。CompleteMultipartUpload オペレーション完了後に、最終的なオブジェクトもレプリケーションされます。

    SRR とバージョン管理を併用した場合のレプリケーション動作の詳細については、「バージョン管理との併用における SRR」をご参照ください。

    既存データの複製

    ソースバケットからの既存データをレプリケーションするかどうかを選択します。

    • [はい]:既存データを送信先バケットへレプリケーションします。

      重要

      既存データをレプリケーションする場合、ソースバケットのオブジェクトが送信先バケット内の同名オブジェクトを上書きする可能性があります。データ損失を防ぐため、ソースおよび送信先の両方のバケットでバージョン管理を有効化することを推奨します。

    • [いいえ]:SRR ルールが有効化された後にアップロードまたは更新されたオブジェクトのみをレプリケーションします。

    KMS 暗号化オブジェクトの複製

    送信先バケットへ KMS 暗号化オブジェクトをレプリケーションするかどうかを選択します。

    • [はい]:ソースオブジェクトまたは送信先バケットが、KMS 管理キー(SSE-KMS)および指定 CMK ID を使用したサーバ側暗号化で暗号化されている場合、オブジェクトを送信先バケットへレプリケーションします。

      説明

      ソースオブジェクトおよび送信先バケットの暗号化ステータスは、それぞれ HeadObject オペレーションおよび GetBucketEncryption オペレーションを呼び出して照会できます。

    • [いいえ]:送信先バケットへ KMS 暗号化オブジェクトをレプリケーションしません。

    CMK ID

    KMS 暗号化オブジェクトをレプリケーションする場合、送信先バケット内のオブジェクトを暗号化するために使用する KMS キーの CMK ID を指定する必要があります。

    CMK ID を指定する前に、まず KMS コンソールで対応するキーを作成する必要があります。KMS キーは、送信先バケットと同じリージョンに配置する必要があります。「CMK の作成」をご参照ください。

    RAM ロール

    新しい RAM ロール の選択を推奨します。このオプションを選択した場合、画面上の指示に従って新規ロールの権限付与を行ってください。

    また、[AliyunOSSRole] またはカスタムロールを選択することもできます。これらの 3 種類のロールの詳細については、「RAM ロールの種類」をご参照ください。

  6. [OK] をクリックします。表示される確認ダイアログボックスで、有効化 をクリックします。

    • SRR ルールが作成された後は、編集および削除ができません。

    • SRR ルールの設定後、レプリケーションタスクは 3~5 分後に開始します。レプリケーションの進行状況は、ソースバケットの [同一リージョン内のレプリケーション] タブで確認できます。

    • データのレプリケーションに要する時間は、データサイズに応じて数分から数時間程度となります。

SDK

同一アカウント内のバケットに対する SRR は、Alibaba Cloud SDK for Java、Python、Go のみでサポートされています。

Java

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.AddBucketReplicationRequest;
import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.common.comm.SignVersion;

public class Demo {

    public static void main(String[] args) throws Exception {
        // エンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // エンドポイントに対応するリージョン ID を指定します(例:cn-hangzhou)。
        String region = "cn-hangzhou";
        // アクセス認証情報をコード内に保存しないことを強く推奨します。そうしないと、アクセス認証情報が漏洩し、アカウント内のすべてのリソースのセキュリティが脅かされる可能性があります。この例では、アクセス認証情報を環境変数から取得しています。サンプルコードを実行する前に、必要な環境変数を設定してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // ソースバケットの名前を指定します。
        String bucketName = "src-bucket";
        // 送信先バケットを指定します。送信先バケットとソースバケットは、同一のアカウントに属している必要があります。
        String targetBucketName = "dest-bucket";
        // 送信先バケットが配置されているリージョンを指定します。送信先バケットとソースバケットは、同一のリージョンに配置されている必要があります。
        String targetBucketLocation = "oss-cn-hangzhou";

        // OSSClient インスタンスを作成します。
        // OSSClient インスタンスが不要になった場合は、shutdown メソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        // V4 署名アルゴリズムを使用することを明示的に宣言します。
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            AddBucketReplicationRequest request = new AddBucketReplicationRequest(bucketName);

            request.setTargetBucketName(targetBucketName);
            request.setTargetBucketLocation(targetBucketLocation);
            // デフォルトでは既存データがレプリケーションされます。このパラメーターを false に設定すると、既存データのレプリケーションを無効化できます。
            request.setEnableHistoricalObjectReplication(false);
            // データレプリケーションを許可された RAM ロールの名前を指定します。このロールには、ソースバケットに対する SRR 実行および送信先バケットへの書き込み権限が必要です。
            request.setSyncRole("yourRole");
            // SSE-KMS を使用して暗号化されたオブジェクトをレプリケーションするかどうかを指定します。
            //request.setSseKmsEncryptedObjectsStatus("Enabled");
            // SSE-KMS で使用する CMK の ID を指定します。SseKmsEncryptedObjectsStatus を Enabled に設定した場合、このパラメーターを指定する必要があります。
            //request.setReplicaKmsKeyID("3542abdd-5821-4fb5-a425-90adca***");
            //List prefixes = new ArrayList();
            //prefixes.add("image/");
            //prefixes.add("video");
            //prefixes.add("a");
            //prefixes.add("A");
            // レプリケーション対象のオブジェクトのプレフィックスを指定します。指定したプレフィックスを持つオブジェクトのみが送信先バケットへレプリケーションされます。
            //request.setObjectPrefixList(prefixes);
            //List actions = new ArrayList();
            //actions.add(AddBucketReplicationRequest.ReplicationAction.PUT);
            // ソースバケットから送信先バケットへ、オブジェクトの作成および更新操作をレプリケーションします。
            //request.setReplicationActionList(actions);
            ossClient.addBucketReplication(request);
        } catch (OSSException oe) {
            System.out.println("OSSException がキャッチされました。これは、リクエストが 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 ce) {
            System.out.println("ClientException がキャッチされました。これは、クライアントが OSS との通信中にネットワークにアクセスできないなどの重大な内部問題に遭遇したことを意味します。");
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}        

Python

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import ReplicationRule
# アクセス認証情報を環境変数から取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# ソースバケットが配置されているリージョンのエンドポイントを指定します(例:中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します)。
# ソースバケットの名前(例:src-bucket)を指定します。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'src-bucket')
replica_config = ReplicationRule(
    # 送信先バケットを指定します。送信先バケットとソースバケットは、同一のアカウントに属している必要があります。
    target_bucket_name='dest-bucket',
    # 送信先バケットが配置されているリージョンを指定します。送信先バケットとソースバケットは、同一のリージョンに配置されている必要があります。
    target_bucket_location='oss-cn-hangzhou',
    # データレプリケーションを許可された RAM ロールの名前を指定します。このロールには、ソースバケットに対する SRR 実行および送信先バケットへの書き込み権限が必要です。
    sync_role_name='roleNameTest',
)

# レプリケーション対象のオブジェクトのプレフィックスを指定します。指定したプレフィックスを持つオブジェクトのみが送信先バケットへレプリケーションされます。
# prefix_list = ['prefix1', 'prefix2']
# データレプリケーションルールを設定します。
# replica_config = ReplicationRule(
     # prefix_list=prefix_list,
     # ソースバケットから送信先バケットへ、オブジェクトの作成および更新操作をレプリケーションします。
     # action_list=[ReplicationRule.PUT],
     # 送信先バケットを指定します。
     # target_bucket_name='dest-bucket',
     # 送信先バケットが配置されているリージョンを指定します。
     # target_bucket_location='yourTargetBucketLocation',
     # デフォルトでは既存データがレプリケーションされます。このパラメーターを False に設定すると、既存データのレプリケーションを無効化できます。
     # is_enable_historical_object_replication=False,    
     # SSE-KMS を使用して暗号化されたオブジェクトをレプリケーションします。
     # sse_kms_encrypted_objects_status=ReplicationRule.ENABLED
     # SSE-KMS で使用する CMK の ID を指定します。SSE-KMS で暗号化されたオブジェクトをレプリケーションする場合、このパラメーターを指定する必要があります。
     # replica_kms_keyid='9468da86-3509-4f8d-a61e-6eab1eac****',
  #)

# データレプリケーションを有効化します。
bucket.put_bucket_replication(replica_config)

Go

package main

import (
	"encoding/xml"
	"fmt"
	"github.com/aliyun/aliyun-oss-go-sdk/oss"
	"os"
)

func HandleError(err error) {
	fmt.Println("Error:", err)
	os.Exit(-1)
}

// データレプリケーションを有効化します。
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 インスタンスを作成します。
	// yourEndpoint をバケットのリージョンのエンドポイントに設定します(例:中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します)。
	client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// ソースバケットの名前を指定します。
	srcbucketName := "yourSrcBucket"
	// 送信先バケットの名前を指定します。
	destBucketName := "yourDestBucket"
	// レプリケーション対象のオブジェクトのプレフィックス(例:prefix_1、prefix_2)を指定します。これらのプレフィックスを持つオブジェクトのみがレプリケーションされます。
	// ソースバケット内のすべてのオブジェクトをレプリケーションする場合は、プレフィックスを設定しないでください。
	prefix1 := "prefix_1"
	prefix2 := "prefix_2"
	// SSE-KMS で使用する CMK の ID を指定します。ステータスが Enabled に設定されている場合、このパラメーターを指定する必要があります。
	keyId := "c4d49f85-ee30-426b-a5ed-95e9****"
	// SSE-KMS を使用して暗号化されたオブジェクトをレプリケーションするかどうかを指定します。
	source := "Enabled"
	prefixSet := oss.ReplicationRulePrefix{Prefix: []*string{&prefix1, &prefix2}}	
	reqReplication := oss.PutBucketReplication{
		Rule: []oss.ReplicationRule{
			{
				PrefixSet: &prefixSet,
				// ソースバケットから送信先バケットへ、オブジェクトの作成および更新操作をレプリケーションします。
				Action: "PUT",				
				Destination: &oss.ReplicationRuleDestination{
					Bucket: destBucketName,
					// 送信先バケットのリージョンを指定します。ソースおよび送信先のバケットは同一リージョンに配置する必要があります。
					Location: "oss-cn-hangzhou",					
				},
				// デフォルトでは既存データがレプリケーションされます。このパラメーターを "disabled" に設定すると、既存データのレプリケーションを無効化できます。
				HistoricalObjectReplication: "disabled",
				// データレプリケーションを許可された RAM ロールの名前を指定します。このロールには、ソースバケットに対する SRR 実行および送信先バケットへの書き込み権限が必要です。
				SyncRole:                "yourRole",
				EncryptionConfiguration: &keyId,
				SourceSelectionCriteria: &source,
			},
		},
	}

	xmlBody, err := xml.Marshal(reqReplication)
	if err != nil {
		HandleError(err)
	}
	err = client.PutBucketReplication(srcbucketName, string(xmlBody))

	if err != nil {
		HandleError(err)
	}

	fmt.Println("Put Bucket Replication Success!")
}

ossutil

ossutil を使用して SRR を有効化する方法については、「put-bucket-replication」をご参照ください。

REST API

高度なユースケースでは、REST API オペレーションを直接呼び出すことができます。ただし、この方法では、コード内でリクエスト署名を手動で計算する必要があります。「PutBucketReplication」をご参照ください。