でこてっくろぐ ねお

UbieのSRE。でこらいふろぐ(http://dekolife.hatenablog.com/)の姉妹版。デコテックログ(deko tech log)である

AWSのIPリストを取得してCloudFormationで使えるセキュリティグループの定義を出力する(golang編)

やりたいこと

  • 全世界のAWSのEC2からだけ許可するsecurity groupを作りたいとかそんな感じのやつ
    • それにどれくらいの嬉しさがあるかと言うと、まぁ人それぞれだよね
  • 以下のテンプレート部分を少し変えると、AWS WAFの定義で全世界のAWSのEC2からのアクセスを拒否するとかそういうのにも使えるよね

方法

以下のスクリプト使うとSecurity Groupの定義が一個ペロッと出力されるので後は勝手に使うといいと思います。

最大の問題は、このIPレンジは当然そのうち変わるので、本来はJSONファイルの変更を検知してlambdaを動かして最新の情報に追随させるみたいなことをやる必要があるんですが、まぁ何か雑にやりたい時はこういうのでもいいんじゃないですかね。

ちゃんとやりたい場合は以下クラスメソッドさんのエントリ参照

dev.classmethod.jp

プログラム

GitHub - bhendo/awsipranges: A simple Golang library for parsing and searching https://ip-ranges.amazonaws.com/ip-ranges.json 使わせていただいてます。 github.com/bhendo/awsiprangesインストールして以下を同じディレクトリにおいてボンっと叩くといいと思います。あまりにも単純。 glideとか使いたい人は使ってくださいね。 - package: github.com/bhendo/awsipranges みたいな感じで。

“EC2” の部分を色々変えれば、CLOUDFRONTのIPだけ許可するセキュリティグループとかそういうのもできますね。 tmpl内の IpProtocol とか FromPort, ToPort とかも好きな感じに変えてね。 めでたしめでたし。

セキュリティグループ内のIPの数は制限があるので、制限にあたったら制限緩和するなり、複数のセキュリティグループに分割するなりいい感じにしてみてね。このテンプレートなら簡単にできるはず。

gist.github.com

雑感

上記に書いてある通り、ちゃんとしたい場合はlambdaでいい感じにやるべきだし、そもそもAWSのIP範囲だけに絞って許可する、という設定にどれほどの意味があるのか、というのは色々あるでしょうが、まぁ雑にこういうことしたい場合もありますよね。 こういうことやってると、CloudFormationをそのまま使うのは間違いなのではないか、という気分にはなる。

以下のようなブログも書いたことですし、CloudFormation周りのことを色々ブログに書いていきたい。 dekotech.dekokun.info