あじのひらきかた

プログラム書いたり子育てしたり

slackのファイル削除バッチが権限問題で動作しなかった件

ちょいと仕事で件名のような問題がありまして。

解決したので一連の流れを記録しておく!

 

事の発端

slackはチャットツールとして会社で昨年から使い始めたんです。

ほんでファイルアップロードが出来るんですが、無料制限枠は5GBまでなので

あっという間に容量オーバーしちゃんですよ。

100人くらいで使ってるんでそれはもうあっちゅう間に。

 

そんな訳でファイルを自動で削除するバッチを週次で実行してるんですが、

どうも最近動いていないようだ。半年前くらいには動いてたらしい。

ほんで前任者が多忙なため私が調査を始めました。

 

先に結論(原因と対応

削除APIを実行するにはTokenが必要な訳ですが、権限が足りなかったようです。

「Token発行した人=一般権限」の場合

 一般より上の権限のユーザがアップしたファイルは消せない

 同じ一般権限ユーザでも他人のアップしたファイルは消せない。

という事でした!

そんな訳で管理者権限でToken発行し、書き換える事でサクッとファイル削除が出来ました。春頃改修した際にToken書き換えた時に権限が変わっちゃったのね。

単純な理由でした〜。

 

調査の流れ

とりあえずバッチが動いているかを確認しました。

AWSのCloudWatchでスケジューリングしているのでログを見てみる。

ふむ、スケジュール通り動いている。

 

次にいつのファイルが残っているか確認しました。

およよ?!去年の12月頃のファイルがあるやん!2か月前までのファイルを削除してるはずが消えてないやん!

 

つまりバッチは動いているけど、ファイルは消せていない。

ソースにバグ?いやいやロジック自体に変更は加えてないらしい。

※一部パラメータを変えてた。

 

CloudWatchを再度見てみると。。。エラー起きてるううううう。

タイムアウトエラーーーーーーー。

 

テスト環境で実行し、削除APIの戻り値をチェック!

slackAPIの詳細はここで確認→files.delete method | Slack

cant_delete_file

え〜と。ふむふむ。

Authenticated user does not have permission to delete this file.

(認証されたユーザーにはこのファイルを削除する権限がありません)

Tokenだね!!!!

 

ファイル取得→権限が足りずに削除出来ない→ファイル取得(同じファイル)。。

タイムアウトエラー。

初歩的いいいいいいいい!!

 

 

終わりに

CloudWatch始めて使ったので全然見方がわからなくてね。。

もっと早くエラーに気付けたら良かったかな。

自分でもAWSアカウント作ったのでいろいろ実験してみよう。そうしよう。

1年無料ってすごいよね!太っ腹!

aws.amazon.com

今回の調査、かなり勉強になりました。