S3 Flashcards
Архитектура
Route 53 URL → S3 static web-site
В чём причина ошибки “Access Denied”?
В чём её точно нет?
Можно ли в S3 хостить целый SPA (single page application) веб-сайт?
Причина в S3 Bucket Policy
Точно НЕ в CORS (это НЕ cross-domain запрос)
Да, в S3 можно хостить целый SPA, ведь JS файлы тоже работают прямо в браузере
S3 Object Lock
Что за фича?
Какой принцип реализует?
На какое время можно её активировать?
Как она связана с многопоточкой?
Возможность на определённое время блокировать S3 объект (или весь бакет целиком), т.е. временно НЕ позволять никому его перезаписать / удалять
Принцип WORM (write once read many)
- на промежуток времени (retention period)
- навсегда, пока кто-то НЕ отменит (legal hold)
Речь НЕ о многопоточке
Предотвращать запись имеется ввиду НЕ другим потокам Java приложения.
А просто другим пользователям AWS.
S3 Object Lock
Есть 2 retention modes: COMPLIANCE и GOVERNANCE
В чём разница? Какой более строгий?
Самый “жёсткий” - это COMPLIANCE
“Соблюдение законов превыше правительства”
Единственное, что остаётся при Compliance Mode - это сидеть и ждать окончания Retention периода.
А в GOVERNANCE mode определённая группа пользователей может отменить блокировку (S3 Object Lock)
Какие фичи S3 требуют “S3 Versioning” как pre-requisite?
Какие НЕ требуют?
Какие перестали требовать?
Какая особенность у S3 Replication?
Требуют S3 Replication, MFA Delete, S3 Object Lock
НЕ требует S3 Access Logs
Больше НЕ требует S3 Lifecycle Rules
Для S3 Replication нужно активировать версионирование ВО ВСЕХ бакетах-участниках репликации
S3 Notifications
Какие сервисы поддерживают прямую интеграцию?
Как интегрироваться с другими сервисами?
- Lambda
- SQS Standard (НЕ FIFO)
- SNS
Через отлов EventBridge event’ов (это НЕ непосредственно S3 event’ы, а лишь факт их появления, зафиксированный в EventBridge)
EventBridge имеет множество Target’ов на выбор
Сам по себе EventBridge НЕ является прямым Target’ом для S3 Event Notifications. EventBridge стоит “поверх S3” (и поверх всех остальных сервисов)
S3 Bucket Owner, S3 Object Owner
В чём разница и в чём ограничения?
Как обойти эти ограничения?
bucket доступен многим user’ам для загрузки файлов (shared access)
По-умолчанию, кто загрузил файл, тот и Owner.
Если файл загрузил другой AWS аккаунт, то другой AWS аккаунт будет owener’ом.
Даже S3 Bucket Owner не будет иметь доступ к S3 ОБЪЕКТУ, который был загружен ДРУГИМ АККАУНТОМ
В настройках можно изменить это поведение, чтобы S3 Object Owner’ом всегда был хозяин бакета (S3 Bucket Owner), даже если этот объект загрузил другой аккаунт
S3 Object Integrity
Какой алгоритм используется? Какие альтернативы?
S3 умеет вычислять checksum (hash) на основании контента объектов, загруженных в S3 bucket
Этот MD5 checksum hash - и есть S3 object INTEGRITY - то, через что можно уникально идентифицировать контент объекта
S3 использует алгоритм кэширования MD5
Но вообще есть ещё SHA-256, CRC
S3 Object Integrity
Какой use-case?
Что такое ETag?
Зачем он нужен?
Можно вычислить MD5 checksum hash
перед загрузкой в S3 на локальном компьютере.
Отправить её в заголовке с ключом “Content-MD5”
И после загрузки (upload) сравнить её с MD5 checksum hash
объекта в S3.
Если она НЕ совпала, значит загрузка (upload) НЕ удалась.
ETag - это атрибут S3 объекта, который хранит этот MD5 hash (для SSE-S3).
ETag можно скачать (download) отдельно (без самогО S3 объекта), чтобы сравнить значение с хэшем локального объекта
S3 Requester Pays
Что за фича?
От чего она защищает?
Фича, которая заставляет платить деньги за запросы на чтение/скачивание тот аккаунт, который делает эти чтение/скачивание
Защищает от анонимного доступа
S3 HMAC auth code
Зачем он нужен? С каким шифрованием связано?
Что он умеет делать? Что нет?
Что может помочь восстановить?
S3 SSE-C
подразумевает, что
- S3 НЕ хранит наш customer-key
- вместо этого, S3 хранит рандомный hash-based auth code
HMAC
- HMAC
создаётся на основе encryption ключа
HMAC
используется для последующей ВАЛИДАЦИИ запросов
HMAC НЕ может быть использован для шифрования / дешифрования ВМЕСТО encryption ключа
HMAC НЕ может быть использован для восстановления encryption ключа