Google Cloud:Cloud Storageの特定ファイルを読込したらSlack通知させる
はじめに
要望で上がっていた事を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に公式動画が上がっていますので確認してください。
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投げて確認するで実現できます。
Discussion