Невозможно удалить ключ Amazon S3, содержащий плохой символ - PullRequest
3 голосов
/ 30 ноября 2011

Я только недавно начал использовать S3.Я случайно создал ключ, содержащий плохой символ, и теперь я не могу ни просмотреть содержимое этой папки, ни удалить этот плохой ключ.(С тех пор я добавил проверки, чтобы убедиться, что я не сделаю это снова).

Изначально я использовал старый модуль Python "S3" с 2008 года.Теперь я перешел на boto-2.0 и до сих пор не могу его удалить.Я провел немало исследований в Интернете, и, похоже, проблема в том, что у меня недопустимый символ XML, поэтому это проблема на самом низком уровне, и пока API не помог.

Я наконец-то связался с Amazon, и они сказали использовать "s3-curl.pl" из http://aws.amazon.com/code/128. Я скачал его, и вот мой ключ:

<Key>info/&#x1b;[01</Key>

Я думаю, что я делал быстрый удар для цикла над некоторымифайлов в то время, и у меня настроен «lscolors», и вот так это произошло.

Я попытался ./s3curl.pl --id <myID> --key <myKEY> -- -X DELETE https://mybucket.s3.amazonaws.com/info/&#x1b;[01

(а также попытался поместить URL в одинарные / двойные кавычки, итакже пытался экранировать '[').

Без кавычек в URL он зависает.С кавычками я получаю «curl: (3) [globbing] ошибка: неверная спецификация диапазона после позиции 50».Я отредактировал s3-curl.pl, чтобы сделать curl --globoff и все еще получаю эту ошибку.

Буду признателен за любую помощь.

Ответы [ 5 ]

5 голосов
/ 24 сентября 2012

Вы можете использовать инструмент s3cmd из здесь .Сначала вам нужно запустить

s3cmd fixbucket <bucket name that contains bad file>.

Затем вы можете удалить файл, используя

s3cmd del <bucket>/<file>
1 голос
/ 13 января 2018

В моем случае были новые строки в ключе (как бы то ни было ..). Я смог исправить это с помощью aws cli следующим образом:

aws cli rm "s3://my_bucket/Icon"$'\r'

У меня также было включено управление версиями, поэтому мне нужно было сделать это для всех версий (идентификаторы версий отображаются в пользовательском интерфейсе при включении просмотра версий):

aws s3api delete-object --bucket my_bucket --key "Icon"$'\r' --version-id <version_id>
0 голосов
/ 12 июня 2019

Это решило проблему, просто удалите основную папку:

aws s3 rm "s3://BUCKET_NAME/folder/folder" --recursive
0 голосов
/ 16 мая 2019

Я недавно сталкивался с этим случаем. У меня была новая строка в конце моего ведра. Следующая команда решила эту проблему.

 aws s3 rm "bucket_name"$'\r' --recursive
0 голосов
/ 28 сентября 2018

Я недавно был в такой ситуации, чтобы перечислить элементы, которые вы можете использовать:

aws s3api list-objects-v2 --bucket my_bucket --encoding-type url

плохие ключи вернут URL, закодированный как:

"Key": "%01%C3%B4%C2%B3%C3%8Bu%C2%A5%27%40yr%3E%60%0EQ%14%C3%A5.gif"

пробелы стали +, и мне пришлось изменить их на %20, а * не было закодировано, мне пришлось заменить их на %2A, прежде чем я смог их удалить.

Чтобы на самом деле удалить их, я не смог использовать aws cli, потому что он будет urlencode уже urlencoded-ключа, что приведет к 404, поэтому, чтобы обойти это, я вручную нажал на остальные API с помощью глагола DELETE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...