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

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

最終更新日:Nov 09, 2025

同一リージョンレプリケーション (SRR) は、オブジェクト操作をソースバケットから宛先バケットに自動的かつ非同期にレプリケートします。ソースバケットと宛先バケットは、同じ Alibaba Cloud アカウントに属し、同じリージョンにある必要があります。レプリケートされる操作には、オブジェクトの作成、更新、削除が含まれます。このトピックでは、同一アカウント内で SRR を設定する方法について説明します。

前提条件

  • Alibaba Cloud アカウントのリージョンにソースバケット (バケット A) を作成していること。アカウント UID、バケット A の名前、およびそのリージョンを記録しておきます。

  • 同じアカウントおよびリージョンに宛先バケット (バケット B) を作成していること。バケット B の名前を記録しておきます。

ロールタイプ

同一アカウント内で SRR を実行するには、ソースバケットと宛先バケット間のレプリケーション用のロールを指定する必要があります。タスクを完了するために、次のいずれかのロールを選択できます。

重要

RAM ユーザーを使用してロールを作成できます。RAM ユーザーには、ram:CreateRoleram:GetRoleram:ListPoliciesForRole、および ram:AttachPolicyToRole の権限が必要です。ただし、ram:CreateRoleram:GetRole などのロール関連の権限を RAM ユーザーに付与すると、セキュリティリスクが生じます。Alibaba Cloud アカウントを使用してRAM ロールを作成し、そのロールに権限を付与することを推奨します。RAM ユーザーは、Alibaba Cloud アカウントによって作成された RAM ロールを偽装できます。

(推奨) 新しいロールの作成

同一アカウントの SRR ルールを作成する際に、レプリケーションタスク用に新しいロールを作成できます。このオプションを選択すると、oss-replication-{uuid} という名前のロールが自動的に作成されます。Key Management Service (KMS) で暗号化されたオブジェクトをレプリケートするかどうかに基づいて、異なるアクセスポリシーが付与されます。

  • KMS で暗号化されたオブジェクトをレプリケートする場合

    ロールを作成した後、画面の指示に従って権限を付与します。権限を付与すると、ロールにはソースバケットから宛先バケットへのレプリケーションのための正確なアクセスポリシーと、KMS の管理権限を付与する AliyunKMSFullAccess ポリシーが割り当てられます。

  • KMS で暗号化されたオブジェクトをレプリケートしない場合

    ロールを作成した後、画面の指示に従って権限を付します。権限を付与すると、ロールにはソースバケットから宛先バケットへのレプリケーションのための正確なアクセスポリシーが割り当てられます。

AliyunOSSRole

同一アカウントの SRR ルールを作成する際に、レプリケーションタスクに AliyunOSSRole サービスロールを選択できます。このロールを選択すると、KMS で暗号化されたオブジェクトをレプリケートするかどうかに基づいて、異なるアクセスポリシーが付与されます。

  • KMS で暗号化されたオブジェクトをレプリケートする場合

    AliyunOSSRole ロールを選択すると、Object Storage Service (OSS) の管理権限を付与する AliyunOSSFullAccess ポリシーと、KMS の管理権限を付与する AliyunKMSFullAccess ポリシーが自動的にロールに付与されます。

    警告

    このロールには、現在のアカウントに属するすべてのバケットと KMS キーに対するすべての操作を実行する権限があります。権限の範囲が広いため、このロールは注意して使用してください。

  • KMS で暗号化されたオブジェクトをレプリケートしない場合

    AliyunOSSRole ロールを選択すると、OSS の管理権限を付与する AliyunOSSFullAccess ポリシーが自動的にロールに付与されます。

    警告

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

カスタムロール

同一アカウントの SRR ルールを作成する際に、レプリケーションタスクにカスタムロールを使用できます。カスタムロールを使用するには、RAM コンソールでロールを作成し、必要な権限を付与します。

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

    ロール作成プロセス中に、信頼できるエンティティタイプとして [Alibaba Cloud Service] を、信頼できるエンティティ名として [Object Storage Service] を選択します。詳細については、「サービスロールの作成」をご参照ください。

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

    次のいずれかの方法でロールに権限を付与できます。

    RAM ロールへのシステムポリシーの付与

    警告

    AliyunOSSFullAccess システムポリシーを RAM ロールに付与できます。デフォルトでは、AliyunOSSFullAccess は現在のアカウントに属するすべてのバケットに対するすべての操作を実行する権限を付与します。このポリシーは注意して使用してください。

    KMS で暗号化されたオブジェクトを宛先バケットにレプリケートする場合は、AliyunKMSFullAccess システムポリシーもロールに付与する必要があります。

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

    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 システムポリシーもロールに付与する必要があります。

重要

同一アカウントおよび同一リージョン内でデータをレプリケートする場合、OSS はレプリケーションに使用される RAM ロールのアクセスポリシーのみをチェックします。OSS はソースバケットまたは宛先バケットのバケットポリシーをチェックしません。

手順

OSS コンソールの使用

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

  2. バケット をクリックし、ソースバケットの名前をクリックします。

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

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

  5. 同一リージョン内のレプリケーション ダイアログボックスで、次の表の説明に従ってパラメーターを設定します。

    セクション

    パラメーター

    説明

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

    ソースバケット

    ソースバケットのリージョンと名前。

    ターゲットバケット

    [このアカウントのバケットを選択] を選択し、ドロップダウンリストから宛先バケットを選択します。宛先バケットは同じリージョンにある必要があります。

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

    複製するオブジェクト

    レプリケートするソースデータを選択します。

    • すべてのファイルの同期: バケット内のすべてのオブジェクトを宛先バケットにレプリケートします。

    • [指定されたプレフィックスを持つオブジェクトをレプリケート]: 指定されたプレフィックスを持つオブジェクトを宛先バケットにレプリケートします。デフォルトでは最大 10 個のプレフィックスを追加できます。さらにプレフィックスを追加するには、テクニカルサポートにお問い合わせください。最大 30 個のプレフィックスを追加できます。

    レプリケーションポリシー

    レプリケーションメソッドを選択します。

    説明

    レプリケーションルールが作成された後、ライフサイクルルールまたは CopyObject 操作によって引き起こされるソースバケット内のオブジェクトのストレージタイプの変更は、宛先バケットにレプリケートされません。オブジェクトの最終アクセス時間 (x-oss-last-access-time) プロパティもレプリケートされません。

    • [追加/変更の同期]: ソースバケットから宛先バケットへのオブジェクトの作成および更新操作をレプリケートします。

    • [追加/削除/変更の同期]: ソースバケットから宛先バケットへのオブジェクトの作成、更新、および削除操作をレプリケートします。

    オブジェクトがマルチパートアップロードを使用してソースバケットにアップロードされた場合、各パートのアップロード操作は宛先バケットにレプリケートされます。すべてのパートに対して CompleteMultipartUpload 操作が呼び出された後に生成されたオブジェクトも、宛先バケットにレプリケートされます。

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

    既存データの複製

    SRR ルールが有効になる前に保存されていたソースバケット内の既存データをレプリケートするかどうかを選択します。

    • [レプリケート]: 既存データを宛先バケットにレプリケートします。

      重要

      既存データがレプリケートされる際、ソースバケットのオブジェクトが宛先バケットの同名のオブジェクトを上書きする可能性があります。データ損失を防ぐために、ソースバケットと宛先バケットの両方でバージョン管理を有効にしてください。

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

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

    KMS で暗号化されたオブジェクトを宛先バケットにレプリケートするかどうかを選択します。

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

      説明

      HeadObject および GetBucketEncryption 操作を呼び出して、それぞれソースオブジェクトと宛先バケットの暗号化ステータスをクエリできます。

    • [レプリケートしない]: KMS で暗号化されたオブジェクトを宛先バケットにレプリケートしません。

    CMK ID

    KMS で暗号化されたオブジェクトを宛先バケットにレプリケートすることを選択した場合、宛先オブジェクトを暗号化するための KMS キーを指定する必要があります。

    KMS キーを指定する前に、KMS プラットフォーム上の宛先バケットと同じリージョンに KMS キーを作成する必要があります。詳細については、「キーの作成」をご参照ください。

    RAM ロール

    ドロップダウンリストから 新しい RAM ロール を選択することをお勧めします。このオプションを選択した後、画面の指示に従ってロールに権限を付与します。

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

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

    • SRR ルールが作成された後は、変更または削除できません。

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

    • バケット間の SRR は非同期 (ほぼリアルタイム) であるため、宛先バケットにデータをレプリケートするために必要な時間はデータのサイズによって異なります。このプロセスには数分から数時間かかることがあります。

Alibaba Cloud SDK の使用

同一アカウント内の SRR は、Java、Python、および Go の SDK でのみサポートされています。

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 {
        // エンドポイントを中国 (杭州) リージョンに設定します。他のリージョンについては、エンドポイントを適宜変更してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // エンドポイントが配置されているリージョン (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);
            // OSS がデータレプリケーションに使用することを承認する RAM ロールの名前を指定します。ロールには、ソースバケットで SRR を実行し、宛先バケットでレプリケートされたオブジェクトを受信する権限が付与されている必要があります。
            request.setSyncRole("yourRole");
            // SSE-KMS 暗号化で作成されたオブジェクトを OSS がレプリケートするかどうかを指定します。
            //request.setSseKmsEncryptedObjectsStatus("Enabled");
            // SSE-KMS キー ID を指定します。Status を 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("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();
            }
        }
    }
}        

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',
    # OSS がデータレプリケーションに使用することを承認する 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 キー 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 キー ID を指定します。Status を Enabled に設定した場合、この要素は必須です。
	keyId := "c4d49f85-ee30-426b-a5ed-95e9****"
	// SSE-KMS 暗号化で作成されたオブジェクトを OSS がレプリケートするかどうかを指定します。
	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",
				// OSS がデータレプリケーションに使用することを承認する 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」をご参照ください。