Общая информация
Благодаря вебхукам на платформе LinxCloud пользователь будет всегда оповещен об определенных событиях в бакете. Для их подключения нужно добавить конфигурацию уведомлений, которая содержит события, по которым необходимо отсылать запросы на клиентский сервис, и сам адрес клиентского сервиса. Эта конфигурация сохраняется в меню Webhooks, которое привязано к бакету.
Примечание
Уведомления о событиях LinxCloud S3 доставляются за секунды, но порой это может занять минуту или больше.
Список уведомлений
Сейчас Linx S3 может публиковать уведомления о следующих событиях:
- События создания новых объектов — Linx S3 поддерживает несколько API для создания объектов. Можно запросить уведомление, когда используется только конкретный API (например, s3:ObjectCreated:Put), или можно использовать подстановочный знак (например, s3:ObjectCreated:*) для запроса уведомления при создании объекта независимо от используемого API.
- События удаления объектов — поддержка удаление объектов. Можно запросить уведомление, когда объект удален, используя s3:ObjectRemoved:Delete тип события. Также можно использовать подстановочный знак s3:ObjectRemoved:* для запроса уведомления при каждом удалении объекта.
Включение уведомления
Включение уведомлений — оперция, сохраняющая информацию о конфигурации уведомлений. Они представляют собой
- префикс и/или суффикс файлов, для которых будут отправляться события
- метод запроса s3
- урл, по которому отправляется событие
Включить уведомления можно с панели управления LinxCloud или при помощи API.
Использование панели управления LinxCloud
Чтобы создать уведомление с помощью панели LinxCloud нужно нажать на кнопку «Добавить» в разделе «Wehooks» выбранного бакета:
В появившемся окне следует ввести требуемые параметры и подтвердить кнопкой «Добавить hook»:
Программное использование AWS SDK
На внутреннем уровне и панель LinxCloud, и SDK вызывают S3 REST API для управления подресурсами уведомлений, связанных с бакетом.
S3 сохраняет конфигурацию уведомлений в виде XML на подресурсах уведомлений, связанных с бакетом.
Уведомления автоматически не включены ни для каких событий, т.е. изначально подресурс уведомления хранит пустую конфигурацию.
<NotificationConfiguration xmlns="https://<имя_бакета>.hb.bizmrg.com/image/01.jpg/">
</NotificationConfiguration>
Для включения уведомления о событиях определенных типов нужно заменить XML на соответствующую конфигурацию, которая определяет типы событий, которые должен публиковать LinxCloud S3, и место назначения, в котором необходимо публиковать события.
Верификация указанного в конфигурации урла
При включении уведомлений Hotbox верифицирует то, что адрес, на который будут уходить события, действительно ваш, происходит это так:
- Вы отправляете запрос на создание определенной конфигурации Webhook в Hotbox
- Hotbox отправит по указанному в конфигурации адресу запрос для верификации с указанием времени, временного токена и тд. И будет ждать от вашего сервиса посчитанную на основе переданных параметров сигнатуру. Конфигурация Webhook будет сохранена только, если сигнатура верная.
Этот запрос будет выглядеть так:
POST / HTTP/1.1
Host: ...
X-Amz-Sns-Message-Type: SubscriptionConfirmation
{"Timestamp":"2021-04-22T16:48:37+03:00","Type":"SubscriptionConfirmation","Message":"You have chosen to subscribe to the topic $topic\\nTo confirm the subscription you need to response with calculated signature","TopicArn":"mcs00000000|test|s3:ObjectCreated:Put","SignatureVersion":1,"Token":"9fbYYWYGANVGeQ3s9VKxrYgynwqu65PwQ6zr7bVvU4WKXf2W"}
Ответ с посчитанной сигнатурой:
{"signature":"98f5f6db741e0e292809bf95ea6c0302fe98b68530e5281bc741269f06270f49"}
Как считается сигнатура:
signature = HMAC-SHA256-HEX(Url, HMAC-SHA256(TopicArn, HMAC-SHA256(Time, Token)))