every Tech Blog

株式会社エブリーのTech Blogです。

“通信ブロックして大丈夫?”を解消!VPCフローログで通信内容を確認してみた

はじめに

こんにちは。去年12月に入社したリテールハブ開発部エンジニアの清水です。
エブリーでは事業譲渡という形で他社が開発した小売店様向けシステムを引き継いで運用を行なっており、私は入社してからこちらのシステムの保守運用を担当しております。

このシステムはAWS上で稼働しており、数年間運用されているのですが、最近セキュリティ設定を変更して許可されていた通信をブロックする対応が必要となりました。
今回設定変更を行う通信は金銭に関わる処理が行われているため、必要な通信をブロックしてしまった場合大変なことになります。
このような状況ですので、どうすれば絶対に問題ないことを確認できるのか?ということについて少し悩みました。

今回はVPCフローログを使用することで通信ログを取得し、どのような通信が行われているのかを確認する流れを紹介いたします。

今回発生したセキュリティ設定を変更するタスクについて

私が担当しているシステムでは以下のように専用線を使用して小売店様で管理しているネットワークと接続しています。

小売店様のネットワークには様々なサーバーが存在しておりますが、私たちが運用しているシステムはXXX.XXX.XXX.0/24との通信しか行っていません。

しかしながら、最近小売店のご担当者様がネットワーク設定を確認したところ、XXX.XXX.XXX.0/24以外に対する通信が行われた場合でもブロックされない設定になっていることがわかりました。

小売店様側のネットワークでXXX.XXX.XXX.0/24以外に対する通信はブロックする設定を追加する必要があるため、閉じてしまって問題ないことをエブリー側で確認しなければなりません。

どうやって確認するか

まず最初に確認したこととして、事業譲渡の際に引き継がれたネットワーク仕様書を確認しました。ネットワーク仕様書を見る限りではXXX.XXX.XXX.0/24以外に対する通信が行われていないことが確認できます。
しかしながら、今回設定変更する通信は金銭に関わるものが含まれており、もしもの話として「実はブロックしてはいけないものでした」という事態になった場合は大変なことになってしまいます。
ネットワーク仕様書の内容に抜けがある可能性もありますし、絶対に問題ないことを確認できなければ安心できません。
そこで、今回はVPCフローログを使用することで一定期間の通信ログを取得し、どのような通信が行われているのかを確認することにしました。

VPCフローログとは

https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/flow-logs.html
VPCフローログは、AWSのネットワーク環境におけるトラフィックの詳細なログを取得できる機能です。これにより、VPC内の通信状況を把握し、ネットワークのトラブルシューティングやセキュリティ監視を効率的に行うことができます。 VPC全体、特定のサブネット、もしくは個々のネットワークデバイス(ENI: Elastic Network Interface)に対して設定することが可能です。 取得したログは、出力先としてAmazon S3、CloudWatch Logs、Kinesis Data Firehoseに送信することができます。 今回はサーバーが稼働しているサブネットに対して取得する設定を行い、最も低いコストで済ませたいためAmazon S3にログを保存することにしました。

VPCフローログの設定方法

  1. VPCサブネットに「フローログ」というタブがあるので、そこから「フローログを作成」を押下することで作成画面に遷移します

  2. 出力先となるAmazon S3バケット、ログレコード形式などの設定を行って最下部の「フローログを作成」を押下することでフローログが作成されます

VPCフローログで出力される内容

Amazon S3バケットに以下のように.gz形式でファイルが出力されます。

ログの内容を確認する

様々な分析を行う場合Athenaが適していると思いますが、今回は簡易な作業で済むため、ローカルにログファイルをダウンロードして確認する形で進めました。
以下のように送信元IPアドレス(srcaddr)と送信先IPアドレス(dstaddr)が記録されています。
この中に小売店様のネットワーク(xxx.xxx.0.0/16)に含まれているものの想定したネットワーク(xxx.xxx.xxx.0/24)以外への通信がないことを確認できれば、想定外の通信は発生していないと判断することができます。

version account-id interface-id srcaddr dstaddr srcport dstport protocol packets bytes start end action log-status
2 999999999999 eni-XXXXXXXXXXX yyy.yyy.yyy.yyy xxx.xxx.xxx.1 YYYYY XXXXX 6 17 1479 1737356974 1737357004 ACCEPT OK

各フィールドにどのような値が入っているかはこちらをご覧ください。
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/flow-log-records.html#flow-logs-fields

料金について

VPCフローログ自体には料金は発生しませんが、出力先であるAmazon S3に対する料金が発生します。
目安として、本サービスはMAU10万人前後であり、約24時間で合計45.2MBのファイルが出力されることがわかりました。

サービスによって通信量は大きく変わるものなので一概に問題ないと言うことはできませんが、コスト面についてはそこまで心配する必要はない手段だと感じました。

最後に

このような許可されていた通信をブロックしなければならないという不安になるような経験は数年に1回あるかないかだと思いますが、多くのエンジニアが一生のうち一度くらいは経験するものではないでしょうか。
VPCフローログを使用することで手軽に通信内容を確認することができますので、似たような状況になったときに本記事がお役に立てば幸いです。