本日も乙

ただの自己満足な備忘録。

VPC Flow Logsの出力先を一つのS3バケットに集約する

VPC Flow Logsとは

VPC フローログは、VPC のネットワークインターフェイスとの間で行き来する IP トラフィックに関する情報をキャプチャできるようにする機能です。フローログのデータは、Amazon CloudWatch Logs を使用して保存されます。フローログを作成すると、そのデータを Amazon CloudWatch Logs で表示し、取得できます。 フローログは、多くのタスクで役立ちます。たとえば、特定のトラフィックがインスタンスに到達していない場合のトラブルシューティングに役立ちます。これにより、制限が過度に厳しいセキュリティグループルールを診断できます。また、セキュリティツールとしてフローツールを使用し、インスタンスに達しているトラフィックをモニタリングすることができます。 https://docs.aws.amazon.com/ja_jp/AmazonVPC/latest/UserGuide/flow-logs.html

S3にログを保管できるようになりました

VPC Flow Logsが登場した当初はCloudWatch Logsにしか保存できなかったのですが、最近のアップデートでS3にも保管できるようになりました。 Amazon VPC フローログが S3 で使用可能に

S3の方がAthenaを使った検索・解析ができたり、コストメリットが大きいので嬉しいアップデートです。

一つのS3バケットに集約したい

AWSを本格的に利用しているところでは、複数AWSアカウントかつ複数VPCで運用しているケースが多いかと思います。
VPCごとにVPC Flow Logsを設定する際にS3バケットを分ける設定をしていると、S3バケットごとに設定が必要になります。
また、AWSアカウントごとにVPC Flow Logsを設定すると、格納するS3バケットがさらに増えていきます。S3バケットが増えると、管理するのが面倒になりますし、AWSアカウントをまたいでログを検索したい場合に保管しているすべてのS3バケットを調べる必要があります。

本記事は複数AWSアカウント、複数VPCのフローログファイルを一つのS3バケットに集約する方法を紹介します。

構成

  • アカウントA (AWSアカウントID: 111111111111)
  • アカウントB (AWSアカウントID: 222222222222)
  • アカウントC (AWSアカウントID: 333333333333)
    • VPCフローログファイルの保存先S3バケットを所有しているAWSアカウント
    • S3バケットのリージョン: 東京(ap-northeast-1)

S3バケットの作成

アカウントCで作業します。S3バケット名を sample-vpc-flow-logs とします。
S3バケットポリシーを以下のようにします。

 {
    "Version": "2012-10-17",
    "Id": "AWSLogDeliveryWrite20150319",
    "Statement": [
        {
            "Sid": "AWSLogDeliveryWrite",
            "Effect": "Allow",
            "Principal": {
                "Service": "delivery.logs.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": [
                "arn:aws:s3:::sample-vpc-flow-logs/AWSLogs/111111111111/*",
                "arn:aws:s3:::sample-vpc-flow-logs/AWSLogs/222222222222/*",
                "arn:aws:s3:::sample-vpc-flow-logs/AWSLogs/333333333333/*"
            ],
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            }
        },
        {
            "Sid": "AWSLogDeliveryAclCheck",
            "Effect": "Allow",
            "Principal": {
                "Service": "delivery.logs.amazonaws.com"
            },
            "Action": "s3:GetBucketAcl",
            "Resource": "arn:aws:s3:::sample-vpc-flow-logs"
        }
    ]
}

このとき、S3のARNをコピーしておきます。今回の例だと arn:aws:s3:::sample-vpc-flow-logs となります。

VPC Flow Logsの設定

VPCからVPC Flow Logsの設定画面に遷移し、Destinationを Send to an S3 bucket、S3 bucket ARNに先ほどコピーしたARNを貼り付けて「Create」をクリックします。これをVPCごとに設定していきます。

vpc-flow-logs-s3-settings.png

設定するとS3バケット内で以下のようなツリー構成になります。

s3://sample-vpc-flow-logs
└── AWSLogs
    ├── 111111111111
    │   └── vpcflowlogs
    │       ├── ap-northeast-1/YYYY/MM/DD/111111111111_vpcflowlogs_ap-northeast-1_<VPCフローログID>_YYYYMMDDTSSSSZ_xxxxxxxx.log.gz
    │       └── ....
    ├── 222222222222
    │   └── vpcflowlogs
    │       ├── ap-northeast-1/YYYY/MM/DD/222222222222_vpcflowlogs_ap-northeast-1_<VPCフローログID>_YYYYMMDDTSSSSZ_xxxxxxxx.log.gz
    │       └── ....
    └── 333333333333
        └── vpcflowlogs
            ├── ap-northeast-1/YYYY/MM/DD/333333333333_vpcflowlogs_ap-northeast-1_<VPCフローログID>_YYYYMMDDTSSSSZ_xxxxxxxx.log.gz
            └── ....

複数のVPCがある場合、 s3://sample-vpc-flow-logs/AWSLogs/<AWSアカウントID>/vpcflowlogs 以下にログファイルが混在することになることに注意してください。

Amazon GuardDutyとの関係性

Amazon GuardDuty がデータソースとしてVPC Flow Logsを利用している場合、出力先に影響がないため、S3に変更しても問題ありません。

重要 GuardDuty を有効にすると、ただちに VPC フローログのデータの分析が開始されます。フローログの単独ストリームおよび重複ストリームの VPC フローログ機能から直接 VPC フローログイベントを使用します。このプロセスによる既存のフローログ設定への影響はありません。 https://docs.aws.amazon.com/ja_jp/guardduty/latest/ug/guardduty_data-sources.html#guardduty_vpc