Как настроить Центр оповещений 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()
.