- 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を使う場合は、この辺りに注意してください。

 
     
     
    