Configurar a replicação para buckets na mesma conta - Amazon Simple Storage Service

Configurar a replicação para buckets na mesma conta

A replicação em tempo real é a cópia assíncrona automática de objetos em buckets na mesma região da AWS ou em Regiões da AWS diferentes. A replicação em tempo real copia os objetos recém-criados e as atualizações de objeto de um bucket de origem para buckets de destino. Para ter mais informações, consulte Replicar objetos dentro de uma região e entre regiões.

Ao configurar a replicação, você adiciona regras de replicação ao bucket de origem. As regras de replicação definem quais objetos do bucket de origem devem ser replicados e o bucket de destino ou buckets nos quais os objetos replicados são armazenados. Você pode criar uma regra para replicar todos os objetos dentro de um bucket ou um subgrupo de objetos com um prefixo específico de nome de chaves, uma ou mais tags de objetos ou ambos. Um bucket de destino pode estar na mesma Conta da AWS que o bucket de origem ou pode estar em uma conta diferente.

Se você especificar um ID da versão do objeto a ser excluído, o Amazon S3 excluirá essa versão do objeto no bucket de origem. No entanto, ele não replica a exclusão no bucket de destino. Em outras palavras: ele não exclui a mesma versão do objeto do bucket de destino. Isso protege os dados contra exclusões mal-intencionadas.

Quando você adiciona uma regra de replicação a um bucket, ela fica ativada por padrão, portanto, começa a funcionar assim que é salva.

Neste exemplo, você configura a replicação em tempo real para os buckets de origem e de destino que pertencem à mesma Conta da AWS. São apresentados exemplos de uso do console do Amazon S3, da AWS Command Line Interface (AWS CLI), do AWS SDK for Java e do AWS SDK for .NET.

Para configurar uma regra de replicação quando o bucket de destino estiver na mesma Conta da AWS que o bucket de origem, siga estas etapas.

Se o bucket de destino estiver um uma conta diferente do bucket de origem, você deverá adicionar uma política ao bucket de destino. Assim, será possível conceder ao proprietário da conta do bucket de origem permissão para replicar objetos no bucket de destino. Para obter mais informações, consulte Conceder permissões quando os buckets de origem e de destino pertencerem a Contas da AWS diferentes.

  1. Faça login no AWS Management Console e abra o console do Amazon S3 em https://console.aws.amazon.com/s3/.

  2. No painel de navegação à esquerda, escolha Buckets.

  3. Na lista de Buckets, escolha o nome do bucket desejado.

  4. Selecione a guia Gerenciamento, role para baixo até Regras de replicação e selecione Criar regra de replicação.

  5. Na seção Configuração da regra de replicação, em Nome da regra de replicação, insira um nome para sua regra para ajudar a identificá-la posteriormente. O nome é obrigatório e precisa ser exclusivo dentro do bucket.

  6. Em Status, Enabled (Habilitado) é selecionado por padrão. Uma regra ativada começa a funcionar assim que você a salva. Se você quiser ativar a regra posteriormente, selecione Desabilitado.

  7. Se o bucket tiver regras de replicação existentes, você será instruído a definir uma prioridade para a regra. Defina uma prioridade para a regra, de maneira a evitar conflitos causados pelos objetos incluídos no escopo de mais de uma regra. No caso de sobreposição de regras, o Amazon S3 usa a prioridade da regra para determinar qual regra aplicar. Quanto maior o número, maior a prioridade. Para obter mais informações sobre prioridade de regra, consulte Elementos do arquivo de configuração de replicação.

  8. Em Bucket de origem, você tem as seguintes opções para definir a origem da replicação:

    • Para replicar todo o bucket, escolha Apply to all objects in the bucket (Aplicar a todos os objetos no bucket).

    • Para replicar todos os objetos que tenham o mesmo prefixo, escolha Limit the scope of this rule using one or more filters (Limitar o escopo desta regra usando um ou mais filtros). Isso limita a replicação a todos os objetos que tenham nomes que começam com o prefixo especificado (por exemplo, pictures). Insira um prefixo na caixa Prefixo.

      nota

      Se você inserir um prefixo que seja o nome de uma pasta, é preciso usar / (barra) como o último caractere (por exemplo, pictures/).

    • Para replicar todos os objetos com uma ou mais tags de objeto, selecione Adicionar tag e insira o par de chave-valor nas caixas. Repita o procedimento para adicionar outra tag. Você pode combinar um prefixo e tags. Para obter mais informações sobre etiquetas de objeto, consulte Categorizar seu armazenamento usando tags.

    O novo esquema XML de configuração de replicação é compatível com os filtros de prefixo e tags e com a priorização das regras. Para obter mais informações sobre o novo esquema, consulte Considerações sobre a compatibilidade com versões anteriores. Para obter mais informações sobre o XML usado com a API do Amazon S3 que funciona atrás da interface do usuário, consulte Elementos do arquivo de configuração de replicação. O novo esquema é descrito como configuração de replicação XML V2.

  9. Em Destino, selecione o bucket no qual você deseja que o Amazon S3 replique objetos.

    nota

    O número de buckets de destino é limitado ao número de Regiões da AWS em determinada partição. Uma partição é um agrupamento de regiões. Atualmente, a AWS tem três partições: aws (regiões padrão), aws-cn (regiões da China) e aws-us-gov (regiões AWS GovCloud (US)). Para solicitar um aumento da cota do bucket de destino, você pode usar cotas de serviço.

    • Para replicar para um bucket ou buckets em sua conta, selecione Escolher um bucket nesta conta e digite ou procure nomes de buckets de destino.

    • Para replicar em um ou mais buckets em uma Conta da AWS diferente, selecione Selecionar um bucket em outra conta e insira o ID e o nome da conta do bucket de destino.

      Se o destino estiver um uma conta diferente do bucket de origem, você deverá adicionar uma política de bucket aos buckets de destino para conceder ao proprietário da conta do bucket de origem permissão para replicar objetos. Para ter mais informações, consulte Conceder permissões quando os buckets de origem e de destino pertencerem a Contas da AWS diferentes.

      Opcionalmente, se você quiser padronizar a propriedade de novos objetos no bucket de destino, escolha Alterar propriedade do objeto para o proprietário do bucket de destino. Para obter mais informações sobre essa opção, consulte Controlar a propriedade de objetos e desabilitar ACLs para seu bucket.

    nota

    Se o versionamento não estiver ativado no bucket de destino, você receberá uma advertência que contém um botão Enable versioning (Habilitar versionamento). Escolha esse botão para habilitar o versionamento no bucket.

  10. Configure uma função do AWS Identity and Access Management (IAM) que o Amazon S3 possa assumir para replicar objetos em seu nome.

    Para configurar um perfil do IAM, na seção Perfil do IAM, selecione uma das seguintes opções na lista suspensa de perfis do IAM:

    • Recomendamos que você escolha Create new role (Criar nova função) para que o Amazon S3 crie uma nova função do IAM para você. Quando você salva a regra, uma nova política é gerada para a função do IAM que coincide com os buckets de origem e de destino que você escolher.

    • Você pode usar uma função do IAM existente. Se fizer isso, escolha uma função que conceda ao Amazon S3 as permissões necessárias para a replicação. A replicação falhará se essa função não conceder ao Amazon S3 permissões suficientes para seguir sua regra de replicação.

    Importante

    Quando você adiciona uma regra de replicação a um bucket, você deve ter a permissão iam:PassRole para poder transmitir a função do IAM que concede permissões de replicação do Amazon S3. Para ter mais informações, consulte Conceder permissões ao usuário para transmitir um perfil a um AWS service (Serviço da AWS) no Guia do usuário do IAM.

  11. Para replicar objetos no bucket de origem que estão criptografados com a criptografia do lado do servidor com chaves do AWS Key Management Service (AWS KMS) (SSE-KMS), em Criptografia, selecione Replicar objetos criptografados com o AWS KMS. Em chaves do AWS KMS para criptografar objetos de destino estão as chaves de origem que você permite que a replicação use. Todas as chaves de origem do KMS são incluídas por padrão. Para limitar a seleção de chaves do KMS, você pode selecionar um alias ou um ID de chave.

    Os objetos criptografados pelas AWS KMS keys que você não seleciona não são replicados. A chave do KMS ou um grupo de chaves do KMS é escolhido para você, mas você pode escolher as chaves do KMS, se desejar. Para obter informações sobre como usar o AWS KMS com replicação, consulte Replicar objetos criptografados (SSE-S3, SSE-KMS, DSSE-KMS, SSE-C).

    Importante

    Ao replicar objetos que estão criptografados com AWS KMS, a taxa de solicitações do AWS KMS dobra na Região de origem e aumenta na Região de destino pelo mesmo valor. Essas taxas de chamada aprimoradas para AWS KMS se devem à forma com que os dados são recriptografados usando a chave do KMS que você define na região de destino de replicação. O AWS KMS tem uma cota de taxas de solicitação por conta de chamada por região. Para ter informações sobre os padrões de limite, consulte Cotas do AWS KMS: solicitações por segundo: varia no Guia do desenvolvedor do AWS Key Management Service.

    Se a taxa de solicitações do objeto PUT do Amazon S3 durante a replicação for maior do que a metade do limite da taxa padrão do AWS KMS para sua conta, recomendamos que você solicite um aumento da cota de taxa de solicitação do AWS KMS. Para solicitar um aumento, crie um caso no AWS Support Center em Entre em contato conosco. Por exemplo, suponha que a sua taxa de solicitação do objeto PUT seja 1.000 solicitações por segundo e você use o AWS KMS para criptografar seus objetos. Nesse caso, recomendamos solicitar que o AWS Support aumente o limite da taxa do AWS KMS para 2,5 mil solicitações por segundo nas regiões de origem e de destino (se forem diferentes) para garantir que não haja nenhum controle de utilização por parte do AWS KMS.

    Para ver a taxa de solicitação de objeto PUT no bucket de origem, visualize PutRequests nas métricas de solicitação do Amazon CloudWatch para o Amazon S3. Consulte informações sobre como visualizar métricas do CloudWatch em Uso do console do S3.

    Se você escolheu replicar objetos criptografados com o AWS KMS, faça o seguinte:

    1. Em AWS KMS key para criptografar objetos de destino, especifique sua chave do KMS de uma das seguintes formas:

      • Para escolher em uma lista de chaves do KMS disponíveis, selecione Escolher entre suas AWS KMS keys e escolha sua chave do KMS na lista de chaves disponíveis.

        As chaves Chave gerenciada pela AWS (aws/s3) e as chaves gerenciadas pelo cliente são exibidas nessa lista. Para ter mais informações sobre chaves gerenciadas pelo cliente, consulte Chaves de clientes e chaves da AWS no Guia do desenvolvedor do AWS Key Management Service.

      • Para inserir o nome do recurso da Amazon (ARN) da chave do KMS, selecione Inserir ARN da AWS KMS key e insira o ARN da chave do KMS no campo exibido. Isso criptografa as réplicas no bucket de destino. Você pode encontrar o ARN da chave do KMS no console do IAM em Chaves de criptografia.

      • Para criar uma chave gerenciada pelo cliente no console do AWS KMS, selecione Criar uma chave do KMS.

        Para ter mais informações sobre como criar uma AWS KMS key, consulte Criação de chaves no Guia do desenvolvedor do AWS Key Management Service.

      Importante

      Você só pode usar chaves do KMS habilitadas na mesma Região da AWS que o bucket. Quando você seleciona Escolher de suas chaves do KMS, o console do S3 lista somente 100 chaves do KMS por região. Se você tiver mais de 100 chaves do KMS na mesma região, será possível ver somente as primeiras 100 chaves do KMS no console do S3. Para usar uma chave do KMS que não esteja listada no console, escolha Inserir o ARN da AWS KMS key e insira o ARN de sua chave do KMS.

      Ao usar uma AWS KMS key para criptografia no lado do servidor no Amazon S3, você deve escolher uma chave de criptografia do KMS simétrica. O Amazon S3 só é compatível com chaves do KMS de criptografia simétrica, e não com chaves assimétricas do KMS. Para ter mais informações, consulte Identificar chaves do KMS simétricas e assimétricas no Guia do desenvolvedor do AWS Key Management Service.

      Para obter mais informações sobre como criar uma AWS KMS key, consulte Criação de chaves no Guia do desenvolvedor do AWS Key Management Service. Para obter mais informações sobre como usar o AWS KMS com o Amazon S3, consulte Usar criptografia do lado do servidor com o AWS KMS (SSE-KMS).

  12. Em Classe de armazenamento de destino, se você quiser replicar seus dados em uma classe de armazenamento específica no destino, escolha Alterar a classe de armazenamento dos objetos replicados. Em seguida, escolha a classe de armazenamento que você deseja usar para os objetos replicados no destino. Se você não selecionar essa opção, a classe de armazenamento para objetos replicados será a mesma classe dos objetos originais.

  13. Você tem as seguintes opções adicionais ao definir as Opções de replicação adicionais:

    nota

    Quando você usa métricas de replicação do S3 RTC ou S3, aplicam-se taxas adicionais.

  14. Para terminar, escolha Save (Salvar).

  15. Depois de salvar sua regra, você pode editar, ativar, desativar ou excluir sua regra selecionando sua regra e escolhendo Edit rule (Editar regra).

Para configurar a AWS CLI para configurar a replicação quando os buckets de origem e de destino pertencem à mesma Conta da AWS, faça o seguinte:

  • Crie os buckets de origem e de destino.

  • Habilite o versionamento nos buckets.

  • Crie um perfil do AWS Identity and Access Management (IAM) que dê ao Amazon S3 permissão para replicar objetos.

  • Adicione uma configuração de replicação ao bucket de origem.

Para verificar sua configuração, teste-a.

Como configurar a replicação quando os buckets de origem e de destino pertencem à mesma Conta da AWS
  1. Defina um perfil de credenciais para a AWS CLI. Este exemplo usa o nome de perfil acctA. Consulte mais informações sobre como configurar perfis de credenciais e como usar perfis nomeados em Configuration and credential file settings no Guia do usuário da AWS Command Line Interface.

    Importante

    O perfil que você usar para este exemplo deve ter as permissões necessárias. Por exemplo, na configuração da replicação, especifique a função do IAM que o Amazon S3 pode assumir. Você só poderá fazer isso se o perfil usado tiver a permissão iam:PassRole. Consulte mais informações em Conceda permissões a um usuário para passar um perfil para um AWS service (Serviço da AWS) no Guia do usuário do IAM. Se você usar credenciais de administrador para criar um perfil nomeado, poderá executar todas as tarefas.

  2. Crie um bucket de origem e habilite o versionamento nele usando os comandos da AWS CLI a seguir. Para usar esses comandos, substitua user input placeholders por suas próprias informações.

    O comando create-bucket a seguir cria um bucket de origem chamado amzn-s3-demo-source-bucket na região Leste dos EUA (N. da Virgínia) (us-east-1):

    aws s3api create-bucket \ --bucket amzn-s3-demo-source-bucket \ --region us-east-1 \ --profile acctA

    O comando put-bucket-versioning a seguir habilita o Versionamento do S3 no bucket do amzn-s3-demo-source-bucket:

    aws s3api put-bucket-versioning \ --bucket amzn-s3-demo-source-bucket \ --versioning-configuration Status=Enabled \ --profile acctA
  3. Crie um bucket de destino e habilite o versionamento nele usando os comandos da AWS CLI a seguir. Para usar esses comandos, substitua user input placeholders por suas próprias informações.

    nota

    Para fazer a configuração de uma replicação quando os buckets de origem e de destino estiverem na mesma Conta da AWS, use o mesmo perfil para os buckets de origem e destino. Este exemplo usa acctA.

    Para testar a configuração da replicação quando os buckets pertencerem a diferentes contas da Contas da AWS, especifique diferentes perfis para cada conta. Por exemplo, use um perfil acctB para o bucket de destino.

    O comando create-bucket a seguir cria um bucket de destino chamado amzn-s3-demo-destination-bucket na região Oeste dos EUA (Oregon) (us-west-2):

    aws s3api create-bucket \ --bucket amzn-s3-demo-destination-bucket \ --region us-west-2 \ --create-bucket-configuration LocationConstraint=us-west-2 \ --profile acctA

    O comando put-bucket-versioning a seguir habilita o Versionamento do S3 no bucket do amzn-s3-demo-destination-bucket:

    aws s3api put-bucket-versioning \ --bucket amzn-s3-demo-destination-bucket \ --versioning-configuration Status=Enabled \ --profile acctA
  4. Crie uma função do IAM. Você especifica essa função na configuração da replicação que adiciona ao bucket de origem posteriormente. O Amazon S3 assume essa função para replicar objetos em seu nome. A função do IAM é criada em duas etapas:

    • Crie uma função.

    • Anexar uma política de permissões à função.

    1. Crie a função do IAM.

      1. Copie a política de confiança a seguir e salve-a em um arquivo chamado s3-role-trust-policy.json no diretório atual do computador local. Essa política concede à entidade principal do serviço Amazon S3 permissões para assumir o perfil.

        { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"s3.amazonaws.com" }, "Action":"sts:AssumeRole" } ] }
      2. Execute o comando a seguir para criar uma função.

        $ aws iam create-role \ --role-name replicationRole \ --assume-role-policy-document file://s3-role-trust-policy.json \ --profile acctA
    2. Anexar uma política de permissões à função.

      1. Copie a política de permissões a seguir e salve-a em um arquivo com o nome s3-role-permissions-policy.json no diretório atual do computador local. Essa política concede permissões para várias ações de bucket e objetos do Amazon S3.

        { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging" ], "Resource":[ "arn:aws:s3:::amzn-s3-demo-source-bucket/*" ] }, { "Effect":"Allow", "Action":[ "s3:ListBucket", "s3:GetReplicationConfiguration" ], "Resource":[ "arn:aws:s3:::amzn-s3-demo-source-bucket" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ReplicateTags" ], "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/*" } ] }
      2. Execute o comando a seguir para criar uma política e ligá-la à função. Substitua os user input placeholders por suas próprias informações.

        $ aws iam put-role-policy \ --role-name replicationRole \ --policy-document file://s3-role-permissions-policy.json \ --policy-name replicationRolePolicy \ --profile acctA
  5. Adicione uma configuração de replicação ao bucket de origem.

    1. Embora a API do Amazon S3 exija que você especifique a configuração da replicação como XML, a AWS CLI requer que você especifique a configuração de replicação como JSON. Salve o JSON a seguir em um arquivo chamado replication.json no diretório local do seu computador.

      { "Role": "IAM-role-ARN", "Rules": [ { "Status": "Enabled", "Priority": 1, "DeleteMarkerReplication": { "Status": "Disabled" }, "Filter" : { "Prefix": "Tax"}, "Destination": { "Bucket": "arn:aws:s3:::amzn-s3-demo-destination-bucket" } } ] }
    2. Atualize o JSON substituindo os valores de amzn-s3-demo-destination-bucket e IAM-role-ARN por suas próprias informações. Salve as alterações.

    3. Execute o comando put-bucket-replication a seguir para adicionar a configuração de replicação ao bucket de origem. Dê um nome ao bucket de origem:

      $ aws s3api put-bucket-replication \ --replication-configuration file://replication.json \ --bucket amzn-s3-demo-source-bucket \ --profile acctA

    Para recuperar a configuração de replicação, use o comando get-bucket-replication:

    $ aws s3api get-bucket-replication \ --bucket amzn-s3-demo-source-bucket \ --profile acctA
  6. Teste a configuração no console do Amazon S3, seguindo estas etapas:

    1. Faça login no AWS Management Console e abra o console do Amazon S3 em https://console.aws.amazon.com/s3/.

    2. No painel de navegação à esquerda, escolha Buckets. Na lista Buckets de uso geral, selecione o bucket de origem.

    3. No bucket de origem, crie uma pasta chamada Tax.

    4. Adicione objetos de amostra à pasta Tax no bucket de origem.

      nota

      O tempo necessário para o Amazon S3 replicar um objeto depende do tamanho do objeto. Para obter informações sobre como ver o status da replicação, consulte Obtenção de informações sobre o status da replicação.

      No bucket de destino, verifique o seguinte:

      • Se o Amazon S3 replicou os objetos.

      • Se os objetos são réplicas. Na guia Propriedades dos objetos, role para baixo até a seção Visão geral do gerenciamento de objetos. Em Configurações de gerenciamento, veja o valor em Status da replicação. Esse valor deve ser definido como REPLICA.

      • Se as réplicas pertencem à conta do bucket de origem. É possível verificar a propriedade do objeto na guia Permissões dos objetos.

        Se os buckets de origem e de destino pertencerem a contas diferentes, você poderá adicionar uma configuração opcional para instruir o Amazon S3 a alterar a propriedade da réplica à conta de destino. Para ver um exemplo, consulte Como alterar o proprietário da réplica.

Use os exemplos de código a seguir para adicionar uma configuração de replicação ao bucket com AWS SDK for Java e AWS SDK for .NET, respectivamente.

Java

O exemplo a seguir adiciona uma configuração de replicação a um bucket e, depois, a recupera e verifica a configuração. Consulte instruções sobre como criar e testar uma amostra funcional em Getting Started no Guia do desenvolvedor do AWS SDK for Java.

import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.identitymanagement.AmazonIdentityManagement; import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClientBuilder; import com.amazonaws.services.identitymanagement.model.CreateRoleRequest; import com.amazonaws.services.identitymanagement.model.PutRolePolicyRequest; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.model.BucketReplicationConfiguration; import com.amazonaws.services.s3.model.BucketVersioningConfiguration; import com.amazonaws.services.s3.model.CreateBucketRequest; import com.amazonaws.services.s3.model.DeleteMarkerReplication; import com.amazonaws.services.s3.model.DeleteMarkerReplicationStatus; import com.amazonaws.services.s3.model.ReplicationDestinationConfig; import com.amazonaws.services.s3.model.ReplicationRule; import com.amazonaws.services.s3.model.ReplicationRuleStatus; import com.amazonaws.services.s3.model.SetBucketVersioningConfigurationRequest; import com.amazonaws.services.s3.model.StorageClass; import com.amazonaws.services.s3.model.replication.ReplicationFilter; import com.amazonaws.services.s3.model.replication.ReplicationFilterPredicate; import com.amazonaws.services.s3.model.replication.ReplicationPrefixPredicate; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class CrossRegionReplication { public static void main(String[] args) throws IOException { Regions clientRegion = Regions.DEFAULT_REGION; String accountId = "*** Account ID ***"; String roleName = "*** Role name ***"; String sourceBucketName = "*** Source bucket name ***"; String destBucketName = "*** Destination bucket name ***"; String prefix = "Tax/"; String roleARN = String.format("arn:aws:iam::%s:%s", accountId, roleName); String destinationBucketARN = "arn:aws:s3:::" + destBucketName; AmazonS3 s3Client = AmazonS3Client.builder() .withCredentials(new ProfileCredentialsProvider()) .withRegion(clientRegion) .build(); createBucket(s3Client, clientRegion, sourceBucketName); createBucket(s3Client, clientRegion, destBucketName); assignRole(roleName, clientRegion, sourceBucketName, destBucketName); try { // Create the replication rule. List<ReplicationFilterPredicate> andOperands = new ArrayList<ReplicationFilterPredicate>(); andOperands.add(new ReplicationPrefixPredicate(prefix)); Map<String, ReplicationRule> replicationRules = new HashMap<String, ReplicationRule>(); replicationRules.put("ReplicationRule1", new ReplicationRule() .withPriority(0) .withStatus(ReplicationRuleStatus.Enabled) .withDeleteMarkerReplication( new DeleteMarkerReplication().withStatus( DeleteMarkerReplicationStatus.DISABLED)) .withFilter(new ReplicationFilter().withPredicate( new ReplicationPrefixPredicate(prefix))) .withDestinationConfig(new ReplicationDestinationConfig() .withBucketARN(destinationBucketARN) .withStorageClass(StorageClass.Standard))); // Save the replication rule to the source bucket. s3Client.setBucketReplicationConfiguration(sourceBucketName, new BucketReplicationConfiguration() .withRoleARN(roleARN) .withRules(replicationRules)); // Retrieve the replication configuration and verify that the configuration // matches the rule we just set. BucketReplicationConfiguration replicationConfig = s3Client .getBucketReplicationConfiguration(sourceBucketName); ReplicationRule rule = replicationConfig.getRule("ReplicationRule1"); System.out.println("Retrieved destination bucket ARN: " + rule.getDestinationConfig().getBucketARN()); System.out.println("Retrieved priority: " + rule.getPriority()); System.out.println("Retrieved source-bucket replication rule status: " + rule.getStatus()); } catch (AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } catch (SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client // couldn't parse the response from Amazon S3. e.printStackTrace(); } } private static void createBucket(AmazonS3 s3Client, Regions region, String bucketName) { CreateBucketRequest request = new CreateBucketRequest(bucketName, region.getName()); s3Client.createBucket(request); BucketVersioningConfiguration configuration = new BucketVersioningConfiguration() .withStatus(BucketVersioningConfiguration.ENABLED); SetBucketVersioningConfigurationRequest enableVersioningRequest = new SetBucketVersioningConfigurationRequest( bucketName, configuration); s3Client.setBucketVersioningConfiguration(enableVersioningRequest); } private static void assignRole(String roleName, Regions region, String sourceBucket, String destinationBucket) { AmazonIdentityManagement iamClient = AmazonIdentityManagementClientBuilder.standard() .withRegion(region) .withCredentials(new ProfileCredentialsProvider()) .build(); StringBuilder trustPolicy = new StringBuilder(); trustPolicy.append("{\\r\\n "); trustPolicy.append("\\\"Version\\\":\\\"2012-10-17\\\",\\r\\n "); trustPolicy.append("\\\"Statement\\\":[\\r\\n {\\r\\n "); trustPolicy.append("\\\"Effect\\\":\\\"Allow\\\",\\r\\n \\\"Principal\\\":{\\r\\n "); trustPolicy.append("\\\"Service\\\":\\\"s3.amazonaws.com\\\"\\r\\n },\\r\\n "); trustPolicy.append("\\\"Action\\\":\\\"sts:AssumeRole\\\"\\r\\n }\\r\\n ]\\r\\n}"); CreateRoleRequest createRoleRequest = new CreateRoleRequest() .withRoleName(roleName) .withAssumeRolePolicyDocument(trustPolicy.toString()); iamClient.createRole(createRoleRequest); StringBuilder permissionPolicy = new StringBuilder(); permissionPolicy.append( "{\\r\\n \\\"Version\\\":\\\"2012-10-17\\\",\\r\\n \\\"Statement\\\":[\\r\\n {\\r\\n "); permissionPolicy.append( "\\\"Effect\\\":\\\"Allow\\\",\\r\\n \\\"Action\\\":[\\r\\n "); permissionPolicy.append("\\\"s3:GetObjectVersionForReplication\\\",\\r\\n "); permissionPolicy.append( "\\\"s3:GetObjectVersionAcl\\\"\\r\\n ],\\r\\n \\\"Resource\\\":[\\r\\n "); permissionPolicy.append("\\\"arn:aws:s3:::"); permissionPolicy.append(sourceBucket); permissionPolicy.append("/*\\\"\\r\\n ]\\r\\n },\\r\\n {\\r\\n "); permissionPolicy.append( "\\\"Effect\\\":\\\"Allow\\\",\\r\\n \\\"Action\\\":[\\r\\n "); permissionPolicy.append( "\\\"s3:ListBucket\\\",\\r\\n \\\"s3:GetReplicationConfiguration\\\"\\r\\n "); permissionPolicy.append("],\\r\\n \\\"Resource\\\":[\\r\\n \\\"arn:aws:s3:::"); permissionPolicy.append(sourceBucket); permissionPolicy.append("\\r\\n "); permissionPolicy .append("]\\r\\n },\\r\\n {\\r\\n \\\"Effect\\\":\\\"Allow\\\",\\r\\n "); permissionPolicy.append( "\\\"Action\\\":[\\r\\n \\\"s3:ReplicateObject\\\",\\r\\n "); permissionPolicy .append("\\\"s3:ReplicateDelete\\\",\\r\\n \\\"s3:ReplicateTags\\\",\\r\\n "); permissionPolicy.append("\\\"s3:GetObjectVersionTagging\\\"\\r\\n\\r\\n ],\\r\\n "); permissionPolicy.append("\\\"Resource\\\":\\\"arn:aws:s3:::"); permissionPolicy.append(destinationBucket); permissionPolicy.append("/*\\\"\\r\\n }\\r\\n ]\\r\\n}"); PutRolePolicyRequest putRolePolicyRequest = new PutRolePolicyRequest() .withRoleName(roleName) .withPolicyDocument(permissionPolicy.toString()) .withPolicyName("crrRolePolicy"); iamClient.putRolePolicy(putRolePolicyRequest); } }
C#

O exemplo de código de AWS SDK for .NET a seguir adiciona uma configuração de replicação a um bucket e, depois, a recupera. Para usar esse código, dê nomes aos buckets e o nome de recurso da Amazon (ARN) à função do IAM. Consulte informações sobre como configurar e executar exemplos de código, em Getting Started with the AWS SDK for .NET no Guia do desenvolvedor do AWS SDK for .NET.

using Amazon; using Amazon.S3; using Amazon.S3.Model; using System; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class CrossRegionReplicationTest { private const string sourceBucket = "*** source bucket ***"; // Bucket ARN example - arn:aws:s3:::destinationbucket private const string destinationBucketArn = "*** destination bucket ARN ***"; private const string roleArn = "*** IAM Role ARN ***"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint sourceBucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 s3Client; public static void Main() { s3Client = new AmazonS3Client(sourceBucketRegion); EnableReplicationAsync().Wait(); } static async Task EnableReplicationAsync() { try { ReplicationConfiguration replConfig = new ReplicationConfiguration { Role = roleArn, Rules = { new ReplicationRule { Prefix = "Tax", Status = ReplicationRuleStatus.Enabled, Destination = new ReplicationDestination { BucketArn = destinationBucketArn } } } }; PutBucketReplicationRequest putRequest = new PutBucketReplicationRequest { BucketName = sourceBucket, Configuration = replConfig }; PutBucketReplicationResponse putResponse = await s3Client.PutBucketReplicationAsync(putRequest); // Verify configuration by retrieving it. await RetrieveReplicationConfigurationAsync(s3Client); } catch (AmazonS3Exception e) { Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message); } catch (Exception e) { Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message); } } private static async Task RetrieveReplicationConfigurationAsync(IAmazonS3 client) { // Retrieve the configuration. GetBucketReplicationRequest getRequest = new GetBucketReplicationRequest { BucketName = sourceBucket }; GetBucketReplicationResponse getResponse = await client.GetBucketReplicationAsync(getRequest); // Print. Console.WriteLine("Printing replication configuration information..."); Console.WriteLine("Role ARN: {0}", getResponse.Configuration.Role); foreach (var rule in getResponse.Configuration.Rules) { Console.WriteLine("ID: {0}", rule.Id); Console.WriteLine("Prefix: {0}", rule.Prefix); Console.WriteLine("Status: {0}", rule.Status); } } } }