まえがき

cloudpackサポートです。
AWS WAF にて、国判定ができないクライアントIPがあったため原因について共有します。

きっかけ

一部抜粋して記載しますが、下記のように AWS WAF ログにて、国コードが「-」となる事象がありました。

"httpRequest": {
"clientIp": "xxx.xxx.xxx.xxx",
"country": "-", ←ここです
"headers": [
{
"name": "accept",
"value": "application/json, text/javascript, */*"
}
],
"httpVersion": "HTTP/2.0",
"httpMethod": "GET"
}

AWS WAF ログで、国コードがブランクとなるケースがあるのか調べたところ、公式ドキュメント [1] には下記記載がありました。

リクエストの送信国。AWS WAF が発信元の国を特定できない場合は、このフィールドを [-] に設定します。

[1] AWS WAF – ログフィールド
https://docs.aws.amazon.com/ja_jp/waf/latest/developerguide/logging-fields.html

しかしながら、whois情報ではクライアントIPアドレスの国は特定できている状況でした。
以上のことから発信元の国を特定できない原因について調査をしてみました。

結論

IPアドレスは、whoisの結果から判定しているものではなかったです。
GeoIP データベースを使用して、ユーザーがいる場所を判別することで、現在どの国で利用されているかを判定しているようです。
したがって、AWS WAF の GeoIP データベースにデータが存在しない場合に、ログ上では「-」という状態になります。

また、AWSでは国判定が行えるように努めているものの、現在そのIPアドレスがどの国に属するものか判定できない場合もあるようです。
国判定の精度については、99.8% [2] となるため判定できない場合があると理解しましょう。

24.GeoIP データベースはどの程度正確ですか?
IP アドレスと国ルックアップデータベースの対応精度はリージョンによって異なります。最近のテストによると、IP アドレスと国の対応の全体的精度は 99.8% です。

[2] よくある質問 – AWS WAF | AWS
https://aws.amazon.com/jp/waf/faq/