[小ネタ]S3バケットに格納したプライベートな画像の署名付きURLをSlackに投稿するとプレビューが表示されるのか検証してみた

Slackに画像ファイルの署名付きURLを添付するとプレビューが表示される
2023.10.31

こんにちは、AWS事業本部@福岡オフィスのべこみん(@beco_minn)です。

今回は自分のための備忘録的な内容です。

S3バケット内の画像URLをSlackに投稿した場合、プレビューが表示されるかどうか、皆さんは知ってますか?

下記は6年前の記事ですが、現在でもSlackの設定でプレビュー表示を有効にしていれば画像URLを貼るだけでプレビューが表示されます。

ですが、これはS3バケットで対象オブジェクトにパブリックアクセス権限を付与した場合の話です。

では、プライベートな画像をプレビュー表示するにはどうすれば良いのでしょうか?

署名付きURL (presigned URL) とは

Amazon S3には 署名付きURL という機能があり、この機能により時間制限付きでプライベートな画像をURLを知っている人のみに共有することが可能です。

この機能は下記記事の通りマネジメントコンソール上からでも利用可能なため、今回はコンソール上から作成した署名付きURLで検証を行いました。

検証結果

今回の検証はブラウザ版とiOSアプリ版のSlackで行いました。

先に結果のまとめから書きます。検証の結果、下表の通りになりました。

下表の検証ではURL発行後、すぐにSlackにURLを添付しました。


設定した制限時間 制限時間内にプレビューが見えたか 制限時間内に貼ったURLのプレビューが制限時間後も見えたか SlackにURLを貼ってからプレビューが見えなくなるまでにかかった時間
1分 約30分
5分 約25分
10分 約20分
20分 約10分
30分 5分未満
40分 約20分
50分 約30分
1時間 5分未満
2時間(※) 5分未満

※ 今回は最大セッション時間が1時間のIAMロールから署名付きURLを発行したため、2時間に設定したものも画像リンクは1時間で失効しました。なので今回は1時間のパターンと同じ挙動をしたと捉えてください。


かなりチグハグな結果になってしまいました。

しかし、同じタイミングで確認した画像が同時にプレビュー閲覧が出来なくなっていたことから、下記のような挙動をしているのではないかと考えています。

  1. SlackにURLが貼られたタイミングでSlackがURL先にプレビュー用の画像を取得しに行く
  2. 定期的(30分おき?)にSlackがURL先にプレビュー用の画像を取得しに行く
  3. 2.のタイミングで署名付きURLに利用したIAM認証情報のセッションが切れている場合、もしくは署名付きURLの制限時間が過ぎている場合はプレビュー用の画像を取得出来ない

ちなみに、「プレビューが見えなくなる」とは下図のような状態を指します。

見えていた状態では下図

まとめ

Slackに画像の署名付きURLを貼った際のプレビューの挙動について検証してみました。

本記事がどなたかのお役に立てれば幸いです。

以上、べこみんでした。