- 1 目的
- 2 構成図
- 3 参考
- 4 前提
- 5 手順
- 5.1 Splunk側の設定
- 5.1.1 インプットの追加
- 5.2 AWS側の設定
- 5.2.1 SQSの作成
- 5.2.2 SNSの作成
- 5.2.3 S3の設定
- 5.1 Splunk側の設定
- 6 Splunk側でログ確認
- 7 感想
目的
AWSのVPCフローログを集中監視し、可視化することで、ネットワークトラフィックの状況を把握し、セキュリティリスクを検知すること。
この目的を達成するため、AWS上のログデータをSplunkに取り込み、Splunkの監視・分析機能を活用します。具体的には、Splunk側でAWS側のVPCフローログを受信できるよう設定を行います。
構成図
参考
(公式ドキュメント)Splunk Add-on for AWS
AWS S3上のデータを SQS と組み合わせて Splunkに取り込む
前提
が完了している。
手順
Splunk側の設定
EC2インスタンスにIAMロールをアタッチしているので、別途設定が不要である。実際にSplunk側で認識しているかどうかを確認するための手順を以下に示す。
SplunkのWEB UIの左ペインにある「Splunk Add-on for AWS」を選択する。
以下の画面が表示されるので、「設定」を押下する。
「Account」タブが選択されており、EC2にアタッチしたIAMロールが設定されていることを確認する。
インプットの追加
SQS(再帰的にS3含む)にデータをPullするための設定を行う。IAMロールの確認をした後の手順として記載する。
「入力」に戻り、「Create New Input」を押下する。
「Custom Data Type」→ 「SQS-Based S3」の順に押下する。
必要情報を入力する。
AWS Accountにロール名が入る。
(検証時点では、Advanced Settingまで考慮しない)
「Signature Validate All Events」は不具合が生じたら外しておく(説明は後述)
AWS側の設定
SQSの作成
1. 先にSQS-DLQを作成しておきます。
キュータイプ:標準にします。
可視性タイムアウト:5分にしておきます。
(それ以外はデフォルトでOK)
アクセスポリシー:アドバンストにして、以下内容を入れておく。
{ "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "SQS_SQSDLQ_PUSH", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "SQS:*", "Resource": "arn:aws:sqs:ap-northeast-1:************:poc-splunk-vpcflowlog-dlq", "Condition": { "ArnLike": { "aws:SourceArn": "*" } } } ] }
2. 次に通常のSQSキューを作成します。
キュータイプ:標準にします。
可視性タイムアウト:5分にしておきます。
(それ以外はデフォルトでOK)
サーバー側の暗号化:検証段階では無効にしておきます。
アクセスポリシー:アドバンストにして、SNSがSQSにSendMessageできる権限(”SNS_SQS_PUSH”)と、EC2等がSQSを確認できる権限(”Sid”: “SQS_PULL”)を入れておく。
{ "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "SNS_SQS_PUSH", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:ap-northeast-1:************:poc-splunk-vpcflowlog", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:sns:ap-northeast-1:************:poc-splunk-vpcflowlog-topic" } } }, { "Sid": "SQS_PULL", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "sqs:*", "Resource": "arn:aws:sqs:ap-northeast-1:************:poc-splunk-vpcflowlog" } ] }
デッドレターキュー:有効にして、1.で作成したDLQを指定します。
SNSの作成
- トピックの作成
- サブスクリプションの作成
トピック:先ほど作成したものを選択
プロトコル:SQS
エンドポイント:先ほど作成したSQSキューのARNを指定
raw メッセージ配信の有効化:チェックは必ず外したままにしておくこと
アクセスポリシー:アドバンスドにして、S3がSNSにPublishできる権限(”Sid”: “S3_to_SNS_Publish”)、SQSがこのSNSトピックをSubscribeできる権限(”Sid”: “SQS_Subscribe”)を入れておく。
{ "Version": "2008-10-17", "Id": "__default_policy_ID", "Statement": [ { "Sid": "S3_to_SNS_Publish", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:ap-northeast-1:************:poc-splunk-vpcflowlog-topic", "Condition": { "ArnLike": { "aws:SourceArn": [ "arn:aws:s3:::poc-splunk-vpcflowlog", "arn:aws:s3:::poc-splunk-vpcflowlog/*" ] } } }, { "Sid": "SQS_Subscribe", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "SNS:Subscribe", "Resource": "arn:aws:sns:ap-northeast-1:************:poc-splunk-vpcflowlog-topic", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:sqs:ap-northeast-1:************:poc-splunk-vpcflowlog" } } } ] }
S3の設定
- バケットポリシーの修正
VPCフローログの場合、設定すると勝手にS3のバケットポリシーが以下のように書き込まれてしまう。
このため、Splunk on EC2のロールがS3にアクセスできるよう、最下部に「”Sid”: “EC2PULL”」を追加しておいた。
{ "Version": "2012-10-17", "Id": "AWSLogDeliveryWrite20150319", "Statement": [ { "Sid": "AWSLogDeliveryWrite", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::poc-splunk-vpcflowlog/AWSLogs/************/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceAccount": "************" }, "ArnLike": { "aws:SourceArn": "arn:aws:logs:ap-northeast-1:************:*" } } }, { "Sid": "AWSLogDeliveryAclCheck", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::poc-splunk-vpcflowlog", "Condition": { "StringEquals": { "aws:SourceAccount": "************" }, "ArnLike": { "aws:SourceArn": "arn:aws:logs:ap-northeast-1:************:*" } } }, { "Sid": "EC2PULL", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::************:role/dev-iam-role-splunk" }, "Action": "s3:*", "Resource": "arn:aws:s3:::poc-splunk-vpcflowlog/*" } ] }
- イベント通知設定(SNSへの通知)
最後にS3に新規書き込みがあった際のイベント通知設定を行います。
プレフィックス:(始まり)記載なくてもいいですが、「poc-splunk-vpcflowlog/AWSLogs/************/vpcflowlogs/ap-northeast-1/」は不変だったので記載しておきました。
サフィックス:(終わり)拡張子が.gzのファイルがアップロードされるので、拡張子だけ記載しておきました。なくてもいいです。
イベントタイプ:念のため「すべてのオブジェクト作成イベント」s3:ObjectCreated:*にチェックを入れておきます。
送信先:先ほど作成したSNSトピック「poc-splunk-vpcflowlog-topic」を指定して通知します。
Splunk側でログ確認
この状態で稼働を始めたところ、立て続けに4件以下のWarningが来ました。
Warning: This message does not have a valid SNS Signature None None doesn't match required format '^https://sns\\\\.[-a-z0-9]+\\\\.amazonaws\\\\.com(?:\\\\.cn)?/'
ここによると、Splunk Add-on for AWSバージョン5.2.1からの機能らしい。
おそらくバージョン 5.2.1 のアップデートに関連していると思われます。
https://docs.splunk.com/Documentation/AddOns/release/AWS/Releasenotes
Splunk アドオン for AWS バージョンのバージョン 5.2.1 には、次の新機能と変更された機能が含まれています。
- SQS キューから Splunk に送信される SNS メッセージの署名の検証を追加しました。ログのソースは、SNS メッセージの署名と署名フィールドを照合することによって検証されます。
5.2.1 アップデートを取り消しました。 5.2.0は動作しているようです。
バージョン確認したところ、しっかり7.5.0でした。
ということで、後から編集でこの「Signature Validate All Events」のチェックを外します。
設定後、サーチ画面で「*」で検索。
以下のような形式のVPCフローログが来ていれば成功です。
version account-id interface-id srcaddr dstaddr srcport dstport protocol packets bytes start end action log-status
2 ************ eni-0e12ddef5e69024cb 10.110.. 10.110.. 443 33122 6 4 160 1712727859 1712727859 ACCEPT OK
補足
たまにChromeだとSplunkの動作が不安定になるので、そういうときはEdgeを使うと安定します。
(SplunkはブラウザはEdgeの方が相性いいかも)
感想
当方、まだSplunkの知識はそんなにないのですが、これはそういうのは不要で構築できました。
AWSネイティブ一択でいくのであれば、SIEMはOpenSearchでいくのがスムーズですが、Splunkを使いたいケースもあるかと思います。その場合、Splunk側ではAWS連携用としてSplunk Add-on for AWSを使い、入力方式もSQS Based S3というSNS⇨SQSからの通知によりS3から取得しに行く方式です。これが結構曲者で、S3 File DecoderやSource Typeを正しいものを選ばないと、Splunk側で正しく取り込めず、ログが表示されません。特にSQS Based S3だとどれを選べばいいのか、デフォルトのままでいいのか、情報がネットにもあまりありません。なのでSplunk Add-on for AWSを使う場合は、この辺りに注意してください。