Как настроить Центр оповещений Google Workspace для публикации оповещений в теме PubSub?

Я создаю систему уведомлений, которая будет уведомлять сотрудников, находящихся в режиме ожидания, когда они предпринимают действия, запускающие правило DLP.

Идеальный поток, который я пытаюсь получить, это:

Сотрудник выполняет действие > Срабатывает правило > Оповещение публикуется в теме PubSub > Запускает облачную функцию, которая отображает временное сообщение и отправляет его пользователю.

Точка, в которой я застрял, заключается в том, что центр предупреждений API публикует предупреждение в теме PubSub. Я делал что-то подобное в прошлом с API Gmail, чтобы публиковать в теме, когда конкретная учетная запись получила электронное письмо. И был запрос на настройку аккаунта для публикации в тему.

Я просмотрел документацию по API Центра оповещений и не нашел запроса на просмотр или чего-то подобного.

Есть ли способ добиться этого? Или это просто невозможно?

Я искал в справочнике по API Центра оповещений Google и в консоли Центра оповещений любые параметры для настройки публикации в теме pubsub или веб-перехватчике.

2 ответа

Через пару часов проб и ошибок я нашел решение этой проблемы.

Мы должны обновить настройки, создав и updateSetting, и отправить объект настроек в теле.

Вот некоторый код Python, чтобы сделать это, используя учетную запись службы с делегированием на уровне домена:

      from google.oauth2 import service_account
from googleapiclient.discovery import build
import json

def main():

    # Authenticate the service account
    scopes = ['https://www.googleapis.com/auth/apps.alerts']
    admin_to_impersonate = '******'
    credentials = service_account.Credentials.from_service_account_file(
        'client_secrets.json', scopes=scopes, subject=admin_to_impersonate
        )
    
    # Build the service
    service = build('alertcenter', 'v1beta1', credentials=credentials)

    settings = {
        'notifications': [
            {
                'cloudPubsubTopic': {
                    'topicName': '<YOUR TOPIC NAME>',
                    'payloadFormat': 'JSON'
                }
            }
        ]
    }

    # Execute a updateSetting request
    response = service.v1beta1().updateSettings(body=settings).execute()
    print(response)

if __name__ == '__main__':
    main()

Спасибо, Андрей, твой метод мне помог.

Для тех, кто хочет развернуть облачные функции или где-либо еще, где вызывается ключ учетной записи службы ('client_secrets.json') недостаточно безопасно, вот как я это сделал:

Сначала обратитесь к https://github.com/GoogleCloudPlatform/professional-services/blob/e79c75a14eb20640afbcab3ee110eccdd8378720/examples/gce-to-adminsdk/README.md и выполните все действия . Не обращайте внимания на информацию о правах чтения группы администраторов, вместо этого создайте собственную роль администратора с полным доступом к Центру оповещений и назначьте ее фиктивной учетной записи пользователя.

Убедитесь, что в вашей подсети VPC включен частный доступ Google (или, по крайней мере, имеется какое-либо подключение к конечной точке Центра оповещений). Я разрешил внутренний трафик только в облачной функции и протестировал его с помощью вычислительного экземпляра в той же подсети, чтобы свернуть его.

наконец, по какой-то причине,from googleapiclient.discovery import buildвызвало ошибки развертывания в Cloud Functions. Вы можете использоватьfrom googleapiclient import discoveryи изменитьbuild()кdiscovery.build().