Como posso alterar a propriedade de objetos de propriedade pública (anônima) no meu bucket do Amazon S3?

3 minuto de leitura
0

Meu bucket do Amazon Simple Storage Service (Amazon S3) tem um objeto com propriedade pública (anônima). Quero alterar a propriedade do objeto para que minha conta da AWS seja proprietária do objeto.

Breve descrição

Por padrão, uma identidade que carrega um objeto do Amazon S3 é proprietária desse objeto. Isso significa que, se você permitir o acesso público de gravação ao seu bucket, os objetos que usuários públicos (anônimos) enviarem serão de propriedade pública. Para evitar problemas de segurança, uma prática recomendada é bloquear o acesso público ao seu bucket.

Se um usuário anônimo fez upload de um objeto no seu bucket e você quer alterar a propriedade do objeto, modifique a lista de controle de acesso (ACL) do objeto. Altere a ACL do objeto para conceder ao proprietário do bucket (sua conta da AWS) controle total do objeto.

Observação: você também pode usar a Propriedade de objetos do Amazon S3 para controlar a propriedade de objetos que outra conta da AWS envia.

Resolução

Para alterar a propriedade do objeto para a conta da AWS que possui o bucket, siga estas etapas:

  1. Para adicionar uma ACL de objeto, execute o comando put-object-acl usando a AWS Command Line Interface (AWS CLI). Inclua a opção --acl com o valor bucket-owner-full-control para adicionar uma ACL que conceda ao proprietário do bucket o controle do objeto. Em seguida, inclua a opção --no-sign-request para usar credenciais anônimas para a solicitação. O comando put-object-acl completo com as opções de que você precisa é semelhante ao seguinte exemplo:

    aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key awsexampleobject --acl bucket-owner-full-control --no-sign-request

    Observação: se você receber erros ao executar comandos da AWS CLI, certifique-se de estar usando a versão mais recente da AWS CLI.

  2. Para aplicar a alteração de propriedade, copie o objeto sobre ele mesmo. Para fazer isso, execute o comando cp:

    aws s3 cp s3://DOC-EXAMPLE-BUCKET/awsexampleobject s3://DOC-EXAMPLE-BUCKET/awsexampleobject --storage-class STANDARD

    Observação: certifique-se de alterar o valor --storage-class no comando de exemplo para a classe de armazenamento aplicável ao seu caso de uso. Além disso, certifique-se de incluir outras opções de comando cp necessárias para seu objeto.

  3. Para verificar a alteração de propriedade, execute o comando get-object-acl:

    aws s3api get-object-acl --bucket DOC-EXAMPLE-BUCKET --key awsexampleobject

    Esse comando retorna uma saída que exibe o proprietário do objeto:

    {
      "Owner": {
        "DisplayName": "jane",
        "ID": "75050348ef85628a0977bexamplebdbc3062ce76f35cb463345ae65c2608d099"
      },
      "Grants": [
        {
          "Grantee": {
            "DisplayName": "jane",
            "ID": "75050348ef85628a0977bexamplebdbc3062ce76f35cb463345ae65c2608d099",
            "Type": "CanonicalUser"
          },
          "Permission": "FULL_CONTROL"
        }
      ]
    }
  4. Se seu bucket tiver versionamento, você também deverá excluir a versão anterior do objeto gerado a partir do comando cp na Etapa 2. A versão anterior do objeto tem propriedade pública (anônima). Para excluir essa versão do objeto, primeiro execute o comando list-object-versions no bucket. Inclua a opção --prefix do comando para filtrar os resultados para o objeto que tinha propriedade pública:

    aws s3api list-object-versions --bucket DOC-EXAMPLE-BUCKET --prefix example.txt

    Na saída do comando, copie a ID da versão do objeto que tinha propriedade pública. Em seguida, execute o comando delete-object para a ID da versão que você deseja excluir:

    aws s3api delete-object --bucket DOC-EXAMPLE-BUCKET --key example.txt --version-id 'example.d6tjAKF1iObKbEnNQkIMPjj'

    Aviso: revise a ID da versão com cuidado para ter certeza de que é a ID da versão do objeto com propriedade pública. Se você excluir uma versão do objeto, não poderá recuperá-la.

Informações relacionadas

Por que não consigo acessar um objeto que foi enviado ao meu bucket do Amazon S3 por outra conta da AWS?

AWS OFICIAL
AWS OFICIALAtualizada há 8 meses