メルカリでCDNにキャッシュされるべきでないページがキャッシュされることにより個人情報の流出が発生してしまうインシデントがありました
自分は動的コンテンツをCDNで配信することにあまり積極的ではない立場だったのですが流出への反応を見るとCDNを利用しているサービスはかなり増えてきているようです
個人情報やユーザーのプライベートデータを決して流出しないようにしつつCDNを利用する方法を考えてみました
CDN利用のメリット
このふたつ
- 経路が最適化されレイテンシが小さくなる
- DDoS対策となる
キャッシュされないようにする方法
Twitterで動的コンテンツもCDN通すの当たり前でしょーと言ってる人にリプしてきいてみました
- CDNとレスポンスヘッダで二重にキャッシュを無効化する
- CDNを含めた環境でキャッシュ専用のテストケースを作成しテストが必要なすべてのactionについて不正にキャッシュ専用されていないことをチェックする
- 当然actionの追加があった場合には必ずキャッシュのテストも追加する
なるほど、これくらいしっかりとした対策をたてれば安全に使えそうですね
CDNの選定
設定を細かくできないものはよくなさそうです
ヘッダでしかコントロールできない Google Cloud CDN はヘッダをミスすると即死です
また直感的でない振る舞いをするCDNも避けた方がよさそうです
Fastlyでは Cache-Control: no-store, no-cache がキャッシュ対象となってしまい事故のにおいがします
https://community.fastly.com/t/fastly-ttl/882
CDNを動的コンテンツに使うべきか
用途や傾向ごとに
使うべき
- アクセスが世界中から来る
- 日本にサーバーがあって日本からのアクセスが99%とかだと経路最適化効果は薄いでしょう
- 漏れて困るデータがない
- 失敗しても失うものはありません、ガンガンいけます
- DDoSが来ておりそれがCDNで防げるものである
- 最近はAWSにデフォルトで対策がされていたりして、それで防げているものもありそうです
- 逆にCDNを導入してもダメなものもあるのではないでしょうか
- 今攻撃が来ていてそれがCDNで防げるなら導入すればいいと思いますがCDN入れれば完璧というものではない
- サービス全体について充分な管理が行き届いており CDNの設定についてもサービスとともに管理できる体制が整っている
- 安全に運用するには適切なコストをかける必要がありそうです
使うべきでない
- センシティブなデータがある
- ユーザーとサーバー間のレイテンシが充分に短い
- DDoSが来ていない
- サービスが巨大で全体をコントロールすることがむずかしい
- サービスが放置されがち
- 安全にキャッシュされないようにしながら導入するコストが効果に見合わない
まとめ
最初は否定的だったのですが、しかるべき手間をかければ安全に運用できそうですね
5年後の担当者が地雷を踏むといった事にならないようにしつつやっていきましょう!