Список объектов S3 с общедоступными правами на чтение (в приватном сегменте) - PullRequest
0 голосов
/ 03 сентября 2018

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

Мне известны различные способы (в консоли и с помощью сценариев), чтобы посмотреть, какие сегменты имеют публичные разрешения.

Однако объектам могут быть предоставлены анонимные разрешения на чтение, даже если они находятся в закрытом хранилище.

Может быть трудно отслеживать / проверять файлы / объекты, доступные для публичного чтения, потому что я не вижу никакого способа найти их, кроме просмотра по каждому пути в консоли AWS.

Есть ли способ перечислить все объекты, которые имеют анонимные (чтение) разрешения в ведре? Подойдет любой метод, включая AWSCLI, Boto, REST и т. Д.

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

Полагаю, я мог бы создать скрипт с использованием Boto (https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#objectacl). Это единственный способ или существует официальный метод, такой как команда AWSCLI?

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

То, о чем вы говорите, это объектные ACL. В духе работы, которую нужно выполнить , я хочу отметить, что вы можете настроить корзину, чтобы запретить списки ACL для публичных объектов. Это, вероятно, одна из лучших корпоративных практик для профилактика. Среди лучших корпоративных практик для аудита и проверки постоянно описывается здесь.

Обновление : если вы заинтересованы в мониторинге и аудите ACL на уровне сегмента , , взгляните на это управляемое решение AWS Config.

Однако, если вы ищете скрипт / инструмент bash, использующий aws-cli (который является тегом для этого вопроса), это поможет:

bucket="my-bucket-name"
search_term="AllUsers"

for key in $(aws s3 ls --recursive s3://$bucket/ | awk '{$1=$2=$3=""; print $0}' | sed 's/^[ \t]*//'); do
    acl=$(aws s3api get-object-acl --bucket $bucket --key $key) &&
    result_found=$(echo $acl | grep -q $search_term) &&
    if $result_found; then
        echo $key;
        echo $acl;
    fi;
done

Вот что он делает:

  1. Рекурсивно перечислять все объекты в вашем ведре
  2. Итерация по этим ключам объекта
  3. Спросите S3, что ACL для этого объекта
  4. Если этот ACL содержит строку «AllUsers» (глобальная группа разрешений s3), он выведет этот ACL на стандартный вывод.

Я обобщил эту проблему, чтобы «повторить все ключи и их ACL в пределах корзины, если ACL содержит данную $search_term», поэтому, если другие сталкиваются с похожей, но слегка другой проблемой, это решение все равно будет полезно, постольку, поскольку они заменяют $search_term на то, что соответствует их проблеме.

В идеале (если вы не хотите публичных объектов), если вы запустите это ... ничего не должно отображаться.

Имейте в виду, это решение не будет хорошо масштабироваться для массивных ведер с тоннами и тоннами объектов.

0 голосов
/ 05 сентября 2018

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

Как проверить ACL каждого объекта в S3

...