作者:MeshCloud脉时云公有云架构师付光
一、背景
获取GCS中对象的事件信息,目前官方文档中给出的方法分别是:
- 通过Pub/Sub消息队列发送事件信息
- 通过Cloud Functions获取并处理事件信息
- 通过审计日志中的数据访问日志(默认关闭)分析GCS中对象的事件信息
- 通过GCS使用情况日志分析对象的事件信息
- 通过自定义WebHook接收GCS的事件信息
二、各类方法的优缺点
- 使用Pub/Sub消息队列
保证消息可达,不丢失
对消息有缓存能力,不会对处理程序造成冲击
Pub/Sub按量收费(每月前50G免费)
- 使用Cloud Functions
底层使用的是Pub/Sub,优缺点同上
Cloud Functions使用事件触发执行,可以更好、及时的完成消息处理
- 使用审计日志
审计日志包含管理员活动审计日志和数据访问审计日志
管理员活动审计日志默认开启,数据访问审计日志默认关闭
管理员活动审计日志包含修改 Cloud 项目、存储桶或对象的配置或元数据的 ADMIN_WRITE 操作
数据访问审计日志包含修改对象或读取 Cloud 项目、存储桶或对象的操作
数据访问审计日志包含ADMIN_READ、DATA_READ、DATA_WRITE三个子类
详细信息请看:
https://cloud.google.com/storage/docs/audit-logging#operations
- 通过使用情况日志
使用情况日志每小时创建一次
主要用于记录访问的详细信息,常用于静态网站的访问记录
- 使用自定义WebHook
自定义的WebHook无法保证其可靠性、可用性
自定义的WebHook没有额外的费用
三、配置汇总
- 使用Pub/Sub消息队列
gsutil notification create -t TOPIC_NAME -f json gs://BUCKET_NAME
参考:
https://cloud.google.com/storage/docs/reporting-changes
- 使用Cloud Functions
参考:
https://cloud.google.com/functions/docs/tutorials/storage-1st-gen#functions-prepare-environment-python
参考:
https://cloud.google.com/functions/docs/tutorials/storage
- 使用审计日志
参考:
https://cloud.google.com/storage/docs/audit-logging
- 通过使用情况日志
gsutil mb gs://example-logs-bucket
gsutil iam ch group:cloud-storage-analytics@google.com:legacyBucketWriter gs://example-logs-bucket
gsutil logging set on -b gs://example-logs-bucket [-o log_object_prefix ] gs://example-bucket
gsutil logging get gs://example-bucket
参考:
https://cloud.google.com/storage/docs/access-logs
- 使用自定义WebHook
# 配置语法
gsutil notification watchbucket [-i ChannelId] [-t ClientToken] ApplicationUrl gs://BucketName
# 配置实例
gsutil notification watchbucket -i my-channel-id -t my-client-token https://example.com/notify gs://example-bucket
参考:
https://cloud.google.com/storage/docs/object-change-notification