このエントリーは、KLab Advent Calendar 2015 の20日目の記事です。
高田といいます。ふだんはゲームのデータなどを集計し、統一的に管理するデータ収集・分析のためのシステムを開発しています。
私のチームではインフラにはAWSを活用し、自分たちで運用しています。
その際非常にめんどうなのがセキュリティグループの管理です。セキュリティグループとは、AWS上の仮想マシンに対するトラフィックを制御する仮想ファイアウォールです。
詳しくはamazonさんの公式のドキュメントを参照してください。
私たちのチームの場合、提供するサービスは社内向けのものが多いので、例えば80ポートや443ポートは社内のIPアドレスのみに開放するといった設定を利用することが多いです。
こちらをAWSのコンソール画面で設定していくのですが、数が増えていくと、どれがどれだったかわからなくなるというパターンが増えていきます。
例えば、192.168.0.12
に22ポートを開放すると設定してあったとしても、「これはどこのアドレスだったかな……? あ、大阪事業所だ」といちいち確認する手間も増えます。ひどいときは、「おそらくいらない設定だと思うけど、消して動かなくなると恐いから消さない」ということになり、どんどん誰も手がつけられない負債が増えていきます。
特に、設定をまちがえると必要なユーザーがまったくアクセスできない、あるいはデータベースへのアクセスが遮断されるなど、悲惨な障害につながりかねないため、この手の設定は恐いですね。
経験上、セキュリティグループの管理には、以下のような問題が生じやすいようです。
上記の問題をふりかえると、ソースコードなどと同様に、githubのワークフローに載せてやれば、問題点はおおむね解決できそうです。
具体的には以下のような運用になります。
これはよさそうですね。しかしこれを実現するためには、何とかして、セキュリティグループの設定をgithubで管理できるようにする必要があります。
上記のような管理フローを実現するため、セキュリティグループの設定をcsvで取得し、csvから反映できるスクリプトを作成しました。sg
という名前です。
(名前は特に思いつかなかったので Security Group
略して sg
としました)。
pypi
にも登録済みです。なおpythonのバージョンは2.7.9
および3.4.3
でテストしました。
pip install sg
管理用のディレクトリを作成し、そこで init
コマンドを実行します。regionとawsのキーを聞かれます。
(キーはローカルに保存するだけです)。
$ cd yourpath
$ sgsg.py init
enter your region[us-east-1]:
us-west-2
save to sg.cfg
enter your aws_access_key_id:
xxx
enter your aws_secret_access_key:
xxx
save to aws_key
リモートのセキュリティグループの設定を保存するには fetch
コマンドを利用します。
グループ別に設定がcsvとして保存されます。
ダウンロードされたcsvファイルにはコメントなどを追加することができます。エクセルなどで編集してください。なお、新たなリモート設定が追加された場合もfetch
で取得できます。更新時もコメントなどを消すことはありません。
csvは以下のような形となります。(セキュリティグループ名).csvというファイル名で保存されます。
security_groups/somegroup.csv
tcp,80,80,192.168.0.1/32,,東京本社オフィスからのHTTP接続
tcp,22,22,192.168.0.2/32,,東京本社オフィスからのSSH接続
tcp,22,22,192.168.10.1/32,,大阪事業所からのSSH接続
tcp,22,22,othergroup,,別のセキュリティグループからのSSH接続
github上では以下のように表示されます。
このcsvファイルにコメントをつけ、gitで管理していきます。
なお更新をAWS側に反映するには commit
コマンドを使用します。
csvに追加、または削除を行なったあと、以下のコマンドを実行します。差分が表示されるので確認後yを選択してください。
sgsg.py commit security_groups/somegroup.csv
GROUP: somegroup
post this setting?[y/N]
+tcp 80 80 192.168.0.1
現状sgツールからセキュリティグループの追加や削除には対応していません。(コンソール上で追加したグループは fetch
時に反映されます)。
以上です。活用いただければありがたいです。
KLabのゲーム開発・運用で培われた技術や挑戦とそのノウハウを発信します。
合わせて読みたい
KLabのゲーム開発・運用で培われた技術や挑戦とそのノウハウを発信します。