Como posso alterar a propriedade de objetos de propriedade pública (anônima) no meu bucket do Amazon S3?
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:
-
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.
-
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.
-
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" } ] }
-
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
Conteúdo relevante
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há um ano