Как найти незашифрованный файл в корзине Amazon AWS S3? - PullRequest
0 голосов
/ 01 февраля 2019

Что у меня есть: несколько старых блоков s3 с 1M объектов в каждом, с включенным шифрованием на стороне сервера.

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

Я пробовал решение с awscli, но оно довольно медленное - 1 запрос за 2 секунды.

мое решение:

s3_buckets="uploads tmp logs whatever "
for s3_bucket in $s3_buckets;
do
    aws s3 ls s3://$s3_bucket --recursive \
    | awk '{print $NF}' \
    | ( while read object ; 
        do 
            object_status=$(aws s3api head-object --bucket $s3_bucket --key $object --query ServerSideEncryption --output text 2>&1) 
            if [ "$object_status" != "AES256" ]; then
                echo "Unencrypted object $object in s3://$s3_bucket"; >> /tmp/body.tmp
                objects_unencrypted=$((objects_unencrypted + 1))
            fi
            objects_count=$((objects_count + 1))
        done
    echo "Bucket $s3_bucket has $objects_count, where unencrypted $objects_unencrypted." >> /tmp/body.tmp )
done

так, может быть, есть какие-нибудь лучшие решения?

возможно ли создать Cloudwatch метрику для отображения незашифрованных полей?или другие?

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Использование Amazon S3 Inventory .

Список инвентаризации содержит список объектов в корзине S3, а метаданные для каждого перечисленного объекта включают, среди прочего:

  • Состояние шифрования - Установите для SSE-S3, SSE-C, SSE-KMS или NOT-SSE.Состояние шифрования на стороне сервера для SSE-S3, SSE-KMS и SSE с предоставленными заказчиком ключами (SSE-C).Состояние NOT-SSE означает, что объект не зашифрован с помощью шифрования на стороне сервера.
0 голосов
/ 01 февраля 2019

Боюсь, что нет лучшего решения, чем перечислять все файлы и проверять шифрование один за другим.(см. также https://github.com/aws/aws-sdk-js/issues/1778)

Нет метрики Cloudwatch о шифровании. Список метрик дан в https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html

При этом, вы можете ускорить процесснемного, написав скрипт Python или нод, чтобы сделать это для вас. Он будет работать быстрее, чем ваш скрипт оболочки выше, потому что ему не нужно порождать процесс (и полное время выполнения Python) для каждого объекта.

URL выше дает пример в Node. То же относится и к Python.

Еще один способ ускорить процесс - запустить несколько сценариев параллельно, каждая из которых обрабатывает часть пространства имен. Предполагая, что имена ключей вашего объекта распределены равномерно(первая буква ключа объекта - [az], а первая буква вашего ключа объекта - равномерная): вы можете создать 26 сценариев, каждый из которых содержит одну букву (все ключи начинаются с «a», все ключи начинаются с «b» и т. д.)и запустить эти сценарии параллельно. Это позволит использовать преимущества массивного параллелизма S3. Пример буквы можно заменить на любойили подходит для вашего варианта использования.

Чтобы минимизировать задержку между вашим сценарием и S3, я бы запустил сценарий на небольшом экземпляре EC2, работающем в том же регионе, что и ваш сегмент.

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