全部产品
Search
文档中心

Object Storage Service:Replikasi dalam akun dan wilayah yang sama

更新时间:Nov 09, 2025

Replikasi di Wilayah yang Sama (SRR) secara otomatis dan asinkron mereplikasi operasi objek dari bucket sumber ke bucket tujuan. Bucket sumber dan tujuan harus milik Akun Alibaba Cloud yang sama dan berada di wilayah yang sama. Operasi yang direplikasi mencakup pembuatan objek, pembaruan, dan penghapusan. Topik ini menjelaskan cara mengonfigurasi SRR dalam akun yang sama.

Prasyarat

  • Anda telah membuat bucket sumber (Bucket A) di wilayah Akun Alibaba Cloud Anda. Catat UID akun, nama Bucket A, dan wilayahnya.

  • Anda telah membuat bucket tujuan (Bucket B) di akun dan wilayah yang sama. Catat nama Bucket B.

Jenis peran

Untuk melakukan SRR dalam akun yang sama, Anda harus menentukan peran untuk replikasi antara bucket sumber dan tujuan. Anda dapat memilih salah satu dari peran berikut untuk menyelesaikan tugas.

Penting

Anda dapat membuat peran menggunakan Pengguna RAM. Pengguna RAM harus memiliki izin berikut: ram:CreateRole, ram:GetRole, ram:ListPoliciesForRole, dan ram:AttachPolicyToRole. Namun, memberikan izin terkait peran kepada Pengguna RAM, seperti ram:CreateRole dan ram:GetRole, menimbulkan risiko keamanan. Kami sarankan Anda menggunakan Akun Alibaba Cloud untuk membuat Peran RAM dan memberikan izin kepada peran tersebut. Pengguna RAM kemudian dapat mengasumsikan Peran RAM yang dibuat oleh Akun Alibaba Cloud.

(Direkomendasikan) Buat peran baru

Saat membuat aturan SRR untuk akun yang sama, Anda dapat membuat peran baru untuk tugas replikasi. Jika Anda memilih opsi ini, peran bernama oss-replication-{uuid} akan dibuat secara otomatis. Kebijakan akses yang berbeda diberikan berdasarkan apakah Anda memilih untuk mereplikasi objek yang dienkripsi oleh Key Management Service (KMS).

  • Jika Anda memilih untuk mereplikasi objek yang dienkripsi oleh KMS:

    Setelah membuat peran, ikuti petunjuk di layar untuk memberikan izin. Setelah memberikan izin, peran tersebut diberi kebijakan akses tepat untuk replikasi dari bucket sumber ke bucket tujuan dan kebijakan AliyunKMSFullAccess, yang memberikan izin untuk mengelola KMS.

  • Jika Anda tidak memilih untuk mereplikasi objek yang dienkripsi oleh KMS:

    Setelah membuat peran, ikuti petunjuk di layar untuk memberikan izin. Setelah memberikan izin, peran tersebut diberi kebijakan akses tepat untuk replikasi dari bucket sumber ke bucket tujuan.

AliyunOSSRole

Saat membuat aturan SRR untuk akun yang sama, Anda dapat memilih peran layanan AliyunOSSRole untuk tugas replikasi. Setelah memilih peran ini, kebijakan akses yang berbeda diberikan berdasarkan apakah Anda memilih untuk mereplikasi objek yang dienkripsi oleh KMS.

  • Jika Anda memilih untuk mereplikasi objek yang dienkripsi oleh KMS:

    Jika Anda memilih peran AliyunOSSRole, kebijakan AliyunOSSFullAccess, yang memberikan izin untuk mengelola Object Storage Service (OSS), dan kebijakan AliyunKMSFullAccess, yang memberikan izin untuk mengelola KMS, secara otomatis diberikan kepada peran tersebut.

    Peringatan

    Peran ini memiliki izin untuk melakukan semua operasi pada semua bucket dan kunci KMS yang dimiliki oleh akun saat ini. Cakupan izin sangat luas. Gunakan peran ini dengan hati-hati.

  • Jika Anda tidak memilih untuk mereplikasi objek yang dienkripsi oleh KMS:

    Jika Anda memilih peran AliyunOSSRole, kebijakan AliyunOSSFullAccess, yang memberikan izin untuk mengelola OSS, secara otomatis diberikan kepada peran tersebut.

    Peringatan

    Peran ini memiliki izin untuk melakukan semua operasi pada semua bucket yang dimiliki oleh akun saat ini. Cakupan izin sangat luas. Gunakan peran ini dengan hati-hati.

Peran kustom

Saat membuat aturan SRR untuk akun yang sama, Anda dapat menggunakan peran kustom untuk tugas replikasi. Untuk menggunakan peran kustom, buat peran tersebut di Konsol RAM dan berikan izin yang diperlukan.

  1. Buat peran layanan.

    Selama proses pembuatan peran, pilih Alibaba Cloud Service sebagai jenis entitas tepercaya dan Object Storage Service sebagai nama entitas tepercaya. Untuk informasi lebih lanjut, lihat Buat Peran Layanan.

  2. Berikan izin kepada peran.

    Anda dapat memberikan izin kepada peran dengan salah satu cara berikut.

    Berikan kebijakan sistem ke peran RAM

    Peringatan

    Anda dapat memberikan kebijakan sistem AliyunOSSFullAccess ke peran RAM. Secara default, AliyunOSSFullAccess memberikan izin untuk melakukan semua operasi pada semua bucket yang dimiliki oleh akun saat ini. Gunakan kebijakan ini dengan hati-hati.

    Jika Anda ingin mereplikasi objek yang dienkripsi oleh KMS ke bucket tujuan, Anda juga harus memberikan kebijakan sistem AliyunKMSFullAccess kepada peran tersebut.

    Untuk informasi lebih lanjut, lihat Berikan Izin ke Peran RAM.

    Berikan kebijakan kustom ke peran RAM

    Berikan peran RAM izin minimum yang diperlukan untuk replikasi dari bucket sumber (src-bucket) ke bucket tujuan (dest-bucket).

    Catatan

    Saat menggunakan kebijakan ini, ganti nama bucket sumber dan tujuan dengan nama sebenarnya.

    {
       "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/*"
             ]
          }
       ]
    }

    Untuk informasi lebih lanjut, lihat Berikan Izin ke Peran RAM.

    Catatan

    Jika Anda ingin mereplikasi objek yang dienkripsi oleh KMS ke bucket tujuan, Anda juga harus memberikan kebijakan sistem AliyunKMSFullAccess kepada peran tersebut.

Penting

Saat mereplikasi data dalam akun dan wilayah yang sama, OSS hanya memeriksa kebijakan akses peran RAM yang digunakan untuk replikasi. OSS tidak memeriksa kebijakan bucket dari bucket sumber atau tujuan.

Prosedur

Gunakan Konsol OSS

  1. Masuk ke Konsol OSS.

  2. Klik Buckets, lalu klik nama bucket sumber.

  3. Di panel navigasi di sebelah kiri, pilih Data Management > SRR.

  4. Di tab SRR, klik SRR.

  5. Di kotak dialog SRR, konfigurasikan parameter sesuai dengan deskripsi di tabel berikut.

    Bagian

    Parameter

    Deskripsi

    Configure Destination Bucket

    Bucket

    Wilayah dan nama bucket sumber.

    Destination Bucket

    Pilih Select A Bucket In This Account dan pilih bucket tujuan dari daftar drop-down. Bucket tujuan harus berada di wilayah yang sama.

    Configure Replication Policy

    Objects to Replicate

    Pilih data sumber untuk direplikasi.

    • Synchronize all files: Mereplikasi semua objek di bucket ke bucket tujuan.

    • Replicate Objects With A Specified Prefix: Mereplikasi objek dengan awalan tertentu ke bucket tujuan. Anda dapat menambahkan hingga 10 awalan secara default. Untuk menambahkan lebih banyak awalan, hubungi Dukungan Teknis. Anda dapat menambahkan hingga 30 awalan.

    Replication Policy

    Pilih metode replikasi.

    Catatan

    Setelah aturan replikasi dibuat, perubahan pada kelas penyimpanan objek di bucket sumber yang disebabkan oleh aturan siklus hidup atau operasi CopyObject tidak direplikasi ke bucket tujuan. Properti waktu akses terakhir (x-oss-last-access-time) objek juga tidak direplikasi.

    • Sync Additions/Modifications: Mereplikasi operasi pembuatan dan pembaruan objek dari bucket sumber ke bucket tujuan.

    • Sync Additions/Deletions/Modifications: Mereplikasi operasi pembuatan, pembaruan, dan penghapusan objek dari bucket sumber ke bucket tujuan.

    Jika objek diunggah ke bucket sumber menggunakan unggah multi-bagian, operasi unggah untuk setiap bagian direplikasi ke bucket tujuan. Objek yang dihasilkan setelah operasi CompleteMultipartUpload dipanggil untuk semua bagian juga direplikasi ke bucket tujuan.

    Untuk informasi lebih lanjut tentang perilaku replikasi saat SRR digunakan dengan pengendalian versi, lihat SRR dan pengendalian versi.

    Replicate Historical Data

    Pilih apakah akan mereplikasi data yang ada di bucket sumber yang disimpan sebelum aturan SRR berlaku.

    • Replicate: Mereplikasi data historis ke bucket tujuan.

      Penting

      Saat data historis direplikasi, objek dari bucket sumber dapat menimpa objek dengan nama yang sama di bucket tujuan. Untuk mencegah hilangnya data, aktifkan pengendalian versi untuk bucket sumber dan tujuan.

    • Do Not Replicate: Hanya mereplikasi objek yang diunggah atau diperbarui setelah aturan SRR berlaku.

    Replicate Objects Encrypted Based on KMS

    Pilih apakah akan mereplikasi objek yang dienkripsi oleh KMS ke bucket tujuan.

    • Replicate: Mereplikasi objek ke bucket tujuan saat objek sumber atau bucket tujuan dienkripsi menggunakan enkripsi sisi server dengan kunci yang dikelola oleh KMS (SSE-KMS) dan ID CMK ditentukan.

      Catatan

      Anda dapat memanggil operasi HeadObject dan GetBucketEncryption untuk menanyakan status enkripsi objek sumber dan bucket tujuan, masing-masing.

    • Do Not Replicate: Tidak mereplikasi objek yang dienkripsi oleh KMS ke bucket tujuan.

    CMK ID

    Jika Anda memilih untuk mereplikasi objek yang dienkripsi oleh KMS ke bucket tujuan, Anda harus menentukan kunci KMS untuk mengenkripsi objek tujuan.

    Sebelum Anda menentukan kunci KMS, Anda harus membuat kunci KMS di wilayah yang sama dengan bucket tujuan di platform KMS. Untuk informasi lebih lanjut, lihat Buat kunci.

    RAM Role

    Kami sarankan Anda memilih New RAM Role. Setelah Anda memilih opsi ini dari daftar drop-down, ikuti petunjuk di layar untuk memberikan izin kepada peran tersebut.

    Anda juga dapat memilih AliyunOSSRole atau peran kustom. Untuk informasi lebih lanjut tentang ketiga jenis peran ini, lihat Jenis peran.

  6. Klik OK. Di kotak dialog yang muncul, klik Enable.

    • Setelah aturan SRR dibuat, Anda tidak dapat memodifikasi atau menghapusnya.

    • Tugas replikasi dimulai 3 hingga 5 menit setelah aturan SRR dikonfigurasi. Anda dapat melihat kemajuan replikasi di tab SRR bucket sumber.

    • Karena replikasi antar bucket bersifat asinkron (hampir real-time), waktu yang diperlukan untuk mereplikasi data ke bucket tujuan bergantung pada ukuran data. Proses ini bisa memakan waktu dari beberapa menit hingga beberapa jam.

Gunakan SDK Alibaba Cloud

SRR dalam akun yang sama hanya didukung oleh SDK untuk Java, Python, dan 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 {
        // Atur endpoint ke yang sesuai untuk wilayah China (Hangzhou). Untuk wilayah lain, ubah endpoint sesuai.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Tentukan wilayah tempat endpoint berada, misalnya cn-hangzhou.
        String region = "cn-hangzhou";
        // Kami sangat menyarankan agar Anda tidak menyimpan kredensial akses Anda di kode proyek. Jika tidak, kredensial akses Anda mungkin bocor, yang menimbulkan ancaman terhadap keamanan semua sumber daya di akun Anda. Contoh ini menggunakan variabel lingkungan untuk mendapatkan kredensial akses. Sebelum menjalankan contoh ini, konfigurasikan variabel lingkungan.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Tentukan nama bucket sumber.
        String bucketName = "src-bucket";
        // Tentukan bucket tujuan ke mana Anda ingin mereplikasi data. Bucket tujuan harus milik akun yang sama dengan bucket sumber.
        String targetBucketName = "dest-bucket";
        // Tentukan wilayah bucket tujuan. Bucket tujuan harus berada di wilayah yang sama dengan bucket sumber.
        String targetBucketLocation = "oss-cn-hangzhou";

        // Buat instance OSSClient.
        // Saat instance OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepaskan sumber daya.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        // Secara eksplisit nyatakan bahwa algoritma tanda tangan V4 digunakan.
        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);
            // Secara default, data historis direplikasi. Atur parameter ini ke false untuk menonaktifkan replikasi data historis.
            request.setEnableHistoricalObjectReplication(false);
            // Tentukan nama peran RAM yang Anda otorisasi OSS untuk digunakan untuk replikasi data. Peran tersebut harus diberi izin untuk melakukan SRR pada bucket sumber dan menerima objek yang direplikasi di bucket tujuan.
            request.setSyncRole("yourRole");
            // Tentukan apakah OSS mereplikasi objek yang dibuat dengan enkripsi SSE-KMS.
            //request.setSseKmsEncryptedObjectsStatus("Enabled");
            // Tentukan ID kunci SSE-KMS. Elemen ini diperlukan jika Anda mengatur Status ke Enabled.
            //request.setReplicaKmsKeyID("3542abdd-5821-4fb5-a425-90adca***");
            //List prefixes = new ArrayList();
            //prefixes.add("image/");
            //prefixes.add("video");
            //prefixes.add("a");
            //prefixes.add("A");
            // Tentukan awalan objek yang akan direplikasi. Setelah Anda menentukan awalan, hanya objek yang cocok dengan awalan yang akan direplikasi ke bucket tujuan.
            //request.setObjectPrefixList(prefixes);
            //List actions = new ArrayList();
            //actions.add(AddBucketReplicationRequest.ReplicationAction.PUT);
            // Replikasi operasi pembuatan dan pembaruan objek dari bucket sumber ke bucket tujuan.
            //request.setReplicationActionList(actions);
            ossClient.addBucketReplication(request);
        } catch (OSSException oe) {
            System.out.println("Tangkap OSSException, yang berarti permintaan Anda sampai di OSS, "
                    + "tetapi ditolak dengan respons kesalahan karena suatu alasan.");
            System.out.println("Pesan Kesalahan:" + oe.getErrorMessage());
            System.out.println("Kode Kesalahan:" + oe.getErrorCode());
            System.out.println("ID Permintaan:" + oe.getRequestId());
            System.out.println("ID Host:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Tangkap ClientException, yang berarti klien mengalami "
                    + "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
                    + "seperti tidak dapat mengakses jaringan.");
            System.out.println("Pesan Kesalahan:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}        

Python

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import ReplicationRule
# Dapatkan kredensial akses dari variabel lingkungan. Sebelum Anda menjalankan contoh ini, pastikan bahwa variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# Tentukan endpoint wilayah tempat bucket sumber berada. Misalnya, jika bucket sumber berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
# Tentukan nama bucket sumber, misalnya src-bucket.
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'src-bucket')
replica_config = ReplicationRule(
    # Tentukan bucket tujuan ke mana Anda ingin mereplikasi data. Bucket tujuan harus milik akun yang sama dengan bucket sumber.
    target_bucket_name='dest-bucket',
    # Tentukan wilayah bucket tujuan. Bucket tujuan harus berada di wilayah yang sama dengan bucket sumber.
    target_bucket_location='oss-cn-hangzhou',
    # Tentukan nama peran RAM yang Anda otorisasi OSS untuk digunakan untuk replikasi data. Peran tersebut harus diberi izin untuk melakukan SRR pada bucket sumber dan menerima objek yang direplikasi di bucket tujuan.
    sync_role_name='roleNameTest',
)

# Tentukan awalan objek yang akan direplikasi. Setelah Anda menentukan awalan, hanya objek yang cocok dengan awalan yang akan direplikasi ke bucket tujuan.
# prefix_list = ['prefix1', 'prefix2']
# Atur aturan replikasi data.
# replica_config = ReplicationRule(
     # prefix_list=prefix_list,
     # Replikasi operasi pembuatan dan pembaruan objek dari bucket sumber ke bucket tujuan.
     # action_list=[ReplicationRule.PUT],
     # Tentukan bucket tujuan ke mana Anda ingin mereplikasi data.
     # target_bucket_name='dest-bucket',
     # Tentukan wilayah bucket tujuan.
     # target_bucket_location='yourTargetBucketLocation',
     # Secara default, data historis direplikasi. Atur parameter ini ke False untuk menonaktifkan replikasi data historis.
     # is_enable_historical_object_replication=False,    
     # Replikasi objek yang dibuat dengan enkripsi SSE-KMS.
     # sse_kms_encrypted_objects_status=ReplicationRule.ENABLED
     # Tentukan ID kunci SSE-KMS. Elemen ini diperlukan jika Anda memilih untuk mereplikasi objek yang dibuat dengan enkripsi SSE-KMS.
     # replica_kms_keyid='9468da86-3509-4f8d-a61e-6eab1eac****',
  #)

# Aktifkan replikasi data.
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)
}

// Aktifkan replikasi data.
func main() {
	// Dapatkan kredensial akses dari variabel lingkungan. Sebelum Anda menjalankan contoh ini, pastikan bahwa variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// Buat instance OSSClient.
	// Atur yourEndpoint ke endpoint bucket. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, ubah endpoint sesuai.
	client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// Tentukan nama bucket sumber.
	srcbucketName := "yourSrcBucket"
	// Tentukan bucket tujuan ke mana Anda ingin mereplikasi data.
	destBucketName := "yourDestBucket"
	// Tentukan awalan objek yang akan direplikasi, seperti prefix_1 dan prefix_2. Setelah Anda menentukan awalan, hanya objek yang cocok dengan awalan yang akan direplikasi ke bucket tujuan.
	// Jika Anda ingin mereplikasi semua objek dari bucket sumber ke bucket tujuan, Anda tidak perlu menetapkan awalan.
	prefix1 := "prefix_1"
	prefix2 := "prefix_2"
	// Tentukan ID kunci SSE-KMS. Elemen ini diperlukan jika Anda mengatur Status ke Enabled.
	keyId := "c4d49f85-ee30-426b-a5ed-95e9****"
	// Tentukan apakah OSS mereplikasi objek yang dibuat dengan enkripsi SSE-KMS.
	source := "Enabled"
	prefixSet := oss.ReplicationRulePrefix{Prefix: []*string{&prefix1, &prefix2}}	
	reqReplication := oss.PutBucketReplication{
		Rule: []oss.ReplicationRule{
			{
				PrefixSet: &prefixSet,
				//Replikasi operasi pembuatan dan pembaruan objek dari bucket sumber ke bucket tujuan.
				Action: "PUT",				
				Destination: &oss.ReplicationRuleDestination{
					Bucket: destBucketName,
					// Tentukan wilayah bucket tujuan. Bucket sumber dan tujuan harus berada di wilayah yang sama.
					Location: "oss-cn-hangzhou",					
				},
				// Secara default, data historis direplikasi. Atur parameter ini ke disabled untuk menonaktifkan replikasi data historis.
				HistoricalObjectReplication: "disabled",
				// Tentukan nama peran RAM yang Anda otorisasi OSS untuk digunakan untuk replikasi data. Peran tersebut harus diberi izin untuk melakukan SRR pada bucket sumber dan menerima objek yang direplikasi di bucket tujuan.
				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!")
}

Gunakan antarmuka baris perintah ossutil

Untuk informasi lebih lanjut tentang cara mengaktifkan SRR menggunakan ossutil, lihat put-bucket-replication.

Gunakan REST API

Jika aplikasi Anda memiliki persyaratan penyesuaian tinggi, Anda dapat langsung mengirim permintaan REST API. Untuk melakukannya, Anda harus secara manual menulis kode untuk menghitung tanda tangan. Untuk informasi lebih lanjut, lihat PutBucketReplication.