VPCフローログを使ってアクセスを確認した話

これはアソビュー! Advent Calendar 2023の2日目です🎄 今年のアドベントカレンダーは2面公開なので、ぜひそちらも御覧ください!

こんにちは!アソビューのSREユニットの三森です。

先日、伊豆シャボテン動物公園に遊びにいきました。 園内の動物に餌をあげられたので、カピバラに餌をあげてきましたが、思ったよりも毛が固くて驚きました。 そんな伊豆シャボテン動物公園は、アソビュー!でも取り扱いがあるので是非遊びに行ってみてください。

www.asoview.com

今回は、VPCフローログを使ってアクセスを確認した話についてまとめました。

モチベーション

長く運用を続けていると、「このリソースほんとに使われているのか?」のように、確証が得られない事象があるかと思います。 今回はElasticache(memcached)を例に、アクセス有無をVPCフローログで見たことをまとめました。

memcachedの接続数

memcachedにアクセスが来ている = 現在の接続数があるということなので、memcachedのメトリクスである、現在の接続(CurrConnections)を見てみました。

CurrConnections

特定の時点でキャッシュに接続された接続回数。ElastiCache は、2~3 個の接続を使用してクラスターをモニタリングします。 上記に加えて、memcached は、ノードタイプに使用されているスレッドの 2 倍に等しい数の内部接続を作成します。ノードタイプ別のスレッド数は、該当するパラメータグループの Nodetype Specific Parameters で確認できます。 合計接続数は、クライアント接続、モニタリング用の接続、および上記の内部接続の合計数です。

詳細は以下をご覧ください。

docs.aws.amazon.com

つまり、ノードタイプに即して、接続がいくつかある状態で起動するとのことでした。

なので、純粋にこのメトリクスを持って、アクセスの有無を確認することは難しそうです。

そこで、VPCフローログを使って、アクセス有無を確認してみましょう。

VPCフローログとは

VPC フローログは、VPC のネットワークインターフェイスとの間で行き来する IP トラフィックに関する情報をキャプチャできるようにする機能です。フローログデータは、Amazon CloudWatch Logs、Amazon S3、または Amazon Kinesis Data Firehose に発行できます。フローログを作成したら、設定したロググループ、バケット、または配信ストリームのフローログレコードを取得して表示できます。 引用元:https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/flow-logs.html

なお、弊社では S3バケットにVPCフローログを貯めており、確認する際は Amazon athenaを利用してログを確認しています。

VPC、サブネット、またはネットワークインターフェイスのフローログを作成できます。サブネットまたは VPC のフローログを作成する場合、そのサブネットまたは VPC 内の各ネットワークインターフェイスが監視されます。引用元:https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/flow-logs.html

ネットワークインターフェイスのあるAWSリソース(例えば、Elastic Load BalancingやAmazon RDSなど)は、VPCフローログを作成し、トラフィックを監視することができます。

詳細は下記をご覧ください。

docs.aws.amazon.com

今回やりたいことと実現方法

今回は、切り替え前のmemcachedにアクセスが来てないことを確認したいので、memcachedのネットワークインターフェイスを送信先としている通信があるかどうか確認するために、vpcflowlogで見るべき項目は以下となります。

account-id

トラフィックが記録されるソースネットワークインターフェイスの所有者の AWS アカウント ID。ネットワークインターフェイスが AWS のサービスによって作成された場合 (VPC エンドポイントまたは Network Load Balancer の作成時など)、このフィールドに対してレコードに unknown と表示されることがあります。 引用元: https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/flow-logs.html#flow-log-records

interface-id

トラフィックが記録されるネットワークインターフェイスの ID。 引用元: https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/flow-logs.html#flow-log-records

dstport

トラフィックの送信先ポート。 引用元: https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/flow-logs.html#flow-log-records

他の項目については、以下をご覧ください。

docs.aws.amazon.com

上記を確認するために、athenaで以下のクエリを発行して確認をしました。

最後に

アソビューではより良いプロダクトを世の中に届けられるよう一緒に挑戦していくエンジニアを募集しています。カジュアル面談もやっていますので、気になった方はエントリーのほどお願いいたします!

www.asoview.com