ようへいの日々精進XP

よかろうもん

AWS WAF の IPsets を管理するコマンドラインツールを雑に作っている(けど色々と改善する必要がある)

tl;dr

AWS WAF のアクセス制御を IP アドレスを条件として行う際に設定する IPSets の管理を比較的頻繁に行う必要がありそうで、毎回マネジメントコンソールを触るのは気が引けたので雑にコマンドラインツールを作ってみた。あくまでも作ってみた系の話しのなので改善点は多々、そもそも必要なのかも疑わしいけど、思いのほかサクッと動いたのでメモしておく。

github.com

名前が wafoo というのはどうでも良い。

ちなみに、AWS の認証周りは @k1LoW さんの awsecrets を利用させて頂いている。

github.com

また、コマンドラインオプション等は codenize.tools のオプションを出来るだけ参考にさせて頂いた。

codenize.tools

シチュエーション別 wafoo

ヘルプ

$ bundle exec exe/wafoo --help
Commands:
  wafoo apply           # 指定した IPSet ID の IPset を apply する
  wafoo export          # 指定した IPSet ID の IPset を export する
  wafoo help [COMMAND]  # Describe available commands or one specific command
  wafoo list            # IPSet ID の一覧を取得する
  wafoo version         # version 情報を出力.

Options:
  [--profile=PROFILE]
  [--region=REGION]

取り敢えず、IPSet の一覧を取得

雑に ip_set_idnameYAML で出力される。

$ bundle exec exe/wafoo list --profile oreno-profile --region ap-northeast-1
listing...
--- !ruby/struct:Aws::WAFRegional::Types::IPSetSummary
ip_set_id: ${IPSet ID}
name: IPSet_1
--- !ruby/struct:Aws::WAFRegional::Types::IPSetSummary
ip_set_id: ${IPSet ID}
name: IPSet_2

特定の IPSet ID の IP アドレス一覧を取得

bash-3.2$ bundle exec exe/wafoo export --profile ${Your Profile} --region ap-northeast-1 --ip-set-id=${IPSet ID}
export...
192.168.1.8/32
192.168.1.9/32
192.168.3.0/24
192.168.4.0/32
192.168.4.1/32
192.168.4.10/32
192.168.4.11/32
192.168.4.12/32
192.168.4.13/32
192.168.4.14/32
192.168.4.15/32
192.168.4.2/32
192.168.4.3/32
192.168.4.4/32
192.168.4.5/32
192.168.4.6/32
192.168.4.7/32
192.168.4.8/32
192.168.4.9/32

カレントディレクトリの ${IPSet ID} というファイルに出力される。

$ cat ${IPSet ID}
192.168.1.8/32
192.168.1.9/32
192.168.3.0/24
192.168.4.0/32
192.168.4.1/32
192.168.4.10/32
192.168.4.11/32
192.168.4.12/32
192.168.4.13/32
192.168.4.14/32
192.168.4.15/32
192.168.4.2/32
192.168.4.3/32
192.168.4.4/32
192.168.4.5/32
192.168.4.6/32
192.168.4.7/32
192.168.4.8/32
192.168.4.9/32

IP アドレスの追加

例えば、192.168.5.0/28 を追加したとする。現時点で WAF の IPSets の辛いところが、CIDR のオクテット設定が 8 16 24 32 しか指定出来ないところ。

www.slideshare.net

wafoo ではこれら以外のオクテットを指定した場合には、自動的に IP アドレス範囲を返してくれる。(※ ネットワークアドレスとブロードキャストアドレスは今のところ除く処理は入れていない)

$ cat ${IPSet ID}
192.168.1.8/32
192.168.1.9/32
192.168.3.0/24
192.168.4.0/32
192.168.4.1/32
192.168.4.10/32
192.168.4.11/32
192.168.4.12/32
192.168.4.13/32
192.168.4.14/32
192.168.4.15/32
192.168.4.2/32
192.168.4.3/32
192.168.4.4/32
192.168.4.5/32
192.168.4.6/32
192.168.4.7/32
192.168.4.8/32
192.168.4.9/32
192.168.5.0/28

まずは dry-run する。

$ bundle exec exe/wafoo apply --profile ${Your Profile} --region ap-northeast-1 --ip-set-id=${IPSet ID} --dry-run
apply...(dry-run)
-192.168.4.9/32 removed.
+192.168.4.9/32 added.
+192.168.5.0/28 added.

なぜか、追加した行の一つ前の行が削除、追加されるのは要改善。

そして、apply する。

$ bundle exec exe/wafoo apply --profile ${Your Profile} --region ap-northeast-1 --ip-set-id=${IPSet ID}
apply...
-192.168.4.9/32 removed.
+192.168.4.9/32 added.
+192.168.5.0/28 added.
192.168.1.8/32
192.168.1.9/32
192.168.3.0/24
192.168.4.0/32
192.168.4.1/32
192.168.4.10/32
192.168.4.11/32
192.168.4.12/32
192.168.4.13/32
192.168.4.14/32
192.168.4.15/32
192.168.4.2/32
192.168.4.3/32
192.168.4.4/32
192.168.4.5/32
192.168.4.6/32
192.168.4.7/32
192.168.4.8/32
192.168.4.9/32
192.168.5.0/32
192.168.5.1/32
192.168.5.10/32
192.168.5.11/32
192.168.5.12/32
192.168.5.13/32
192.168.5.14/32
192.168.5.15/32
192.168.5.2/32
192.168.5.3/32
192.168.5.4/32
192.168.5.5/32
192.168.5.6/32
192.168.5.7/32
192.168.5.8/32
192.168.5.9/32

追加された結果もちゃんと確認出来る。

IP アドレスの削除

例えば、192.168.1.9/32 と 192.168.3.0/24 を削除したいとする。

$ cat ${IPSet ID}
192.168.1.8/32
192.168.4.0/32
192.168.4.1/32
192.168.4.10/32
192.168.4.11/32
192.168.4.12/32
192.168.4.13/32
192.168.4.14/32
192.168.4.15/32
192.168.4.2/32
192.168.4.3/32
192.168.4.4/32
192.168.4.5/32
192.168.4.6/32
192.168.4.7/32
192.168.4.8/32
192.168.4.9/32
192.168.5.0/32
192.168.5.1/32
192.168.5.10/32
192.168.5.11/32
192.168.5.12/32
192.168.5.13/32
192.168.5.14/32
192.168.5.15/32
192.168.5.2/32
192.168.5.3/32
192.168.5.4/32
192.168.5.5/32
192.168.5.6/32
192.168.5.7/32
192.168.5.8/32
192.168.5.9/32

まずは dry-run する。

$ bundle exec exe/wafoo apply --profile ${Your Profile} --region ap-northeast-1 --ip-set-id=${IPSet ID} --dry-run
apply...(dry-run)
-192.168.1.9/32 removed.
-192.168.3.0/24 removed.

一応、削除対象が出力される。

そして、apply する。

$ bundle exec exe/wafoo apply --profile ${Your Profile} --region ap-northeast-1 --ip-set-id=${IPSet ID}
apply...
-192.168.1.9/32 removed.
-192.168.3.0/24 removed.
192.168.1.8/32
192.168.4.0/32
192.168.4.1/32
192.168.4.10/32
192.168.4.11/32
192.168.4.12/32
192.168.4.13/32
192.168.4.14/32
192.168.4.15/32
192.168.4.2/32
192.168.4.3/32
192.168.4.4/32
192.168.4.5/32
192.168.4.6/32
192.168.4.7/32
192.168.4.8/32
192.168.4.9/32
192.168.5.0/32
192.168.5.1/32
192.168.5.10/32
192.168.5.11/32
192.168.5.12/32
192.168.5.13/32
192.168.5.14/32
192.168.5.15/32
192.168.5.2/32
192.168.5.3/32
192.168.5.4/32
192.168.5.5/32
192.168.5.6/32
192.168.5.7/32
192.168.5.8/32
192.168.5.9/32

削除対象がちゃんと削除されていることも確認出来る。

雑な

感じで色々と修正すべきところはあるけど、一応、やりたいことは実現出来ているので、とりあえず良しとしよう。

2017 年 03 月 05 日(日)

マラソンは難しい

全ては以下の記事にて。

inokara.hateblo.jp

奥さんや両親にカッコイイところを見せられなかったのが本当に悔しい。リベンジ。

ただ、沿道の声援やボランティアスタッフの皆さんに支えられたレースだった。感謝の言葉しかない。

ぼたもち

母が朝食に用意したぼたもち。昨晩、遅くにこさえたらしい。

台所に立ってぼたもちを丸めている母の背中を思うと涙が出る。

2017 年 03 月 04 日(土)

鹿児島へ

明日の鹿児島マラソンに挑む為、ミニを走らせる。

途中、吉田拓郎かまやつひろしの歌を大声で歌いながら走る。

福田先生

高校時代からずーっと体を診て頂いていた福田治療院がこの春で閉院するとのことで挨拶に。

先生は少し痩せられていたが、昔と変わらず激励してくださり、体を診て頂いた。本当に有り難い。

激励会

自宅で母の手料理で激励会。

赤飯を用意している母の気持ちに涙が出た。

明日は頑張りたい。

途中色々とあったけど 5 時間 58 分 42 秒で完走出来た、鹿児島マラソンについて振り返る

これが今の実力

完走出来たのは沿道の応援やボランティアスタッフ、家族のおかげ。本当に感謝。ここから再スタート。

振り返り

ラップタイム

f:id:inokara:20170305225659p:plain

25 キロ以降、別人が走っているのではないかと思いたいけど、これも自分。

結果として京都マラソンの疲労を抜くことが出来ていなかった

以下、言い訳でしかないけど。

  • 結果としてオーバーペース(体調に合わせたペース配分が出来ていない)
  • 疲労の回復も実力のうち
  • 京都マラソンの後、抜けていたと思っていた両足の疲労が抜けていなかった
  • 左膝の痛み

冷え対策が出来ていなかった

昨年はどちらかと言えば暖かいレースだったと記憶していたが、今年はスタート直後から降り出した雨が冷えて、徐々に体温を奪っていった。T シャツと短パン、アームウォーマー、レッグウォーマーという格好ではペースが落ちはじめた時の冷えには対応出来なかった。

低体温症怖い

震えが止まらず、ストーブを抱いても体は全く温まることなくどんどん体が冷えてどうしようもなくなるのが怖い。

沿道の声援とボランティアスタッフ

足の痛みや猛烈な冷えに悩ませれている時に、救いとなったのは沿道の声援とボランティアスタッフの介抱だった。ペースダウンしてから何度か救護室に転がり込んでテーピングして頂いたり、暖かい飲み物を頂いたりしながらなんとか完走することが出来た。まさに、彼らのお陰でゴールすることが出来た。本当に感謝。偉そうな言い方かもしれないけど、完走は彼らへの恩返しなのかもしれない。

ゴールで待ってくれているひとたち

なかなかゴールしないので一度自宅に帰ってしまった奥さんと両親。奥さんの友人(よいっちゃん)のツッコミで再び走り出したことを知ったとのことだが、ゴールで待ってくれているひとたちが居るということも本当に心強く前に進むことが出来た。

ラストの 2 キロは沿道の父と並走した。足が痛い痛いって言っていた父の方が速いような気がした。自分が走りを始めた頃、父の背中を追いながら走っていたことを思いだした。本当に有難かった。

途中色々とあったけど

マラソンを舐めていたのは間違いないし、死にそうになって色々と気付きがあったので、今後のレースやトレーニング生かしていきたいと思う。

とは言え、無事に完走出来て本当に嬉しかった。一生、忘れることが出来ないマラソンになった。

2017 年 03 月 03 日(金)

ひなまつり

  • 関係無い

ジョギング

  • 香椎浜 x 2 周
  • 膝の具合は回復気味

お昼ごはん

夕飯

  • パスタ
  • カーボローディングは完璧(かも)

2017 年 03 月 02 日(木)

ジョギング

  • 走った後はやっぱり痛む
  • また、今日は天気がイマイチだったので痛みも感じやすかった気がする

日課

  • (腕立て x 30 + 腹筋 x 30) x 3

awspec

github.com

仕事でも使うシチュエーションが出てきそうなので、テストを書くところからはじめている。

そして、いくつか欲しいリソースタイプやマッチャがあったので PR して、作者の @k1LoW さんにレビューして頂いている。

人にレビューしてもらうことの重要性を感じつつ、エンジニア人生で五本の指に入るくらい楽しい瞬間を味わっている。

@k1LoW さんには感謝の言葉しかない。

2017 年 03 月 01 日(水)

三月

  • 春のような陽気

日課

  • (腕立て x 30 + 腹筋 x 30) x 3

  • 左膝の痛み緩和
  • ストレッチ、温湿布で緩和する

夕飯

  • 最近までずーっと鍋だったので、焼き魚とかご飯と味噌汁とかがとても美味しく感じる

2017 年 02 月 28 日(火)

  • 左膝痛む(左膝というよりも、左足の大腿全体が緊張しているのが気になる)
  • ストレッチ、温湿布で緩和する

日課

  • (腕立て x 30 + 腹筋 x 30) x 3

2 月が終わる

  • 京都マラソン走ったり、なかなか濃い 2 月だった
  • 3 月さん、よろしく