Вы правы - распространять ключ учетной записи службы небезопасно. Даже с минимальной Pub/Sub Publisher
ролью это позволит любому, у кого есть копия ключа, ввести столько данных, сколько им нужно, в Pubsub (выставляя вам счет), и в зависимости от того, как ваши подписчики используютпредоставленные таким образом данные могут открыть поверхность атаки на стороне ваших подписчиков. Кроме того, вы хотели бы планировать, что делать, если вам нужно повернуть ключ. Я не рекомендую вам использовать этот подход.
Учитывая, что вы не включаете ключ в само приложение, вам остается найти способ сделать что-то в среде управляемого сервера, которая также имеет доступ кучетные данные учетной записи службы.
Одним из вариантов является то, что вы можете создать Функция вызываемого облака для выполнения операции Pubsub. Облачная функция надежно размещается на серверах Google и может без проблем работать в качестве учетной записи службы. Затем он будет вызываться из вашего приложения.
Внутри функции вам нужно будет подтвердить, что запрос разрешен (так как функция все еще может быть вызвана кем-либо - они фактически общедоступны), а затемвыполните операцию Pubsub. Валидация может включать проверку аутентификации пользователя с помощью приложения, проверку правильности формы приложения и даже, возможно, реализацию какой-либо формы ограничения скорости. Скорее всего, это очень легкая функция на практике.
Даже при самой минимальной проверке запросов это все еще ограничивает вызывающих абонентов делать именно то, для чего была написана функция, в отличие от полного доступа к службе. учетная запись, которая сводит к минимуму поверхность атаки до того, чем в принципе может быть любое взаимодействие с кодом на веб-сервере, и позволяет проверить правильность ввода перед его внедрением в Pubsub - таким образом, защищая всех последующих пользователей.