Todos os produtos
Search
Central de documentação

Object Storage Service:Same-account same-region replication

Última atualização: Jul 15, 2026

A replicação na mesma conta e região copia automaticamente e de forma assíncrona (quase em tempo real) operações como criação, atualização e exclusão de objetos de um bucket de origem em uma região da conta para um bucket de destino na mesma região e conta. Este tópico descreve como configurar a replicação na mesma conta e região.

Pré-requisitos

  • Crie um bucket (Bucket A, o bucket de origem) em uma região de uma conta e registre o UID da conta, o nome do Bucket A e a região.

  • Crie um bucket (Bucket B, o bucket de destino) na mesma conta e região e registre o nome do Bucket B.

Tipos de função

Ao configurar a replicação na mesma conta e região, especifique uma função para executar as operações de replicação entre o bucket de origem e o bucket de destino. Selecione qualquer uma das funções a seguir para concluir a tarefa.

Importante

Você pode criar a função usando um usuário RAM. O usuário RAM deve ter as seguintes permissões: ram:CreateRole, ram:GetRole, ram:ListPoliciesForRole e ram:AttachPolicyToRole. Como conceder permissões relacionadas a funções a um usuário RAM, como ram:CreateRole e ram:GetRole, apresenta riscos elevados, recomendamos que você crie uma função RAM e conclua a autorização da função usando a conta Alibaba Cloud associada ao usuário RAM. Após a autorização, o usuário RAM pode reutilizar diretamente a função RAM criada pela conta Alibaba Cloud.

(Recomendado) Criar uma função

Ao criar uma regra de replicação na mesma conta e região, opte por criar uma função para concluir a tarefa. Após essa seleção, o sistema cria automaticamente uma função no formato oss-replication-{uuid} e concede diferentes políticas de permissão dependendo da replicação de objetos criptografados com KMS.

  • Replicar objetos criptografados com KMS

    Após criar a função, conclua a autorização seguindo as instruções na tela. Depois disso, a função terá a política de permissão exata para sincronizar dados do bucket de origem para o bucket de destino, além da política AliyunKMSCryptoUserAccess (permissões para gerenciar o Key Management Service (KMS)).

  • Não replicar objetos criptografados com KMS

    Após criar a função, conclua a autorização seguindo as instruções na tela. Em seguida, a função terá a política de permissão exata para sincronizar dados do bucket de origem para o bucket de destino.

AliyunOSSRole

Ao criar uma regra de replicação na mesma conta e região, selecione a função AliyunOSSRole para concluir a tarefa. Nessa opção, o sistema concede diferentes políticas de permissão dependendo da replicação de objetos criptografados com KMS.

  • Replicar objetos criptografados com KMS

    Ao selecionar a função AliyunOSSRole, o sistema concede automaticamente as seguintes políticas de permissão a ela: AliyunOSSFullAccess (permissões para gerenciar o OSS) e AliyunKMSCryptoUserAccess (permissões para gerenciar o KMS).

    Aviso

    Esta função tem permissões para executar todas as operações em todos os buckets e no KMS da conta atual. O escopo de permissão é amplo. Tenha cautela.

  • Não replicar objetos criptografados com KMS

    Ao selecionar a função AliyunOSSRole, o sistema concede automaticamente a política AliyunOSSFullAccess (permissões para gerenciar o OSS) a ela.

    Aviso

    Esta função tem permissões para executar todas as operações em todos os buckets da conta atual. O escopo de permissão é amplo. Tenha cautela.

Função personalizada

Ao criar uma regra de replicação na mesma conta e região, utilize uma função personalizada para concluir a tarefa. Crie uma função personalizada no console RAM e conceda as permissões necessárias a ela.

  1. Crie uma função de service normal.

    Ao criar a função, defina o tipo de entidade confiável como Alibaba Cloud Service e o service confiável como Object Storage Service. Para obter as etapas específicas, consulte Criar uma função de service normal.

  2. Conceda permissões à função.

    Conceda permissões à função de uma das seguintes maneiras.

    Conceder uma política de sistema à função RAM

    Aviso

    Conceda a política de sistema AliyunOSSFullAccess à função RAM. Por padrão, AliyunOSSFullAccess tem permissões para executar todas as operações em todos os buckets da conta atual. Tenha cautela.

    Para replicar objetos criptografados com KMS para o bucket de destino, conceda também a política de sistema AliyunKMSFullAccess à função.

    Para obter as etapas específicas, consulte Gerencie as permissões de uma função RAM.

    Conceder uma política personalizada à função RAM

    Recomendamos conceder à função RAM as permissões mínimas necessárias para a replicação entre o bucket de origem (src-bucket) e o bucket de destino (dest-bucket).

    Nota

    Em uso real, substitua os nomes do bucket de origem e do bucket de destino conforme apropriado.

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

    Para obter as etapas específicas, consulte Gerencie as permissões de uma função RAM.

    Nota

    Para replicar objetos criptografados com KMS para o bucket de destino, conceda também a política de sistema AliyunKMSFullAccess à função.

Importante

Ao replicar dados na mesma região e sob a mesma conta, o OSS verifica apenas a política de permissão da função RAM usada para replicação. Ele não verifica a política de bucket configurada para o bucket de origem ou de destino.

Procedimento

Usar o console OSS

  1. Faça login no console OSS.

  2. Clique em Buckets e, em seguida, clique em src-bucket.

  3. No painel de navegação à esquerda, escolha Data Management > SRR.

  4. Na aba SRR, clique em SRR.

  5. Na caixa de diálogo SRR, configure os parâmetros conforme descrito abaixo.

    Seção

    Parâmetro

    Descrição

    Configure Destination Bucket

    Source Bucket

    Exibe a região e o nome do bucket de origem.

    Destination Bucket

    Selecione Select a bucket that belongs to the Alibaba Cloud account e, em seguida, escolha o nome do bucket de destino na mesma região na lista suspensa.

    Objects to Replicate

    Selecione os dados de origem a serem replicados.

    • Synchronize all files: Replica todos os objetos do bucket para o bucket de destino.

    • Replicate objects with a specific prefix: Replica objetos com o prefixo especificado no bucket para o bucket de destino. Por padrão, é possível adicionar até 10 prefixos. Para aumentar esse limite, entre em contato com o suporte técnico para solicitar um ajuste, até o máximo de 100.

    Object Tags

    Nota

    Para definir este parâmetro, as seguintes condições devem ser atendidas:

    • As tags de objeto estão configuradas.

    • Copy delete marker e Copy delete operations for specified versions não estão selecionados.

    Após marcar a caixa de seleção Set rule, é possível replicar objetos com tags especificadas para o bucket de destino. É possível adicionar até 10 tags (pares chave-valor). Após adicionar tags, selecione uma das seguintes políticas de filtro de tags:

    • Contain all tags: Um objeto é replicado somente se todas as suas tags estiverem no conjunto de tags especificado na regra de filtro.

    • Contain any tag: Um objeto é replicado se qualquer uma de suas tags estiver no conjunto de tags especificado na regra de filtro.

    Replicate KMS-Encrypted Source Objects

    Escolha se deseja replicar objetos criptografados com KMS para o bucket de destino.

    • Yes: Replica objetos para o bucket de destino quando o objeto de origem ou o bucket de destino usa uma chave gerenciada pelo KMS para criptografia (SSE-KMS com um ID de CMK especificado).

      Nota

      Use HeadObject e GetBucketEncryption para consultar o status de criptografia do objeto de origem e do bucket de destino, respectivamente.

    • No: Não replica objetos criptografados com KMS para o bucket de destino.

    CMK ID

    Se optar por replicar objetos criptografados com KMS para o bucket de destino, especifique a chave KMS usada para criptografar os objetos de destino.

    Antes de especificar uma chave KMS, crie uma chave KMS na mesma região do bucket de destino na plataforma KMS. Para obter as etapas específicas, consulte Criar uma chave.

    RAM Role

    Recomendamos selecionar New RAM Role. Após escolher criar uma função na lista suspensa, conclua a autorização da função seguindo as instruções na tela.

    Também é possível selecionar AliyunOSSRole ou uma função personalizada. Para obter mais informações sobre esses três tipos de funções, consulte Tipos de função.

    Configure Replication Policy

    Replicate Historical Data

    Defina se deseja replicar os dados históricos existentes no bucket de origem antes da entrada em vigor da regra de replicação na mesma região.

    • Replicate: Replica dados históricos para o bucket de destino.

      Importante

      Quando dados históricos são replicados, objetos replicados do bucket de origem podem sobrescrever objetos com o mesmo nome no bucket de destino. Para evitar a perda desses arquivos, recomendamos ativar o versionamento tanto para o bucket de origem quanto para o bucket de destino.

    • Do not replicate: Replica apenas os objetos carregados ou atualizados após a entrada em vigor da regra de replicação na mesma região.

    Copy Delete Operation

    Defina se deseja replicar as operações de exclusão do bucket de origem para o bucket de destino.

    Nota

    Esta opção aparece no console quando o versionamento não está ativado para o bucket de origem. Se o versionamento estiver ativado, esta opção será substituída por duas configurações independentes: Copy Delete Marker e Copy Delete Operation of Specified Version.

    • Yes (aplicável a cenários onde o mesmo conjunto de dados é compartilhado e acessado): Replica as operações de criação, atualização e exclusão de objetos no bucket de origem para o bucket de destino.

      Importante

      Com esta política, a criação, atualização e exclusão de objetos são todas replicadas para o bucket de destino. Quando você exclui manualmente um objeto no bucket de origem ou um objeto é excluído automaticamente por uma regra de ciclo de vida, o objeto correspondente no bucket de destino também é excluído e não pode ser recuperado.

    • No (aplicável a cenários de recuperação de desastres): Replica apenas as operações de criação e atualização de objetos no bucket de origem para o bucket de destino. As operações de exclusão não afetam o bucket de destino.

      Nota

      Este método evita efetivamente a perda de dados no bucket de destino causada por exclusão manual ou automática por regras de ciclo de vida no bucket de origem.

    Copy Delete Marker

    Defina se deseja replicar os marcadores de exclusão do bucket de origem para o bucket de destino.

    • Replicate: Quando um objeto é excluído do bucket de origem sem um ID de versão especificado, o marcador de exclusão criado pelo OSS no bucket de origem é sincronizado com o bucket de destino. Isso se aplica a cenários onde o mesmo conjunto de dados é compartilhado e acessado, garantindo que os estados dos dados dos buckets de origem e destino sejam consistentes.

      Importante

      Após configurar esta política, quando você exclui manualmente um objeto no bucket de origem ou um objeto é excluído automaticamente por uma regra de ciclo de vida, o marcador de exclusão também é sincronizado com o bucket de destino, tornando os dados inacessíveis também no lado do destino.

    • Do not replicate (aplicável a cenários de recuperação de desastres): Marcadores de exclusão criados no bucket de origem não são replicados para o bucket de destino. Isso evita efetivamente a perda de dados no bucket de destino causada por exclusão acidental ou automática por regras de ciclo de vida no bucket de origem.

    Copy Delete Operation of Specified Version

    Defina se deseja replicar as operações de exclusão permanente para versões especificadas no bucket de origem para o bucket de destino.

    Nota

    Após criar uma regra de replicação de dados, alterações na classe de armazenamento no bucket de origem causadas por regras de ciclo de vida ou pela modificação da classe de armazenamento via CopyObject, bem como o atributo de último acesso (x-oss-last-access-time) dos objetos no bucket, não são sincronizados com o bucket de destino.

    • Replicate: Quando uma versão especificada de um arquivo de origem (incluindo a versão atual e versões históricas) é excluída permanentemente, a versão correspondente no bucket de destino também é excluída permanentemente. Isso se aplica a cenários onde você precisa garantir que os dados de origem e destino sejam completamente consistentes.

      Importante

      Após configurar esta política, versões de objetos excluídas permanentemente do bucket de origem não podem ser recuperadas no bucket de destino. Tenha cautela.

    • Do not replicate (aplicável a cenários de recuperação de desastres): Quando uma versão especificada de um objeto de origem é excluída permanentemente, a versão correspondente no bucket de destino não é excluída. Isso impede que operações de exclusão permanente no bucket de origem afetem a segurança dos dados do bucket de destino.

    Se um objeto for carregado no bucket de origem usando multipart upload, a operação de upload de cada parte é replicada para o bucket de destino. Por fim, o objeto gerado após a execução de CompleteMultipartUpload em todas as partes também é replicado para o bucket de destino.

    Para obter informações sobre o comportamento de replicação na mesma região combinada com versionamento, consulte Replicação na mesma região combinada com versionamento.

  6. Clique em OK e, na caixa de diálogo exibida, clique em Enable.

    • Depois de criada, a regra de replicação na mesma região não pode ser editada ou excluída.

    • A tarefa de replicação começa de 3 a 5 minutos após a configuração da regra. Visualize o progresso da replicação na aba SRR do bucket de origem.

    • Como a replicação na mesma região entre buckets usa replicação assíncrona (quase em tempo real), o tempo necessário para replicar dados para o bucket de destino depende do tamanho dos dados e geralmente varia de alguns minutos a algumas horas.

Usar SDKs da Alibaba Cloud

Apenas os SDKs Java, Python e Go suportam replicação na mesma conta e região.

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 {
        // In this example, the endpoint of the China (Hangzhou) region is used. Specify the endpoint based on your actual region.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Specify the region that corresponds to the endpoint, for example, cn-hangzhou.
        String region = "cn-hangzhou";
        // We strongly recommend that you do not save access credentials in project code. Otherwise, the access credentials may be leaked and the security of all resources under your account may be compromised. In this example, access credentials are obtained from environment variables. Before you run this sample code, configure the environment variables.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Specify the name of the source bucket.
        String bucketName = "src-bucket";
        // Specify the destination bucket to which data is replicated. The destination bucket and the source bucket must belong to the same account.
        String targetBucketName = "dest-bucket";
        // Specify the region of the destination bucket. The destination bucket and the source bucket must be in the same region.
        String targetBucketLocation = "oss-cn-hangzhou";

        // Create an OSSClient instance.
        // When the OSSClient instance is no longer used, call the shutdown method to release resources.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        // Explicitly declare the use of the V4 signature algorithm.
        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);
            // Historical data is replicated by default. Set this to false to disable the replication of historical data.
            request.setEnableHistoricalObjectReplication(false);
            // Specify the name of the role that authorizes OSS to replicate data. The role must be granted the permissions to perform same-region replication on the source bucket and to receive replicated objects in the destination bucket.
            request.setSyncRole("yourRole");
            // Specify whether OSS replicates objects created by using SSE-KMS encryption.
            //request.setSseKmsEncryptedObjectsStatus("Enabled");
            // Specify the SSE-KMS key ID. This element is required if Status is set to Enabled.
            //request.setReplicaKmsKeyID("3542abdd-5821-4fb5-a425-90adca***");
            //List prefixes = new ArrayList();
            //prefixes.add("image/");
            //prefixes.add("video");
            //prefixes.add("a");
            //prefixes.add("A");
            // Specify the prefixes of the objects to replicate. After you specify prefixes, only objects that match the prefixes are replicated to the destination bucket.
            //request.setObjectPrefixList(prefixes);
            //List actions = new ArrayList();
            //actions.add(AddBucketReplicationRequest.ReplicationAction.PUT);
            // Replicate the creation and update operations of objects in the source bucket to the destination bucket.
            //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
# Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# Specify the endpoint that corresponds to the region of the source bucket. For example, if the source bucket is in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
# Specify the name of the source bucket, for example, src-bucket.
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'src-bucket')
replica_config = ReplicationRule(
    # Specify the destination bucket to which data is replicated. The destination bucket and the source bucket must belong to the same account.
    target_bucket_name='dest-bucket',
    # Specify the region of the destination bucket. The destination bucket and the source bucket must be in the same region.
    target_bucket_location='oss-cn-hangzhou',
    # Specify the name of the role that authorizes OSS to replicate data. The role must be granted the permissions to perform same-region replication on the source bucket and to receive replicated objects in the destination bucket.
    sync_role_name='roleNameTest',
)

# Specify the prefixes of the objects to replicate. After you specify prefixes, only objects that match the prefixes are replicated to the destination bucket.
# prefix_list = ['prefix1', 'prefix2']
# Configure the data replication rule.
# replica_config = ReplicationRule(
     # prefix_list=prefix_list,
     # Replicate the creation and update operations of objects in the source bucket to the destination bucket.
     # action_list=[ReplicationRule.PUT],
     # Specify the destination bucket to which data is replicated.
     # target_bucket_name='dest-bucket',
     # Specify the region of the destination bucket.
     # target_bucket_location='yourTargetBucketLocation',
     # Historical data is replicated by default. Set this to False to disable the replication of historical data.
     # is_enable_historical_object_replication=False,
     # Replicate objects created by using SSE-KMS encryption.
     # sse_kms_encrypted_objects_status=ReplicationRule.ENABLED
     # Specify the SSE-KMS key ID. This element is required if you specify to replicate objects created by using SSE-KMS encryption.
     # replica_kms_keyid='9468da86-3509-4f8d-a61e-6eab1eac****',
  #)

# Enable data replication.
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)
}

// Enable data replication.
func main() {
	// Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// Create an OSSClient instance.
	// Set yourEndpoint to the endpoint that corresponds to the bucket. For example, if the bucket is in the China (Hangzhou) region, set it to https://oss-cn-hangzhou.aliyuncs.com. Specify other regions based on your actual situation.
	client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// Specify the name of the source bucket.
	srcbucketName := "yourSrcBucket"
	// Specify the destination bucket to which data is replicated.
	destBucketName := "yourDestBucket"
	// Specify the prefixes prefix_1 and prefix_2 of the objects to replicate. After you specify prefixes, only objects that match the prefixes are replicated to the destination bucket.
	// If you want to replicate all objects in the source bucket to the destination bucket, you do not need to specify prefixes.
	prefix1 := "prefix_1"
	prefix2 := "prefix_2"
	// Specify the SSE-KMS key ID. This element is required if Status is set to Enabled.
	keyId := "c4d49f85-ee30-426b-a5ed-95e9****"
	// Specify whether OSS replicates objects created by using SSE-KMS encryption.
	source := "Enabled"
	prefixSet := oss.ReplicationRulePrefix{Prefix: []*string{&prefix1, &prefix2}}
	reqReplication := oss.PutBucketReplication{
		Rule: []oss.ReplicationRule{
			{
				PrefixSet: &prefixSet,
				//Replicate the creation and update operations of objects in the source bucket to the destination bucket.
				Action: "PUT",
				Destination: &oss.ReplicationRuleDestination{
					Bucket: destBucketName,
					// Specify the region of the destination bucket. The source bucket and the destination bucket must be in different regions.
					Location: "oss-cn-hangzhou",
				},
				// Historical data is replicated by default. Set this to disabled to disable the replication of historical data.
				HistoricalObjectReplication: "disabled",
				// Specify the name of the role that authorizes OSS to replicate data. The role must be granted the permissions to perform same-region replication on the source bucket and to receive replicated objects in the destination bucket.
				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!")
}

Usar a ferramenta de linha de comando ossutil

Para obter as etapas específicas para ativar a replicação na mesma região usando o ossutil, consulte put-bucket-replication.

Usar a REST api

Se o seu programa tiver requisitos de personalização elevados, inicie solicitações REST api diretamente. Para isso, escreva manualmente o código para calcular a assinatura. Para obter mais informações, consulte PutBucketReplication.