
今回は設定や運用が難しく手間なセキュリティグループの自動更新を、AWSを活用し実現可能か、検証をしてみました。
目次
セキュリティグループの設定って手間だ!
AWS上でEC2やRDSを立ち上げたときに、通信制御のためセキュリティグループを利用します。
セキュリティグループは、特定のIPアドレスからの通信を許可するルールを設定することで、許可された通信を通過させることが可能です。サービスの要件によっては、特定のホスト名からの通信を許可してほしいと要望があります。しかし、セキュリティグループだけでは実現することができないので、多くの場合ファイアウォール機能を有したEC2などを利用して通信制御を実現しています。
それ以外の方法がないかと考えたところ、CloudFormationのAWS Lambda-backedカスタムリソースを利用することで、CloudFormationがLambda APIを呼び出し、動的なリソース構築をすることが実現できるか、今回検証してみました。
AWSを活用し検証してみた
今回はLambdaの中でDNSの名前解決を実施し、取得したIPアドレスの許可ルールをセキュリティグループに設定する仕組みと、定期的にDNS情報を監視し更新がある際に、CloudFormation Stackをアップデートする仕組みを構築、DNS情報の変更がされたときに自動的にセキュリティグループを変更する仕組みを検証してみました。
- ※ 注意点としては、この方法はIPアドレスによって制限しているので、HTTPベースアクセスでワイルドカード指定されているドメインでは利用できません。その場合にはサードパーティ製のUTMを導入する必要があります。
全体構成図

作成したCloudFormationをご紹介!
今回はセキュリティグループをローンチするCloudFormation-1とDNSの監視、更新をするCloudFormation-2の2つに分けて作成しました。
CloudFormation-1
作成ポイント:DNSの名前解決を実施し、セキュリティグループを作成する一連のリソースを作成する。
- ※ CloudFormation-1のテンプレートは下記よりダウンロードできます。
CloudFormation-1で指定するパラメータ
- ※ 利用したCloudFormationでLambdaに利用するIAM Roleを作成しているので、"AWS CloudFormationによってIAMリソースが作成される場合があることを承認します。"の項目にチェックをいれてスタックを作成する必要があります。
- ※ セキュリティグループの許可ポリシーはアウトバンドルールに設定しております。(DNS情報を利用してインバウンドの許可をする場合は、特に信頼できるサイトの情報であることを注意してください。)
CloudFormation-2

作成ポイント:CloudWatch Eventにより定期的に監視Lambdaを実行し、DNS登録情報に変更がないかを確認する。変更がある場合は、CloudFormation-1を再実行しDNS登録情報の変更をセキュリティグループに反映する一連のリソースを作成する。
- ※ CloudFormation-2のテンプレートは下記よりダウンロードできます。
Check-FQDN-and-stack-update.yaml
CloudFormation-2で指定するパラメータ

- ※ 利用したCloudFormationでLambdaに利用するIAM Roleを作成しているので、"AWS CloudFormationによってIAMリソースが作成される場合があることを承認します。"の項目にチェックをいれてスタックを作成する必要があります。
本当に自動更新できるか確認してみた
今回の検証環境としては、Route 53にドメインを作成し、テスト用のAレコードを登録しています。
CloudFormation-1をローンチすることでセキュリティグループにAレコードに指定されているIPアドレスの許可ポリシーが設定されます。
Route53に登録したAレコード

CloudFormationにより作成されたセキュリティグループ

Route 53のAレコードを変更することで、監視プログラムが変更を検知します。CloudFormation-1のスタックアップデートを実施後、セキュリティグループのIPアドレスが変更されます。DNS情報に変更があったかについては、IPアドレスの文字列をハッシュ化しタグ情報として保管しており、監視プログラムはタグ情報のハッシュ値と、DNSから取得したIPアドレスのハッシュ値を比較して判断しています。また、CloudFormationのスタックアップデートでは、変更された値がないとアップデートに失敗しますが、こちらもタグ情報として変更日と変更回数を含めアップデートを実施しています。
気を付けなければならない点ですが、セキュリティグループの入れ替えは、一時的にルールが削除され、新しいルールに入れ替える動作となります。そのため、一時的にアクセスできない状況が発生するので、周知などの対応が必要です。
変更したAレコード

Aレコードの変更が反映されたセキュリティグループ

セキュリティグループのタグ情報

自動更新できた!
CloudFormationとLambdaを組み合わせることで、自動的にセキュリティグループの書き換えを実施する仕組みについて検証し、動作の確認ができました。CloudFormationのAWS Lambda-backedカスタムリソースの利用により、動的な処理を組み込めるため、工夫次第でいろいろな自動化が可能になります。是非、今までの運用を見直してみることをオススメします!
実際、今回の検証内容をそのまま実環境に適用できるかは、セキュリティ要件、コストなどの要件を総合的に判断する必要があります。弊社ではAWSだけではなく、その他のプラットフォームでのシステムの設計、運用の知見もあり、システム構成のご相談や実際の設計など幅広く対応が可能です。お困りのことがありましたら、是非当社にご相談・お問合せ下さい。
関連サービス
おすすめ記事
-
2020.06.23
Amazon Connectで在宅勤務でも対応できる問合せ窓口を立ち上げてみた
-
2020.08.17
Datadogで実現するモニタリングとオペレーションのオートメーション化
-
2020.04.27
Amazon FSx for Windows ファイルサーバーへの移行と活用方法
-
2020.06.11
Amazon WorkSpacesとは?その特長をまとめてみた
-
2020.06.23
AWSのDevOpsサービスと当社マネージドサービスを活用したDevOpsの実装①~概念編~