全部产品
Search
文档中心

Object Storage Service:Replikasi lintas wilayah dalam akun yang sama

更新时间:Nov 09, 2025

Replikasi lintas wilayah (CRR) dalam akun yang sama secara otomatis dan asinkron menyalin objek dari bucket sumber di satu wilayah ke bucket tujuan di wilayah lain. Proses ini mencakup pembuatan, pembaruan, dan penghapusan objek. Topik ini menjelaskan cara mengonfigurasi CRR dalam akun yang sama.

Prasyarat

  • Bucket sumber (Bucket A) telah dibuat di suatu wilayah. Catat UID akun, nama Bucket A, dan wilayahnya.

  • Bucket tujuan (Bucket B) telah dibuat di wilayah berbeda di bawah akun yang sama. Catat nama Bucket B dan wilayahnya.

Jenis peran

Untuk mengonfigurasi CRR dalam akun yang sama, Anda harus menentukan peran untuk replikasi. Anda dapat memilih salah satu dari peran berikut untuk tugas tersebut.

Penting

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

(Direkomendasikan) Buat peran baru

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

  • Replikasi Objek yang Dienskripsi dengan KMS

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

  • Tidak Mereplikasi Objek yang Dienskripsi dengan KMS

    Setelah membuat peran, ikuti petunjuk di layar untuk memberikan izin. Setelah otorisasi, peran diberi kebijakan detail halus untuk replikasi dari bucket sumber ke bucket tujuan.

AliyunOSSRole

Saat membuat aturan CRR untuk akun yang sama, Anda dapat memilih AliyunOSSRole untuk menyelesaikan tugas replikasi. Jika Anda memilih peran ini, kebijakan akses yang diberikan bergantung pada apakah Anda memilih untuk mereplikasi objek yang dienkripsi dengan KMS.

  • Replikasi Objek yang Dienskripsi dengan KMS

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

    Peringatan

    Peran ini memiliki izin untuk melakukan semua operasi pada semua bucket dan kunci KMS di bawah akun saat ini. Ruang lingkup izin besar. Gunakan peran ini dengan hati-hati.

  • Tidak Mereplikasi Objek yang Dienskripsi dengan KMS

    Jika Anda memilih AliyunOSSRole, peran ini secara otomatis diberi kebijakan AliyunOSSFullAccess, yang memberikan izin penuh untuk mengelola OSS.

    Peringatan

    Peran ini memiliki izin untuk melakukan semua operasi pada semua bucket di bawah akun saat ini. Ruang lingkup izin besar. Gunakan peran ini dengan hati-hati.

Peran kustom

Saat membuat aturan CRR untuk akun yang sama, Anda dapat menggunakan peran kustom untuk tugas replikasi. Anda harus membuat peran kustom di konsol RAM dan memberikan izin yang diperlukan kepada peran tersebut.

  1. Buat Peran Layanan

    Saat membuat peran, atur jenis entitas tepercaya menjadi Alibaba Cloud Service dan nama entitas tepercaya menjadi Object Storage Service. 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. Kebijakan AliyunOSSFullAccess memberikan izin untuk melakukan semua operasi pada semua bucket di bawah akun saat ini secara default. Gunakan kebijakan ini dengan hati-hati.

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

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

    Berikan kebijakan kustom ke peran RAM

    Anda dapat menggunakan kebijakan RAM untuk memberikan peran RAM hak istimewa minimal 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 mereka.

    {
       "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 dengan KMS ke bucket tujuan, Anda juga harus memberikan kebijakan sistem AliyunKMSFullAccess ke peran.

Penting

Saat mereplikasi data lintas wilayah dalam akun yang sama, OSS hanya memeriksa kebijakan akses dari peran RAM yang digunakan untuk replikasi. OSS tidak memeriksa kebijakan bucket dari bucket sumber dan 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 > CRR.

  4. Di tab CRR, klik CRR.

  5. Di kotak dialog CRR, konfigurasikan parameter sesuai dengan tabel berikut.

    Area

    Parameter

    Deskripsi

    Configure Destination Bucket

    Source Bucket

    Wilayah dan nama bucket sumber.

    Destination Bucket

    Pilih Select A Bucket In This Account. Lalu, pilih wilayah dan nama bucket tujuan dari daftar drop-down.

    Configure Replication Policy

    Objects to Replicate

    Pilih data sumber untuk direplikasi.

    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.

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

    • Replicate Objects With A Specific 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.

    • Replicate Additions/Modifications: Mereplikasi penambahan dan pembaruan objek di bucket sumber ke bucket tujuan.

    • Replicate Additions/Deletions/Modifications: Mereplikasi penambahan, pembaruan, dan penghapusan objek di 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 dilakukan pada semua bagian juga direplikasi ke bucket tujuan.

    Untuk informasi lebih lanjut tentang perilaku replikasi saat CRR digunakan dengan pengendalian versi, lihat Replikasi dengan pengendalian versi.

    Replicate Historical Data

    Pilih apakah akan mereplikasi data historis yang ada di bucket sumber yang disimpan sebelum aturan CRR mulai 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 kehilangan data, aktifkan pengendalian versi untuk bucket sumber dan tujuan.

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

    Replicate Objects Encrypted Based on KMS

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

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

      Catatan

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

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

    CMK ID

    Tentukan kunci KMS untuk mengenkripsi objek tujuan.

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

    RAM Role

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

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

    Configure Replication Speed

    Acceleration Type

    Hanya Transfer Acceleration yang didukung. Akselerasi transfer meningkatkan kecepatan CRR antara daratan Tiongkok dan wilayah di luar daratan Tiongkok. Jika Anda mengaktifkan akselerasi transfer, Anda akan dikenakan biaya akselerasi transfer. Untuk informasi lebih lanjut tentang metode penagihan, lihat Biaya akselerasi transfer.

    Replication Time Control (RTC)

    Catatan

    Anda hanya dapat mengaktifkan RTC untuk tugas replikasi lintas wilayah antara wilayah berikut: China (Hangzhou), China (Shanghai), China (Qingdao), China (Beijing), China (Zhangjiakou), dan China (Shenzhen).

    RTC hanya tersedia untuk tugas replikasi lintas wilayah antara wilayah AS (Silicon Valley) dan AS (Virginia).

    Untuk tugas yang tidak melibatkan replikasi data historis, RTC mulai berlaku dalam 15 menit setelah diaktifkan. Untuk tugas yang melibatkan replikasi data historis, RTC mulai berlaku sekitar 1 jam setelah data historis direplikasi. Setelah RTC mulai berlaku, OSS mereplikasi 99,99% objek yang baru ditulis (non-historis) dalam 10 menit. Jika Anda mengaktifkan RTC, Anda akan dikenakan biaya RTC.

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

    • Setelah aturan CRR dibuat, Anda tidak dapat mengedit atau menghapusnya.

    • Tugas replikasi dimulai 3 hingga 5 menit setelah aturan CRR dikonfigurasi. Anda dapat melihat kemajuan replikasi di tab CRR 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 biasanya memakan waktu dari beberapa menit hingga beberapa jam.

Gunakan SDK Alibaba Cloud

Hanya SDK untuk Java, Python, dan Go yang mendukung CRR dalam akun yang sama.

Java

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.AddBucketReplicationRequest;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Endpoint wilayah China (Hangzhou) digunakan sebagai contoh. Ganti dengan endpoint aktual.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Tentukan ID wilayah yang sesuai dengan endpoint. Contoh: cn-hangzhou.
        String region = "cn-hangzhou";
        // Jangan menyimpan kredensial akses Anda di kode proyek. Jika tidak, kredensial akses Anda mungkin bocor, yang mengancam keamanan semua sumber daya di akun Anda. Contoh ini menunjukkan cara memperoleh kredensial akses dari variabel lingkungan. Sebelum menjalankan contoh, 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 dan bucket sumber harus milik akun yang sama.
        String targetBucketName = "dest-bucket";
        // Tentukan wilayah bucket tujuan. Bucket tujuan dan bucket sumber harus berada di wilayah yang berbeda.
        String targetBucketLocation = "oss-cn-shanghai";

        // Buat instance OSSClient.
        // Saat instance OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepaskan sumber daya.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        // Secara eksplisit nyatakan penggunaan algoritma tanda tangan 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);
            // Secara default, data historis direplikasi. Dalam contoh ini, parameter ini diatur ke false untuk menonaktifkan replikasi data historis.
            request.setEnableHistoricalObjectReplication(false);
            // Tentukan nama peran yang berwenang untuk mereplikasi data. Peran tersebut harus diberi izin untuk melakukan CRR pada bucket sumber dan menerima objek yang direplikasi di bucket tujuan.
            request.setSyncRole("yourRole");
            // Tentukan apakah akan mereplikasi objek yang dienkripsi menggunakan 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 penambahan dan pembaruan objek di bucket sumber ke bucket tujuan.
            //request.setReplicationActionList(actions);
            ossClient.addBucketReplication(request);
        } catch (OSSException oe) {
            System.out.println("Tangkap OSSException, yang berarti permintaan Anda sampai ke 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 menjalankan contoh, pastikan bahwa variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
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. Contoh: 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 dan bucket sumber harus milik akun yang sama.
    target_bucket_name='dest-bucket',
    # Tentukan wilayah bucket tujuan. Bucket tujuan dan bucket sumber harus berada di wilayah yang berbeda.
    target_bucket_location='oss-cn-shanghai',
    # Tentukan nama peran yang berwenang untuk mereplikasi data. Peran tersebut harus diberi izin untuk melakukan CRR 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']
# Konfigurasikan aturan replikasi.
# replica_config = ReplicationRule(
     # prefix_list=prefix_list,
     # Replikasi penambahan dan pembaruan objek di bucket sumber ke bucket tujuan.
     # action_list=[ReplicationRule.PUT],
     # Tentukan bucket tujuan ke mana Anda ingin mereplikasi data. Bucket tujuan dan bucket sumber harus milik akun yang sama.
     # target_bucket_name='dest-bucket',
     # Tentukan wilayah bucket tujuan. Bucket tujuan dan bucket sumber harus berada di wilayah yang berbeda.
     # target_bucket_location='yourTargetBucketLocation',
     # Secara default, data historis direplikasi. Dalam contoh ini, parameter ini diatur ke False untuk menonaktifkan replikasi data historis.
     # is_enable_historical_object_replication=False,
     # Tentukan tautan transfer data untuk replikasi data.
     # target_transfer_type='oss_acc',    
  #)

# Aktifkan replikasi data.
bucket.put_bucket_replication(replica_config)

Go

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"
)

// Definisikan variabel global.
var (
	region     string // Wilayah tempat bucket berada.
	bucketName string // Nama bucket.
)

// Tentukan fungsi init yang digunakan untuk menginisialisasi parameter baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	// Parsing parameter baris perintah.
	flag.Parse()

	var (
		targetBucket   = "nama bucket tujuan" // Nama bucket tujuan.
		targetLocation = "oss-cn-beijing"     // Wilayah tempat bucket tujuan berada.
	)

	// Periksa apakah nama bucket ditentukan.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	// Periksa apakah wilayah ditentukan.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}

	// Muat konfigurasi default dan tentukan penyedia kredensial dan wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Buat klien OSS.
	client := oss.NewClient(cfg)

	// Buat permintaan untuk mengaktifkan replikasi data untuk bucket.
	request := &oss.PutBucketReplicationRequest{
		Bucket: oss.Ptr(bucketName), // Nama bucket.
		ReplicationConfiguration: &oss.ReplicationConfiguration{
			Rules: []oss.ReplicationRule{
				{
					RTC: &oss.ReplicationTimeControl{
						Status: oss.Ptr("enabled"), // Aktifkan fitur RTC.
					},
					Destination: &oss.ReplicationDestination{
						Bucket:       oss.Ptr(targetBucket),   // Nama bucket tujuan.
						Location:     oss.Ptr(targetLocation), // Wilayah tempat bucket tujuan berada.
						TransferType: oss.TransferTypeOssAcc,  // Jenis transfer.
					},
					HistoricalObjectReplication: oss.HistoricalObjectReplicationEnabled, // Aktifkan fitur replikasi data historis.
				},
			},
		},
	}

	// Aktifkan replikasi data.
	result, err := client.PutBucketReplication(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal memasukkan replikasi bucket %v", err)
	}

	// Tampilkan hasilnya.
	log.Printf("hasil replikasi bucket:%#v\n", result)
}

Gunakan ossutil

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

Gunakan REST API

Jika program Anda memiliki persyaratan kustomisasi 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.

Referensi