Como posso copiar objetos do S3 de outra conta da AWS?

5 minuto de leitura
0

Quero copiar objetos do Amazon Simple Storage Service (Amazon S3) em todas as contas da AWS. Em seguida, quero ter certeza de que a conta de destino possui os objetos copiados.

Resolução

Importante: os objetos no S3 nem sempre são de propriedade automática da conta da AWS que os carrega. Quando você altera a propriedade do objeto, é uma prática recomendada usar a configuração imposta pelo proprietário do bucket. No entanto, essa opção desativa todas as ACLs e ACLs de bucket em qualquer objeto em seu bucket.

Com a configuração imposta pelo proprietário do bucket em Propriedade de objetos do S3, o mesmo proprietário do bucket possui automaticamente todos os objetos em um bucket do Amazon S3. O recurso imposto pelo proprietário do bucket também desativa todas as listas de controle de acesso (ACLs). Isso simplifica o gerenciamento de acesso para dados armazenados no Amazon S3. No entanto, para buckets existentes, um objeto S3 ainda pertence à conta da AWS que o carregou, a menos que você desative explicitamente as ACLs.

Se seu método existente de compartilhamento de objetos depende do uso de ACLs, identifique os principais que usam ACLs para acessar objetos. Para obter mais informações sobre como revisar as permissões antes de desativar qualquer ACL, consulte Pré-requisitos para desativar as ACLs.

Se você não conseguir desativar suas ACLs, siga estas etapas para assumir a propriedade dos objetos até que possa ajustar sua política de bucket:

1.    Na conta de origem, crie uma política gerenciada pelo cliente do AWS Identity and Access Management (IAM) que conceda permissões adequadas a uma identidade (usuário ou perfil) do IAM. O usuário do IAM deve ter acesso para recuperar objetos do bucket de origem e colocá-los de volta no bucket de destino. Você pode usar uma política do IAM semelhante ao exemplo a seguir:

{
  "Version": "2012-10-17",
  "Statement": \[
    {
      "Effect": "Allow",
      "Action": \[
        "s3:ListBucket",
        "s3:GetObject"
      \],
      "Resource": \[
        "arn:aws:s3:::source-DOC-EXAMPLE-BUCKET",
        "arn:aws:s3:::source-DOC-EXAMPLE-BUCKET/\*"
      \]
    },
    {
      "Effect": "Allow",
      "Action": \[
        "s3:ListBucket",
        "s3:PutObject",
        "s3:PutObjectAcl"
      \],
      "Resource": \[
        "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET",
        "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET/\*"
      \]
    }
  \]
}

Observação: este exemplo de política do IAM inclui somente as permissões mínimas necessárias para listar objetos e copiar objetos entre buckets em contas diferentes. Você deve personalizar as ações permitidas do S3 de acordo com seu caso de uso. Por exemplo, se o usuário precisar copiar objetos que tenham tags de objeto, você também deverá conceder permissões para s3:GetObjectTagging. Se ocorrer um erro, tente executar estas etapas como usuário admin.

2.    Na conta de origem, anexe a política gerenciada pelo cliente à identidade do IAM que você deseja usar para copiar objetos para o bucket de destino.

3.    Na conta de destino, defina a propriedade do objeto do S3 no bucket de destino para o proprietário do bucket preferido. Depois de definir a propriedade do objeto do S3, novos objetos carregados com a lista de controle de acesso (ACL) definida como bucket-owner-full-control são automaticamente de propriedade da conta do bucket.

4.    Na conta de destino, modifique a política do bucket do bucket de destino para conceder permissões à conta de origem para carregar objetos. Além disso, inclua uma condição na política de bucket que exija que os uploads de objetos definam a ACL como bucket-owner-full-control. Você pode usar uma declaração semelhante ao exemplo a seguir:

Observação: substitua destination-DOC-EXAMPLE-BUCKET pelo nome do bucket de destino. Em seguida, substitua arn:aws:iam::222222222222:user/Jane pelo nome do recurso da Amazon (ARN) da identidade do IAM da conta de origem.

{
  "Version": "2012-10-17",
  "Id": "Policy1611277539797",
  "Statement": \[
    {
      "Sid": "Stmt1611277535086",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::222222222222:user/Jane"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET/\*",
      "Condition": {
        "StringEquals": {
          "s3:x-amz-acl": "bucket-owner-full-control"
        }
      }
    },
    {
      "Sid": "Stmt1611277877767",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::222222222222:user/Jane"
      },
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET"
    }
  \]
}

Esse exemplo de política de bucket inclui somente as permissões mínimas necessárias para carregar um objeto com a ACL necessária. Você deve personalizar as ações permitidas do S3 de acordo com seu caso de uso. Por exemplo, se o usuário precisar copiar objetos que tenham tags de objeto, você também deverá conceder permissões para s3:GetObjectTagging

5.    Depois que você configurar a política do IAM e a política de bucket, a identidade do IAM da conta de origem deverá carregar objetos no bucket de destino. Certifique-se de que a ACL esteja definida como bucket-owner-full-control. Por exemplo, a identidade de origem do IAM deve executar o comando cp da AWS CLI com a opção**--acl**:

aws s3 cp s3://source-DOC-EXAMPLE-BUCKET/object.txt s3://destination-DOC-EXAMPLE-BUCKET/object.txt --acl bucket-owner-full-control

Observação: se receber erros ao executar comandos da AWS CLI, verifique se você está usando a versão mais recente da AWS CLI.

Quando você define a propriedade do objeto do S3 como preferencial do proprietário do bucket, os objetos que você carrega com bucket-owner-full-control pertencem à conta do bucket de destino.

Importante: se seu bucket S3 tiver criptografia padrão com o AWS Key Management Service (AWS KMS) ativado, você também deverá modificar as permissões de chave do AWS KMS. Para obter instruções, consulte Meu bucket do Amazon S3 tem criptografia padrão usando uma chave do AWS KMS personalizada. Como posso permitir que os usuários façam download e upload para o bucket?

Informações relacionadas

Proprietário do bucket concede permissões de bucket entre contas

Como altero a propriedade do objeto de um bucket do Amazon S3 quando os objetos são carregados por outras contas da AWS?

Usar uma política baseada em recursos para delegar acesso a um bucket do Amazon S3 em outra conta

AWS OFICIAL
AWS OFICIALAtualizada há um ano