AWSのRoute53を使ってHTTP(S)によるヘルスチェックする際に、対象ホストがBasic認証とかIP制限してる場合はヘルスチェッカーのIPだけ素通しさせる必要があります。
ヘルスチェックは多数のリージョンに存在するヘルスチェッカーからリクエストが飛んできます。
そのIPを一括で取得する方法について。
ヘルスチェッカーのIP取得については下記ページに記載されています。
Amazon Route 53 サーバーの IP アドレス範囲 - Amazon Route 53
Amazon Route 53 ネームサーバーとヘルスチェッカーで使用する IP アドレス範囲を取得する方法を説明します。
リンクを辿るとAWS関連のIP範囲の一覧が下記URLのJSONで取得できます。
https://ip-ranges.amazonaws.com/ip-ranges.json
中身はこんな感じのオブジェクトが配列で入っています。
{
"ip_prefix": "15.177.0.0/18",
"region": "GLOBAL",
"service": "ROUTE53_HEALTHCHECKS",
"network_border_group": "GLOBAL"
},
"service": "ROUTE53_HEALTHCHECKS"
のオブジェクトにあるip_prefix
だけを収集する必要があります。
下記のjqコマンドで一発抽出できます。
$ curl https://ip-ranges.amazonaws.com/ip-ranges.json --silent | jq -r '.prefixes[] | sele
ct(.service == "ROUTE53_HEALTHCHECKS")'.ip_prefix
15.177.0.0/18
52.80.197.0/25
52.80.197.128/25
52.80.198.0/25
52.83.34.128/25
52.83.35.0/25
52.83.35.128/25
54.248.220.0/26
54.250.253.192/26
54.251.31.128/26
54.255.254.192/26
54.252.254.192/26
54.252.79.128/26
176.34.159.192/26
54.228.16.0/26
177.71.207.128/26
54.232.40.64/26
107.23.255.0/26
54.243.31.192/26
54.183.255.128/26
54.241.32.64/26
54.244.52.192/26
54.245.168.0/26
CIDRの表記になっていますが、nginxなどではallow
ディレクティブでそのまま使うことができます。
なお、IPv6が取得したい場合はip_prefix
の代わりにipv6_prefix
を抽出すればいいようです。
以上。
コメント