Бакет в S3 — не просто папка для файлов, а ресурс, на котором хранилище принимает решение о доступе к объектам. Пока доступ контролирует только nginx или собственный прокси, у любого обладателя действующего ключа остаётся прямой путь к S3 endpoint. Достаточно указать другой --endpoint-url в aws-cli. Прокси не увидит запрос, а хранилище вернёт 200, если на самом бакете нет правил, способных его остановить.Меня зовут Стас Погоржельский, я технологический евангелист VK Cloud. В статье разберём, как вернуть авторизацию туда, где лежат данные: выдать ключи минимальной области — на бакет или префикс — и дополнить их Bucket Access Policy. Посмотрим, что из шести функций прокси действительно переезжает в хранилище, что переносится лишь частично, а что остаётся снаружи: бизнес-логика допуска, лимиты на конкретного принципала, аудит с бизнес-контекстом и гарантированный запрет нешифрованного трафика.Дальше разложим решение endpoint на политику бакета, область действия ключа и ACL; отделим явный Deny от запрета по умолчанию, проверим, как режим OwnershipControls может выдать доступ в обход политики. На примере AWS-политики покажем, почему знакомый JSON нельзя переносить без ревью: у VK Object Storage ограничен набор Condition, а aws:SecureTransport и s3:prefix не работают. Затем соберём политику четырьмя итерациями — Resource, Principal, aws:SourceIp и явный Deny — и подтвердим результат матрицей из 16 запросов с ожидаемыми 200, 403 и открытыми вопросами, которые надо снять на своём стенде.В конце настроим наблюдение по Cloud Audit, разберём, какие доказательства переноса пригодятся для ИБ и аудита, и составим чек-лист для переезда между AWS S3, Ceph, MinIO, Yandex Object Storage и VK Object Storage. Главный критерий успеха здесь не сохранённый JSON и не работающий разрешённый запрос, а отказ там, где доступ должен быть закрыт. Читать далее