新しく更新されたAWSのIPレンジをAmazon SNSで通知してもらう

新しく更新されたAWSのIPレンジをAmazon SNSで通知してもらう

Clock Icon2015.09.01

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、せーのです。今日は前回の記事に引き続き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のリージョンも北米リージョンにて行います。

ip_subscription1

適当なトピック名をつけます。

ip_subscription2

トピックができたらsubscriptionを作ります。

ip_subscription3

subscriptionの[Topic ARN]に通知用のARN[arn:aws:sns:us-east-1:806199016981:AmazonIpSpaceChanged]を入れます。今回はEmailで通知してもらうことにします。

ip_subscription4

しばらくすると設定したメールアドレスに対して確認メッセージが飛んできますので確認用のリンクを押します。

ip_subscription5

これで設定が完了しました。IPが更新された時には通知が飛んできます。

ip_subscription6

Lambdaで設定する

通知を受けて手動でIPレンジを更新するのもいいですがここはLambdaでサクッと自動化するのがいいかと思います。Lambdaで新しいFunctionを設定します。

ip_subscription7

blueprintがいくつか表示されているのでSNSの通知用のblueprintを選択します。

ip_subscription8

対象のSNSを選択する場面です。ここでSNS Topicを選択せず、直接ARN[arn:aws:sns:us-east-1:806199016981:AmazonIpSpaceChanged]を入力して次にいきます

ip_subscription9

あとはいつものLambdaの設定です。要件に合わせてDynamoDBを更新するでもS3のファイルを入れ替えるでも、自由にコーディングしましょう。

ip_subscription10

ちなみに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を使って何か処理をする場合は参考になさって下さい。

参考リンク

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.