Применяйте шифрование к существующим объектам S3, не влияя на класс хранилища

Я пытаюсь зашифровать существующее ведро s3. Когда я это сделаю:

aws s3 cp s3://test/ s3://test/ --recursive --sse

он шифрует все файлы в корзине путем повторного копирования объектов. Моя проблема здесь в том, что у меня есть объекты в ведре в классах хранения Standard, Standard-IA и Glacier. Итак, когда я запускаю указанную выше команду копирования, объекты в хранилище Standard-IA преобразуются в стандартное хранилище. (Я еще не проверял, что происходит с объектами в леднике - вероятно, это даже не позволит мне скопировать.)

Есть ли способ восстановить тип хранилища объекта и просто включить шифрование для существующей корзины?


person Putharekulu    schedule 06.11.2017    source источник
comment
AWS всегда будет хранить объект в стандартном хранилище, если вы явно не укажете другой класс хранилища. Кроме того, обратите внимание на наши ловушки затрат на извлечение ледника. Используйте ледник, если вы уверены, что нет необходимости извлекать данные в среднесрочной и долгосрочной перспективе. В противном случае Standard_IA будет достаточно для краткосрочного использования.   -  person mootmoot    schedule 06.11.2017
comment
Я использую три разных типа хранилища для объектов в одной корзине. объект, помещенный в ковш, является стандартным, ›30 дней перемещается в IA и› 90 дней перемещается на ледник. поэтому я не могу использовать здесь опцию класса хранилища   -  person Putharekulu    schedule 06.11.2017
comment
Возможно, вам следует сообщить о своей проблеме здесь github.com/aws/aws-cli об интерфейсе командной строки AWS. cp проблемы на разных классах хранения. Или поднимите заявку на форуме AWS.   -  person mootmoot    schedule 07.11.2017


Ответы (3)


Вы могли бы сделать что-то подобное, используя bash и JQ, очевидно, что python с boto3 или аналогичный был бы чище.

Я не знаю, не лучше ли вам добавить чек, чтобы пропустить файлы GLACIER, нет волшебного способа применить к ним шифрование без размораживания, а затем снова заморозить их.

Вы захотите запустить это на экземпляре ec2, локальном в ведре s3.

#!/bin/bash

bucketname="bucket-name"
aws s3 ls ${bucketname} --recursive | awk '{ print $NF }' > /tmp/filelist

for file in `cat /tmp/filelist`
do
        class=`aws s3api head-object --bucket ${bucketname} --key $file  | jq '.StorageClass' | sed 's/\"//g'`
        if [ "$class" = "null" ]
        then
                class="STANDARD"

        fi
        echo "aws s3 cp s3://${bucketname}/${file} s3://${bucketname}/${file} --sse  --storage-class ${class}"
done
person Ewan Leith    schedule 07.11.2017
comment
Большое спасибо, это действительно полезно. - person Putharekulu; 07.11.2017
comment
Будет ли с меня взиматься плата за извлечение при повторном копировании объектов IA для шифрования? - person Putharekulu; 07.11.2017
comment
Стоит сказать, что в 2019 году я бы поступил иначе, вместо этого вы можете использовать S3 Batch с файлом манифеста и лямбдой. - person Ewan Leith; 11.02.2019
comment
Вы можете запустить jq -r '.StorageClass' и отказаться от процесса sed. - person D.Fitz; 04.02.2021

Вам нужно добавить опцию командной строки --storage-class STANDARD_IA

person John Hanley    schedule 06.11.2017
comment
Я использую три разных типа хранилища для объектов в одной корзине. объект, помещенный в ковш, является стандартным, ›30 дней перемещается в IA и› 90 дней перемещается на ледник. поэтому я не могу использовать здесь опцию класса хранилища. - person Putharekulu; 06.11.2017

Есть ли у вашего ведра политика жизненного цикла? Если это так - он на самом деле ведет себя так, как должен, - по сути, вы создаете новый объект в корзине, поэтому переход к стандарту на самом деле правильный.

Опция Эвана Лейта, приведенная выше, - действительно единственный способ сделать это - программно определить текущее состояние хранилища, а затем переопределить хранилище «нового» элемента при сохранении.

Надеюсь это поможет...

person Dan G    schedule 17.11.2018