やりたいこと
- S3にある公開データに対するアクセスを制限し、Botなどによる大量アクセスをはじきたい
方法
今回は、CloudFrontとCloudFront関数を利用して作成する。
ざっくり制御なのでもっと良い制御方法があるかも、、?
S3のアクセスをCloudFrontからのみに制御する方法は
ここら辺の記事を参考にやってみてください。
本題ではないので割愛します、、、
アクセス制御する
ここまでできている人はほとんど読む必要がないかもですが、CloudFrontの機能にある関数を利用します。
関数を作りましょう。
function handler(event) {
var request = event.request;
var headers = request.headers;
// Refererをチェック
var referer = headers.referer ? headers.referer.value : '';
var pattern = /^https?:\/\/[^\/]*\.hoge\.com\//;
if (!pattern.test(referer)) {
return {
statusCode: 403,
statusDescription: 'Forbidden'
};
}
return request;
}
ざっくりrefererヘッダが自分のサイトじゃないとだめと、設定しました。
他にもX-Custom-Authヘッダなどを作成して適当なアクセスをはじくでもよいかもです。
注意としては、狙いをつけられると簡単にアクセスされるのであくまでも公開情報に無差別にはアクセスできないように保険を掛ける程度にしてください。
秘密情報は簡単に漏れるので注意です。
まとめ
本当にアクセスを制御したい場合は、認証認可のシステムを組み込む必要があるので結構面倒かも、、?