#google-cloud-platform #google-cloud-iot
#google-облачная платформа #iot #esp32
Вопрос:
Мне нужно, чтобы система была безопасной.
Я устал кодировать изображение с помощью base64 и отправлять строку через MQTT в Iot Core. Затем декодируйте строку с помощью облачной функции и, наконец, сохраните декодированное изображение в облачном хранилище Google. Проблема заключается в ограниченном размере сообщения в MQTT.
Использование облачной функции, а затем хранение в облачном хранилище Google небезопасно, любой может попасть по этому URL-адресу, и я потеряю контроль над всей связью ESP32CAM.
Я что-то упускаю? существует ли действительно безопасный способ отправки файлов в облачное хранилище Google из в IoT Core?
Спасибо
Ответ №1:
IoT Core не следует использовать для передачи больших больших двоичных объектов.
Тем не менее, вы можете воспользоваться преимуществами безопасного соединения между IoT Core и устройством для отправки учетных данных на устройство для безопасного доступа к GCS.
Создайте учетную запись службы с доступом только на запись к вашей корзине GCS. Передайте ключ для этой учетной записи службы на устройство через IoT Core (например, через изменение конфигурации) Затем устройство может использовать этот ключ для безопасного подключения к GCS и загрузки изображения.
В зависимости от ваших предпочтений и конкретного варианта использования вы можете поворачивать клавиши для доступа к GCS, когда захотите, или использовать разрешения настолько подробно, насколько захотите (одна клавиша для всех устройств, одна клавиша для каждого устройства, …)
Ответ №2:
Способ, которым я это сделал, состоит в том, чтобы разбить изображение на 256 Тыс. пакетов (ну, 255 тыс. с заголовком в 8 байт, который представляет собой int, который представляет порядок, в котором он должен быть повторно собран на другом конце, поскольку Pub / Sub не гарантирует упорядочение).).
ответ @ rbarbero — еще один хороший ответ, в котором вы отправляете учетные записи для прямого общения с GCS.
Другой способ сделать это — заставить устройство взаимодействовать с чем-то локальным, более мощным, у которого есть учетные данные этой службы непосредственно в GCS, и просто полностью обойти IoT Core.
Ответ №3:
Нет необходимости кодировать его в base64, а размер буфера pubsub MQTT можно изменять.
Я использую:
#include <PubSubClient.h>
...
void setup() {
...
boolean res = mqttClient.setBufferSize(50*1024); // ok for 640*480
if (res) Serial.println("Buffer resized."); else Serial.println("Buffer resizing failed");
...
}
void sendPic() {
...
if (fb->len) // send only images with size >0
if (mqttClient.beginPublish("test_loc/esp32-cam/pic_ms", fb->len sizeof(long), false))
{
// send image data millis()
unsigned long m = millis();
int noBytes;
noBytes = mqttClient.write(fb->buf, fb->len);
noBytes = mqttClient.write((byte *) amp;m, sizeof(long));
if (!mqttClient.endPublish())
{
// error!
Serial.println("nError sending data.");
}
}
...
}
Здесь я отправляю изображение размером 640 * 480 и добавляю текущее значение millis () в конце, чтобы сшить его обратно в видео через ffmpeg.