app-ads.txtが403でアドマネージャが読み込めない
結論
CloudFrontで日本以外のリクエストをブロックしているのが原因でした。
前提
Route 53 -> CloudFront -> S3
の構成になっており、app-ads.txtはS3のバケットに置いてるだけ
詳細
アド マネージャー 360を使用しているプロジェクトで、app-ads.txtを配置したのですが、管理画面上では一向に読み込みができてない状態でした。
↑の画像のとおり403エラーで弾かれている様子
ちなみにですが、app-ads.txtの設置場所をアド マネージャーに伝える方法は下記になります。
スマホアプリなのに、サーバにapp-ads.txtを設置するというのが最初違和感ありましたが、
Google PlayやApp Storeを経由するというので納得がいきました。
以下、原因を特定するために行なったことになります。
IP制限が影響している?
VPNを切ってアクセスしてもパソコンや、スマホからはアクセスできる様子
許可されていないHTTPのリクエストメソッドが使われている?
GETとHEADは許可されていましたが、curlでOPTIONSメソッドを使ってリクエストしてみると403になったので、もしやと思い、CloudFront上でとりあえず許可してみました。
そうすると、curlでリクエストすると400が返ってくるようになりましたが、アド マネージャー上では変化なし(403のまま)。
※400なのは、s3側の設定が足りない可能性が高い。
CloudFrontのログを見てみる
s3に出力されていることに気がついたので確認してみることに
そして、ログの中に、ClientGeoBlockedというメッセージを発見して、気づきました。
国ごとの許可リストは、CloudFrontの管理画面上では下記のように設定してました。
CloudFront -> ディストリビューション -> 任意のディストリビューション ->Security
※AWS WAF -> Web ACLsの方でもできると思いますが、今回はそちらではなかったです。
ただ、上記の設定は重要なサービス要件に絡むので、簡単には外せませんので、対応するとなるとWeb ACLsの方で細かく設定することになりそうです。
Discussion