🕵️‍♂️

Google Cloud:Cloud Storageの特定ファイルを読込したらSlack通知させる

2022/07/10に公開

はじめに

要望で上がっていた事をAWSでできそうだったのですが、実際にやってみると結構ハマってしまいました。
AWSで実現する方法は結構面倒だったのですが、Google Cloudで行なうと結構楽に実現できたので記事にしました。

要望

どうしても見られなくないファイルがあるけど、IAMで権限を削除すると別オペレーションできない。
そのため、バケットにあるファイル読込したら、通知して注意をしたい。

実現方法

Cloud Storage バケット作成

Cloud Storage(バケット)を作成してオブジェクトファイルを置きます。
コンソール → Cloud Storageにログインし、バケットを作成します。

Monitoring API設定

利用するMonitoring APIですが、デフォルトOFFとなっています。
IAMと管理 → 監査ログ → Google Cloud Storage → 管理読み取り、データ読み取り、データ書き込みをチェック

Logging Explorerに移動して、Queryを投げて出てほしいログが出てくるか確認します

今回のケースは[bucketname = noda-test-2022-07-09]、[オブジェクトをワイルドカード]で指定

proto_Payload.serviceName=~"projects/_/buckets/noda-test-2022-07-09/object/*.*"
protoPayload.methodName:"storage.object.get"

Alert Slack通知設定

アラートとSlackの連携を行います
モニタリング → インテグレーションから通知先(今回はSlack)を選択

Google CloudとSlackを連携させるかを聞いてくるので[Allow]を選択

[Channel Configuration]でチャンネルを指定して[テスト通知]できる事を確認

成功するとこのような形で通知が行きます

アラート設定

実際にアラートを定義し、事前に連携したSlackに通知が行くようにします。
モニタリング → アラートを選択します
Choose logs to include in the alertはLogging Explorerで確認したQueryを入力

今回の例だと、5分おきにアラート確認します

Slack通知テスト

読取りイベントを行いたいため、CloudShellにてファイルをダウンロード

しばらく経ちますとSlackに通知されるようになりました!

まとめ

今回は読み取りイベントとなりますが、書き込みイベントをトリガーに処理を走らせるのをさっくりできるのは便利ですね。
AWSでも書き込みイベントは[S3イベント通知]で定義されているので作成しやすいですが、今回のように定義されていないイベントですと後述のとおり結構めんどくさい方法となりハマりポイントとなりますので注意してください。

より詳しく確認されたい方へ

アラートの部分は、英語となりますがYoutubeに公式動画が上がっていますので確認してください。
https://youtu.be/4RgJjx4IxMs

Google CloudはYoutubeに動画が結構上がっているので細かいニュアウンスを確認したいときは動画さがしちゃいますー。


余談

AWSでの解決法

これが、AWSでやると結構めんどくさい。。。

めんどくさいポイント1

読取イベントの検知はS3イベント通知で何とかなりそうですが、実は読込イベントの発行には対応していません。

そのため、S3サーバーログもしくはCloudTrail S3オブジェクトレベルログを有効化させると読取イベント(getObject)が取得できます。
後は、ゴミデータをどうするか?というのはあるにせよ。何とかなりそうです。

めんどくさいポイント2

Slack通知を行なう際にSNS Topicを経由しないといけない
CloudTrail S3オブジェクトレベルログはSNS連携できますので、ひと手間省けます

Slack通知

AWSの場合、Slackに通知を行なうことができるのは、Chatbot、Lamdba、EventBridgeとなります。他のAWSサービスを経由する場合、そのサービスの前にSNS Topicを経由させるケースが多いです。
今回の場合は、CloudTrail S3オブジェクトレベルログ → SNS Topic → [Chatbot] or [Lambda] or [EventBridge]

ログ解析をする

[S3サーバーログ] or [CloudTrail S3オブジェクトレベルログ] → S3 → AthnaでQuery投げて確認するで実現できます。

https://aws.amazon.com/jp/premiumsupport/knowledge-center/analyze-logs-athena/

Discussion