AWS Config Rulesのマネージドルールでセキュリティグループをチェックしよう

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

AWSを利用するにあたって、セキュリティグループを適切に設定する事は重要なトピックの1つです。
具体的には必要なポートやIPのみ許可します。
初期構築で適切に設定していても、システム運用の中でルールが変更される可能性があります。
アプリケーションの改修やトラブルシューティングで許可ルールを追加するといったケースです。
意図通りの変更であれば良いのですが、トラブルシューティングで大きすぎる許可を与えてそのままにしてしまうといった懸念が考えられます。

AWS Config Rulesでは、このような課題を解決できます。
具体的には、AWSリソースがルール通りに沿って設定されているか確認できます。

マネージドルールによる確認

マネージドルールは事前定義されたルールです。
ルールの一覧はこちらから確認できます。

マネージドルールの設定は簡単です。
Configコンソール > ルールの追加を選択します。

ルールの一覧が表示されるので、作成するルールを選択します。
ルールの設定は以下でご説明します。
ルール作成後は、セキュリティグループに変化があった際にチェックが実行されます。
手動でチェックする事もできます。

セキュリティグループのチェックとしては「restricted-common-ports」「restricted-ssh」を利用できます。
それぞれのルールについて解説します。

restricted-common-ports ルール

指定したTCPポートについて、無制限の受信許可をしていないか確認します。
社内利用のアプリケーションや開発環境がインターネットから利用できるようになっていないか確認するといったユースケースが考えられます。
開発環境がインターネットに公開されていないか確認する場合、セキュリティグループに設定されたタグを指定します。
以下の例では「EnvType:dev」タグをもつグループを対象にしています。
ルールの名前、タグ、チェック対象のポートを指定して保存すれば、チェックが開始されます。

「EnvType:dev」タグをもつリソースが作成、変更、または削除されたときに評価が行われます。
評価は以下のように確認できます。

restricted-ssh ルール

sshが無制限に許可されていないか確認します。
sshのような管理用の接続は、運用拠点のIPのみ許可するといった形が望ましいです。
そのため、環境タイプ(本番、開発、検証)に関わらず設定すると良いでしょう。
リソースにセキュリティグループを指定して、リソースIDを指定しなければ、リージョン内の全てのセキュリティグループがチェックされます。

カスタムルールによる確認

マネージドルールがセキュリティ要件にフィットしない場合などにカスタムルールを利用できます。
カスタムルールは AWS Lambda 関数と関連付けます。
自分で1からルールを作成しても良いのですが、awslabsで公開されているルールを利用できます。

おわりに

AWS Config Rulesのマネージドルールを使って、セキュリティグループをチェックできます。
ルールをうまく使えばAWS環境を統制できるかと思います。

参考