Alterar o proprietário da réplica - Amazon Simple Storage Service

Alterar o proprietário da réplica

Na replicação, por padrão o proprietário do objeto de origem também é proprietário da réplica. Quando os buckets de origem e destino pertencerem a Contas da AWS diferentes e você quiser alterar a propriedade da réplica para a Conta da AWS que possui os buckets de destino, você poderá adicionar configurações opcionais para alterar a propriedade da réplica para a Conta da AWS proprietária do bucket de destino. Você pode fazer essa opção, por exemplo, para restringir o acesso às réplicas de objeto. Isso é chamado de opção de substituição do proprietário da configuração de replicação. Para obter mais informações sobre a opção de substituição do proprietário, consulte Adicionar a opção de substituição do proprietário à configuração da replicação. Para obter mais informações sobre como definir a configuração de replicação, consulte Visão geral sobre a replicação de objetos.

Para configurar a substituição do proprietário, faça o seguinte:

  • Adicione a opção de substituição do proprietário à configuração da replicação para dizer ao Amazon S3 para alterar a propriedade da réplica.

  • Conceda ao Amazon S3 permissões para alterar a propriedade da réplica.

  • Adicione a permissão na política do bucket de destino para permitir a alteração da propriedade da réplica. Isso permite que o proprietário do bucket de destino aceite a propriedade das réplicas do objeto.

Para obter mais informações, consulte Adicionar a opção de substituição do proprietário à configuração da replicação. Para ver um exemplo funcional com instruções detalhadas, consulte Como alterar o proprietário da réplica.

Configuração aplicada pelo proprietário do bucket em Object Ownership

Quando você usa Amazon S3 Replication e os buckets de origem e destino pertencem a Contas da AWS diferentes, o proprietário do bucket de destino pode desabilitar ACLs (com a configuração aplicada de proprietário do bucket para a propriedade do bucket) para alterar o proprietário da réplica para a Conta da AWS que é a proprietária do bucket de destino. Essa configuração imita o comportamento de substituição do proprietário existente sem a necessidade da permissão s3:ObjectOwnerOverrideToBucketOwner. Com isso, todos os objetos que são replicados para o bucket de destino com a configuração aplicada pelo proprietário do bucket pertencem ao proprietário do bucket de destino. Para obter informações sobre o Object Ownership, consulte Controlar a propriedade de objetos e desabilitar ACLs para seu bucket.

Adicionar a opção de substituição do proprietário à configuração da replicação

Atenção

Adicione a opção de substituição do proprietário somente quando os buckets de origem e de destino pertencerem a Contas da AWS diferentes. O Amazon S3 não verifica se os buckets pertencem à mesma conta ou a contas diferentes. Se você adicionar a substituição do proprietário quando os dois buckets pertencerem à mesma Conta da AWS, o Amazon S3 aplicará a substituição do proprietário. Ele concede permissões completas ao proprietário do bucket de destino e não replica as atualizações subsequentes para a lista de controle de acesso (ACL) do objeto de origem. O proprietário da réplica pode alterar diretamente na ACL associada a uma réplica com uma solicitação PUT ACL, mas não por replicação.

Para especificar a opção de substituição do proprietário, adicione o seguinte ao elemento Destination:

  • O elemento AccessControlTranslation, que diz ao Amazon S3 para alterar a propriedade da réplica

  • O elemento Account, que especifica a Conta da AWS do proprietário do bucket de destino

<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> ... <Destination> ... <AccessControlTranslation> <Owner>Destination</Owner> </AccessControlTranslation> <Account>destination-bucket-owner-account-id</Account> </Destination> </Rule> </ReplicationConfiguration>

A configuração da replicação do exemplo a seguir diz ao Tax para replicar os objetos que têm o prefixo de chaves Amazon S3 ao bucket de destino e altere a propriedade das réplicas.

<?xml version="1.0" encoding="UTF-8"?> <ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Role>arn:aws:iam::account-id:role/role-name</Role> <Rule> <ID>Rule-1</ID> <Priority>1</Priority> <Status>Enabled</Status> <DeleteMarkerReplication> <Status>Disabled</Status> </DeleteMarkerReplication> <Filter> <Prefix>Tax</Prefix> </Filter> <Destination> <Bucket>arn:aws:s3:::destination-bucket</Bucket> <Account>destination-bucket-owner-account-id</Account> <AccessControlTranslation> <Owner>Destination</Owner> </AccessControlTranslation> </Destination> </Rule> </ReplicationConfiguration>

Conceder permissão do Amazon S3 para alterar a propriedade da réplica

Conceda permissões do Amazon S3 para alterar a propriedade da réplica adicionando permissão para a ação s3:ObjectOwnerOverrideToBucketOwner na política de permissões associada à função do IAM. Essa é a função do IAM especificada na configuração de replicação que permite que o Amazon S3 assuma e replique objetos em seu nome.

... { "Effect":"Allow", "Action":[ "s3:ObjectOwnerOverrideToBucketOwner" ], "Resource":"arn:aws:s3:::destination-bucket/*" } ...

Adicionar a permissão na política do bucket de destino para permitir a alteração da propriedade da réplica

O proprietário do bucket de destino deve conceder ao proprietário da permissão do bucket de origem para alterar a propriedade da réplica. A propriedade do bucket de destino concede ao proprietário do bucket de origem permissão para a ação s3:ObjectOwnerOverrideToBucketOwner. Isso permite que o proprietário do bucket de destino aceite a propriedade das réplicas do objeto. O exemplo de declaração de política do bucket a seguir mostra como fazer isso.

... { "Sid":"1", "Effect":"Allow", "Principal":{"AWS":"source-bucket-account-id"}, "Action":["s3:ObjectOwnerOverrideToBucketOwner"], "Resource":"arn:aws:s3:::destination-bucket/*" } ...

Considerações adicionais

Ao configurar a opção de substituição da propriedade, aplicam-se as seguintes considerações:

  • Por padrão, o proprietário do objeto de origem também possui a réplica. O Amazon S3 replica a versão do objeto e a ACL associada a ela.

    Se você adicionar a substituição do proprietário, o Amazon S3 replicará somente a versão do objeto, não a ACL. Além disso, o Amazon S3 não replica as alterações subsequentes na ACL do objeto de origem. O Amazon S3 define a ACL na réplica que concede controle total ao proprietário do bucket de destino.

  • Ao atualizar uma configuração de replicação para habilitar ou desabilitar a substituição do proprietário, ocorrerá a situação a seguir.

     

    • Se você adicionar a opção de substituição do proprietário à configuração da replicação:

      Quando o Amazon S3 replica uma versão do objeto, ele descarta a ACL associada ao objeto de origem. Em vez disso, ele define a ACL na réplica, dando o controle total ao proprietário do bucket de destino. Ele não replica as alterações subsequentes na ACL do objeto de origem. No entanto, essa alteração na ACL não se aplica às versões de objeto replicadas antes de você definir a opção de substituição do proprietário. As atualizações da ACL nos objetos de origem replicados antes da substituição do proprietário foram definidas para continuarem a ser replicadas (porque o objeto e suas réplicas continuam a ter o mesmo proprietário).

    • Se você remover a opção de substituição do proprietário da configuração da replicação:

      O Amazon S3 replica novos objetos que aparecem no bucket de origem e as ACLs associadas aos buckets de destino. Para objetos replicados antes de você ter removido a substituição do proprietário, o Amazon S3 não replicará as ACLs, pois a propriedade do objeto muda, de maneira que o Amazon S3 feito permanece em vigor. Em outras palavras: as ACLs colocaram a versão do objeto que foi replicada quando a substituição do proprietário tinha sido substituída para não continuarem a ser replicadas.

Como alterar o proprietário da réplica

Quando os buckets de origem e de destino em uma configuração de replicação pertencem a Contas da AWS diferentes, você pode instruir o Amazon S3 a alterar o proprietário da réplica para a Conta da AWS que é proprietária do bucket de destino. Este exemplo explica como usar o console do Amazon S3 e a AWS CLI para alterar a propriedade da réplica. Para obter mais informações, consulte Alterar o proprietário da réplica.

nota

Quando você usa a replicação do S3 e os buckets de origem e destino pertencem a Contas da AWS diferentes, o proprietário do bucket pode desabilitar ACLs (com a configuração aplicada pelo proprietário do bucket em Object Ownership) para alterar a propriedade da réplica para a Conta da AWS que possui o bucket de destino. Essa configuração imita o comportamento de substituição do proprietário existente sem a necessidade da permissão s3:ObjectOwnerOverrideToBucketOwner. Com isso, todos os objetos que são replicados para o bucket de destino com a configuração aplicada pelo proprietário do bucket pertencem ao proprietário do bucket de destino. Para obter informações sobre o Object Ownership, consulte Controlar a propriedade de objetos e desabilitar ACLs para seu bucket.

Para obter mais informações sobre como configurar a replicação usando criptografia do lado do servidor com o AWS Key Management Service em cenários entre contas, consulte Conceder permissões adicionais para cenários entre contas.

Para obter instruções detalhadas, consulte Configuração da replicação para buckets de origem e de destino pertencentes à mesma conta. Este tópico traz instruções para definir a configuração da replicação quando os buckets pertencerem às mesmas Contas da AWS ou a contas diferentes.

Para alterar a propriedade da réplica usando a AWS CLI, crie buckets, habilite o versionamento neles, crie uma função do IAM que dê permissão ao Amazon S3 para replicar objetos e adicione a configuração da replicação ao bucket de origem. Na configuração da replicação, você instrui o Amazon S3 a alterar o proprietário da réplica. Você também testa a configuração.

Para alterar o proprietário da réplica quando os buckets de origem e de destino pertencerem a Contas da AWS diferentes (AWS CLI)
  1. Neste exemplo, você cria os buckets de origem e destino em duas Contas da AWS diferentes. Configure a AWS CLI com dois perfis nomeados. Este exemplo usa os perfis nomeados acctA e acctB, respectivamente. Para obter mais informações sobre a definição de perfis da credencial, consulte Perfis nomeados no Guia do usuário do AWS Command Line Interface.

    Importante

    Os perfis que você usar para este exercício 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ó pode fazer isso se o perfil usado tiver a permissão iam:PassRole. Se você usar as credenciais do usuário administrador para criar um perfil nomeado, poderá executar todas as tarefas. Para obter mais informações, consulte Conceder permissões ao usuário para passar uma função a um produto da AWS no Guia do usuário do IAM.

    Você precisa garantir que esses perfis tenham as permissões necessárias. Por exemplo, a configuração de replicação inclui uma função do IAM que o Amazon S3 pode assumir. O perfil nomeado que você usa para conectar essa configuração a um bucket só poderá fazer isso se tiver a permissão iam:PassRole. Se você especificar as credenciais do usuário administrador ao criar esses perfis nomeados, eles terão todas as permissões. Para obter mais informações, consulte Conceder permissões ao usuário para passar uma função a um produto da AWS no Guia do usuário do IAM.

  2. Crie o bucket de origem e habilite o versionamento. Este exemplo cria o bucket de origem na região Leste dos EUA (Norte da Virgínia) (us-east-1).

    aws s3api create-bucket \ --bucket source \ --region us-east-1 \ --profile acctA
    aws s3api put-bucket-versioning \ --bucket source \ --versioning-configuration Status=Enabled \ --profile acctA
  3. Crie um bucket de destino e habilite o versionamento. Este exemplo cria o bucket de destino na região Oeste dos EUA (Oregon) (us-west-2). Use um perfil de Conta da AWS diferente do usado para o bucket de origem.

    aws s3api create-bucket \ --bucket destination \ --region us-west-2 \ --create-bucket-configuration LocationConstraint=us-west-2 \ --profile acctB
    aws s3api put-bucket-versioning \ --bucket destination \ --versioning-configuration Status=Enabled \ --profile acctB
  4. É necessário adicionar permissões à política de bucket de destino para permitir a alteração da propriedade da réplica.

    1. Salve a política a seguir no destination-bucket-policy.json.

      { "Version": "2012-10-17", "Statement": [ { "Sid": "destination_bucket_policy_sid", "Principal": { "AWS": "source-bucket-owner-account-id" }, "Action": [ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ObjectOwnerOverrideToBucketOwner", "s3:ReplicateTags", "s3:GetObjectVersionTagging" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::destination/*" ] } ] }
    2. Coloque a política acima no bucket de destino:

      aws s3api put-bucket-policy --region $ {destination_region} --bucket $ {destination} --policy file://destination_bucket_policy.json
  5. 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 uma 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 ao Amazon S3 permissões para assumir a função.

        { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"s3.amazonaws.com" }, "Action":"sts:AssumeRole" } ] }
      2. Execute o comando da AWS CLI 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-perm-pol-changeowner.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. Nas etapas a seguir, crie uma função do IAM e anexe a política à função.

        { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl" ], "Resource":[ "arn:aws:s3:::source/*" ] }, { "Effect":"Allow", "Action":[ "s3:ListBucket", "s3:GetReplicationConfiguration" ], "Resource":[ "arn:aws:s3:::source" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ObjectOwnerOverrideToBucketOwner", "s3:ReplicateTags", "s3:GetObjectVersionTagging" ], "Resource":"arn:aws:s3:::destination/*" } ] }
      2. Para criar uma política e ligá-la à função, execute o comando a seguir.

        $ aws iam put-role-policy \ --role-name replicationRole \ --policy-document file://s3-role-perm-pol-changeowner.json \ --policy-name replicationRolechangeownerPolicy \ --profile acctA
  6. Adicione uma configuração de replicação ao bucket de origem.

    1. 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 atual local do computador local. Na configuração, a adição de AccessControlTranslation indica alteração na propriedade da réplica.

      { "Role":"IAM-role-ARN", "Rules":[ { "Status":"Enabled", "Priority":1, "DeleteMarkerReplication":{ "Status":"Disabled" }, "Filter":{ }, "Status":"Enabled", "Destination":{ "Bucket":"arn:aws:s3:::destination", "Account":"destination-bucket-owner-account-id", "AccessControlTranslation":{ "Owner":"Destination" } } } ] }
    2. Edite o JSON fornecendo os valores do ID da conta do proprietário do bucket de destino e IAM-role-ARN. Salve as alterações.

    3. Para adicionar a configuração de replicação ao bucket de origem, execute o comando a seguir. Dê o nome do bucket de origem.

      $ aws s3api put-bucket-replication \ --replication-configuration file://replication.json \ --bucket source \ --profile acctA
  7. Verifique a propriedade da réplica no console do Amazon S3.

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

    2. Adicione objetos ao bucket de origem. Verifique se o bucket de destino contém as réplicas do objeto e se a propriedade das réplicas mudou para a Conta da AWS proprietária do bucket de destino.

Para obter um exemplo de código para adicionar a configuração da replicação, consulte Uso da SDKs AWS. É necessário modificar a configuração de replicação de acordo. Para obter informações conceituais, consulte Alterar o proprietário da réplica.