CDNとしてCloudFrontを利用していて、閲覧制限をかけたいという場合、署名付きCookieを利用しているパターンが多いのではないでしょうか。
例えば、ログイン済みの特定のユーザーのみ閲覧できる画像があるケースです。
このような場合におけるメールに画像を添付する方法について共有します。
結論、署名付きURLを利用して解決しましたが、そこに至るまでの経緯も含めて紹介します。
署名付きCookie
最初に検討したのが署名付きCookieをそのまま利用する方法でした。しかし、通常のWebサイトと異なり、メーラーで必ずしもCookieを利用できない、できたとしてもメーラーごとに仕様が異なり対応は難しいと分かりました。
そこでCookieを利用せず、画像をURLで設定するのではなく、base64エンコーディングして埋め込む、添付した画像を参照するなどの方法も検討しました。
Laravelには以下のようにしてメールに画像を埋め込むことができたため利用してみました。
<img src="{{ $message->embed($pathToImage) }}">
しかし、埋め込むため、メールの容量が重くなってしまいました。複数の画像を埋め込む予定であったため、この方法も諦めました。
署名付きURL
署名付きURLを利用することで、署名付きCookieで閲覧制限をかけた画像をメールに添付することができました。
AWSには以下のような記述がありました。これに早く気づいていれば良かったです。
ビューワーのアクセスを制限する
ビューワーのアクセスを制限する場合、ビューワーがコンテンツにアクセスするには
CloudFront 署名付き URL または署名付き cookie を使用する必要があります。
ビヘイビアの編集からビューワーの設定をしている箇所に記載がありました。
AWSがCookieを利用できない場合を考慮してくれていました。
AWSのドキュメントにも使い分けの説明がありました。今回のようにメールに添付する場合は2つ目のケースですね。
署名付き URL を使用するか、署名付き Cookie を使用するかを決定する
次のような場合は、署名付き URL を使用します。
・個別のファイル (アプリケーションのインストールダウンロード) へのアクセスを制限する場合。
・ユーザーが Cookie をサポートしていないクライアント (カスタム HTTP クライアントなど) を使用している場合。