Amazon Detectiveにて、VPCフローログを有効化してEC2で取得可能なデータを表示させてみた

Amazon Detectiveにて、VPCフローログを有効化してEC2で取得可能なデータを表示させてみた

Clock Icon2025.07.03

こんにちは、ゲームソリューション部のsoraです。
今回は、Amazon Detectiveにて、VPCフローログを有効化してEC2で取得可能なデータを表示させてみたことについて書いていきます。

Detectiveの有効化

まず、Detectiveを有効化します。
有効化してすぐの状態では何も表示されていません。
※「API呼び出し量が最も多いロールやユーザー」や「新たに観測された位置情報」はアカウントへのアクセスなどで表示されます。
sr-detective-ec2-flowlog-01

EC2インスタンス(InstanceIDごと)の情報を表示させてみる

まずEC2インスタンス(InstanceIDごと)のデータをDetectiveに表示させてみます。
先ほどのDetectiveの画面で言うと、「トラフィック量が最も多いEC2インスタンス」の部分です。

EC2の構築

EC2インスタンスを起動します。
今回はパブリックサブネットにパブリックIPアドレスを付与する形で起動しました。

VPCフローログの有効化

EC2インスタンスを起動したVPCにてVPCフローログを有効化します。
ログの出力先はどこであれDetectiveの表示には影響がありませんが、今回はCloudWatch Logsを指定します。
sr-detective-ec2-flowlog-02

接続

VPCフローログを有効化した後に、起動したEC2インスタンスへSSH接続やhttpdインストール+起動してからアクセスするなどで、Detectiveにデータが表示されました。

  • トラフィック量が最も多いEC2インスタンス
    sr-detective-ec2-flowlog-03
  • インスタンスIDごとの詳細
    sr-detective-ec2-flowlog-04

EC2インスタンス(紐づくプライベートIPアドレスごと)の情報を表示させてみる

先ほどの操作では、先ほどの画面に表示されていたEC2インスタンスに紐づくプライベートIPアドレスをクリックしてもデータがありません。
sr-detective-ec2-flowlog-05

なぜならば、ソースIPアドレスがパブリックIPアドレスでの通信となっており、プライベートIPアドレスでの記録がされていないためです。
そのため次は、EC2インスタンス(紐づくプライベートIPアドレスごと)の情報を表示させてみます。

VPCエンドポイントの作成

VPCエンドポイント経由でAWS CLIを使ってAPI呼び出しを実施したいため、VPCエンドポイントを作成します。
ec2.ap-northeast-1.amazonaws.comを作成して、EC2インスタンスを起動しているサブネットに紐づけます。

VPCエンドポイント経由での接続

起動しているEC2インスタンスにて、以下コマンドでVPCエンドポイント経由でのAWS CLIの実行をします。
※EC2インスタンスに必要なIAMロールは付与している前提とします。

aws ec2 describe-instances --endpoint-url https://ec2.ap-northeast-1.amazonaws.com

上記コマンド実行後にCloudTrailを確認すると、イベント名がDescribeInstancesで、プライベートIPアドレスが記録されていることが確認できました。(以下はCloudTrailから一部抜粋)

{
    "eventVersion": "1.10",
    "userIdentity": {
        "type": "AssumedRole",
        "arn": "arn:aws:sts::xxxxxxxxx:assumed-role/dify-test/i-xxxxxxxxxx",
        "sessionContext": {
            "sessionIssuer": {
            },
            "attributes": {
                "creationDate": "2025-07-02T15:19:52Z",
                "mfaAuthenticated": "false"
            },
            "ec2RoleDelivery": "2.0"
        }
    },
    "eventTime": "2025-07-02T15:20:05Z",
    "eventSource": "ec2.amazonaws.com",
    "eventName": "DescribeInstances",
    "awsRegion": "ap-northeast-1",
    "sourceIPAddress": "10.0.xxx.xxx",
}

Detectiveにて、EC2インスタンスに紐づくプライベートIPアドレスを選択すると、全体的なAPI呼び出し量にて表示されていることがわかります。
sr-detective-ec2-flowlog-06

2台目のEC2インスタンスの作成

次に全体的なVPCフロー量の部分にはデータが出ていないため、こちらにも出していきます。
データを出したい対象のEC2インスタンスでhttpdを起動して、2台目のEC2インスタンスからプライベートIPアドレスを指定して接続することでデータを出していきます。

まずデータを出したい対象のEC2インスタンスにてhttpdをインストールして起動します。

sudo dnf update -y
sudo dnf install -y httpd

# サービス開始
sudo systemctl start httpd

# (これはなくても良い)自動起動を有効化
sudo systemctl enable httpd

# 状態確認
sudo systemctl status httpd

この状態で、2台目のEC2インスタンスにて以下コマンドを実行します。

curl http://{対象のEC2インスタンスのプライベートIPアドレス}:80

その後に、CloudWatch Logsを確認すると、プライベートIPアドレスを含むログが記録されていることがわかります。

Detectiveにて、EC2インスタンスに紐づくプライベートIPアドレスを選択すると、プライベートIPアドレスでの全体的なVPCフロー量にも出ていることが確認できました。
sr-detective-ec2-flowlog-07

その他の項目の確認

その他のタブについても画面を貼っておきます。
どのIAMロール/ユーザを使ったかやどのIPアドレスを持つEC2インスタンスと接続したか、またKubernetesを使用していればそのアクティビティなども見れるのかと思います。

  • インスタンスIDの新しい動作タブ
    sr-detective-ec2-flowlog-08
  • プライベートIPアドレスの新しい動作タブ・リソースのインタラクション・Kubernetesアクティビティ
    sr-detective-ec2-flowlog-09
    sr-detective-ec2-flowlog-10
    sr-detective-ec2-flowlog-11

最後に

今回は、Amazon Detectiveにて、VPCフローログを有効化してEC2で取得可能なデータを表示させてみたことを記事にしました。
どなたかの参考になると幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.