Notion の画像が本当に「パブリック」なのか検証してみた
きっかけ
きっかけは、チームの Slack に流れてきた以下のツイート
ちょっと気になったので、実際どうなのか調べてみました。
どういうことなのか?
最初、 View Original が何を指しているのかわからず手元で再現する方法がわかならかったが、いろいろやっているうちに、画像の右上の Original
のボタンから表示される拡大された(オリジナルサイズの)画像を表示する際に発行されるURLのことと判明しました。
(イメージに意味は無いので気にしないでください ... )
上記の Original
をクリックすると別タブでオリジナル画像が表示されます。
その URL を見ると、以下のようになっていてS3の署名付きURLであることが見た目で判別できます。
https://s3.us-west-2.amazonaws.com/secure.notion-static.com/2bc92da5-fd13-42e7-ab90-dda9140bcf0d/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAT73L2G45O3KS52Y5%2F20210610%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20210610T132124Z&X-Amz-Expires=86400&X-Amz-Signature=85d5c92d5ed71d2a985aa36babced2351365b9193c1bbc22b573d8ccec836fe5&X-Amz-SignedHeaders=host&response-content-disposition=filename%20%3D%22Untitled.png%22
で、これをクエリパラメタごとに分解してみると以下のようになり
https://s3.us-west-2.amazonaws.com/secure.notion-static.com/2bc92da5-fd13-42e7-ab90-dda9140bcf0d/Untitled.png
?X-Amz-Algorithm=AWS4-HMAC-SHA256
&X-Amz-Credential=AKIAT73L2G45O3KS52Y5%2F20210610%2Fus-west-2%2Fs3%2Faws4_request
&X-Amz-Date=20210610T132124Z
&X-Amz-Expires=86400
&X-Amz-Signature=85d5c92d5ed71d2a985aa36babced2351365b9193c1bbc22b573d8ccec836fe5
&X-Amz-SignedHeaders=host
&response-content-disposition=filename%20%3D%22Untitled.png%22
X-Amz-Credential
に aws4_request
があるあたりから署名バージョン4であることが特定でき、さらに
Authenticating Requests: Using Query Parameters (AWS Signature Version 4)
上記のページから
- 2021-06-10 13:21:24(UTC) (JST 22:21:24) に発行された
- 24時間後(86400秒) で有効期限が切れる
URLであることがわかりました。
ちなみに、このような署名付きURLで条件付きで一時的な共有を行うアーキテクチャは Private Distribution パターンと呼ばれていて、アクセス数の多いコンテンツやサイズの大きなコンテンツを多くのユーザーに配信するようなケースで、ボトルネックとなりやすい認証サーバ配置せずにアクセス制御を行う方法として用いられたりします。
と、いうわけで Notion の画像等を参照する際に発行される URL は、一般的に言われる誰でも勝手に参照できてしまうという意味での「パブリック」ではないことがわかりました。
ただ、Original の参照用として発行されたURLを部外者に共有してしまうと、24時間はそのURLから誰でもアクセスできてしまう。という点は注意が必要かもしれません。
(意図的に部外者に対してURLを共有する、という行為を行わなければ良いだけではありますが... )
さいごに
調査した限り Original 画像の URL の挙動についてセキュリティ的な穴というより、そのように意図されて設計されたものようで安心しましたが、その一方、URLの有効な期間が24時間というのはちょっと長いな... という感想でした。
参考
- Authenticating Requests: Using Query Parameters (AWS Signature Version 4) - Amazon Simple Storage Service
- CDP:Private Distributionパターン - AWS-CloudDesignPattern
追記
上記のように調べたあとで、この件について既に公式アカウントに問い合わせている Tweet と Blog 記事を見つけました。
Discussion