Подтвердить что ты не робот

Amazon S3 ACL для доступа только для чтения и однократного доступа

Я разрабатываю веб-приложение, и в настоящее время у меня есть следующий ACL, назначенный учетной записи AWS, который он использует для доступа к своим данным:

{
  "Statement": [
    {
      "Sid": "xxxxxxxxx", // don't know if this is supposed to be confidential
      "Action": [
        "s3:*"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::cdn.crayze.com/*"
      ]
    }
  ]
}

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

Из документации видно, что я хочу разрешить только следующие действия: s3:GetObject и s3:PutObject, но я специально хочу, чтобы учетная запись имела возможность создавать объекты, которые еще не существуют, т.е. PUT запрос на существующий объект должен быть отклонен. Возможно ли это?

4b9b3361

Ответ 1

Это невозможно в Amazon S3, как вы, вероятно, предполагали это; однако вы можете обойти это ограничение Использование Versioning, которое является средством хранения нескольких вариантов объекта в одном и том же ведре и было разработано с использованием подобных случаев в ум:

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

Есть также несколько связанных часто задаваемых вопросов, например:

  • Что такое Versioning? - Versioning позволяет сохранять, извлекать и восстанавливать каждую версию каждого объекта, хранящегося в ведре Amazon S3. После того как вы включите ведение версий для ведра, Amazon S3 сохраняет существующие объекты в любое время, когда вы выполняете операции PUT, POST, COPY или DELETE. По умолчанию GET-запросы будут получать самую последнюю написанную версию. Старые версии перезаписываемого или удаляемого объекта можно получить, указав версию в запросе.

  • Почему я должен использовать Versioning? - Amazon S3 предоставляет клиентам очень долговечную инфраструктуру хранения. Versioning предлагает дополнительный уровень защиты, предоставляя средства восстановления, когда клиенты случайно перезаписывают или удаляют объекты. Это позволяет легко избавиться от непреднамеренных действий пользователей и сбоев приложений. Вы также можете использовать Versioning для хранения и архивирования данных. [акцент мой]

  • Как Versioning защищает меня от случайного удаления моих объектов? - Когда пользователь выполняет операцию DELETE на объекте, последующие запросы по умолчанию больше не будут извлечение объекта. Тем не менее, все версии этого объекта будут по-прежнему сохранены в вашем ковше Amazon S3 и могут быть восстановлены или восстановлены. Только владелец корзины Amazon S3 может навсегда удалить версию. [акцент мой]

Если вы действительно имеете первостепенное значение для учетных данных AWS владельца ведра (которые могут отличаться от пользователей, которым требуется доступ), вы можете сделать еще один шаг дальше, см. могу ли я обеспечить максимальную защиту моих сохраненных версий?:

Варианты версий MFA Delete, которые используют многофакторную аутентификацию, могут быть использованы для обеспечения дополнительного уровня безопасность. [...] Если вы включили Versioning с MFA Delete на вашем ковше Amazon S3 требуется две формы аутентификации: навсегда удалить версию объекта: ваша учетная запись AWS учетные данные и действительный шестизначный код и серийный номер из устройства аутентификации в вашем физическом распоряжении. [...]

Ответ 2

Если это случайная перезапись, которую вы пытаетесь избежать, и ваши бизнес-требования позволяют короткое временное окно несогласованности, вы можете выполнить откат в функции Lambda:

  1. Сделайте это политикой, что "нет новых объектов с тем же именем". Большую часть времени этого не произойдет. Чтобы обеспечить его соблюдение:
  2. Слушайте события S3: PutObject в функции AWS Lambda.
  3. Когда событие запущено, проверьте наличие нескольких версий.
  4. Если присутствует более одной версии, удалите все, кроме самого нового.
  5. Сообщать загрузчику о том, что произошло (полезно иметь исходный загрузчик в x-amz-meta-* объекта. Подробнее здесь).

Ответ 3

Теперь вы можете сделать это с помощью S3 Object Lock. Это настройка для каждого ведра и позволяет разместить один из двух видов блокировок WORM.

  • "период хранения" - не может быть изменен
  • "правовая удержание" - может быть изменена владельцем ковша в любое время

https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html

Ответ 4

Да, Невозможно создать такую ​​политику, в которой вы даете разрешение на размещение только для новых объектов (не существует на s3).

Я разработчик Bucket Explorer, вы можете попробовать Bucket Explorer, который делает версию двумя способами. 1. Amazon S3 Versioning, если он включен в Bucket 2. Это собственное управление версиями Bcuket Explorer, когда Amazon S3 Versioning отключается в Bucket.

Вы также можете попробовать Bucket Explorer Team Edition, если хотите предоставить конкретный доступ к своему другу или клиенту.