新しく更新されたAWSのIPレンジをAmazon SNSで通知してもらう
こんにちは、せーのです。今日は前回の記事に引き続きAWSのIPレンジのネタです。
AWSのIPレンジは公開されている
先日こちらの記事にも書きましたが、AWSにて使用されているIPレンジはJSON形式にて公開されています。IPレンジは定期的に更新、拡張されるので使用時にダイレクトにこのファイルにアクセスし、動的に取ってくるのがスマートかと思います。
しかし要件によっては毎回インターネット上にあるIPレンジにアクセスするのが困難なときもあります。例えばセキュリティ上インターネットへの口を閉じなければいけない場合や、逆に頻繁にIPレンジによるチェックが行われる場合はこのJSONへのリクエストが性能の低下やコスト増になる場合も充分考えられます。つまり、IPレンジは手元にとっておいて、変更した時のみ新しいものを取ってくる、という方法はとれないでしょうか。とれます。
SNSで通知してもらう
本日アップデートされた新しい機能ではSNSにてIPレンジのサブスクライブができるようになりました!こちらのARNを登録しておくだけでIPレンジの更新時には通知を受けられるようになります。
arn:aws:sns:us-east-1:806199016981:AmazonIpSpaceChanged
これでずっとコストをかけてポーリングしなくても更新時のみIPレンジを受け取ることができますね。
設定方法
SNSで設定する
設定方法はとても簡単です。まずマネージメントコンソールからSNSにいき、新しいTopicを作ります。IPレンジのアップデート通知はus-east-1、北米リージョンで行われるためSNSのリージョンも北米リージョンにて行います。
適当なトピック名をつけます。
トピックができたらsubscriptionを作ります。
subscriptionの[Topic ARN]に通知用のARN[arn:aws:sns:us-east-1:806199016981:AmazonIpSpaceChanged]を入れます。今回はEmailで通知してもらうことにします。
しばらくすると設定したメールアドレスに対して確認メッセージが飛んできますので確認用のリンクを押します。
これで設定が完了しました。IPが更新された時には通知が飛んできます。
Lambdaで設定する
通知を受けて手動でIPレンジを更新するのもいいですがここはLambdaでサクッと自動化するのがいいかと思います。Lambdaで新しいFunctionを設定します。
blueprintがいくつか表示されているのでSNSの通知用のblueprintを選択します。
対象のSNSを選択する場面です。ここでSNS Topicを選択せず、直接ARN[arn:aws:sns:us-east-1:806199016981:AmazonIpSpaceChanged]を入力して次にいきます。
あとはいつものLambdaの設定です。要件に合わせてDynamoDBを更新するでもS3のファイルを入れ替えるでも、自由にコーディングしましょう。
ちなみにSNSから飛んでくるフォーマットは以下のようになっています。
{ "create-time":"yyyy-mm-ddThh:mm:ss+00:00", "synctoken":"0123456789", "md5":"6a45316e8bc9463c9e926d5d37836d33", "url":"https://ip-ranges.amazonaws.com/ip-ranges.json" }
まとめ
いかがでしたでしょうか。IPレンジの更新もこうすることでだいぶAWSらしい処理になったのではないでしょうか。AWSのIPを使って何か処理をする場合は参考になさって下さい。