
AWS Security LakeのログをSplunkに取り込んでみた(前編)
はじめに
こんにちは!Takahashiです。
SHIFTでセキュリティエンジニアをしています。
ところで、AWSのセキュリティログ活用をできていますでしょうか。
AWSのログは、例えばCloudTrailやSecurityHub、VPCフローログなどサービスごとにログが分かれており、グローバルなサービスでなければリージョンごとにも分かれています。更にOrganizationsで複数アカウントを管理していた場合は、それぞれのアカウントに対しても設定が必要(※1)なため、サービス×リージョン×アカウントと規模が大きくなるにつれて導入・維持管理のハードルというのは高いのが課題でした。
これらのログを、SIEM(Security Information and Event Management)基盤であるSplunkに取り込んで分析・検知を行っていく際も、基本的にはサービス×リージョン×アカウントごとにログの取込設定を行う必要があり、かなり大変な作業となります。
Security Lakeを使うことのメリット
そんなお悩みを解決してくれるのが「AWS Security Lake」というサービスで、CloudTrail、SecurityHub、VPCフローログ、DNSログなどこれまで独立して管理されていたログを1つのサービスで統合管理することが可能になりました。Organizationsを使っているマルチアカウント環境においても、1つのアカウント上のS3バケットにログを集約することができます!
すごくSIEMと相性が良さそうなサービスで、2023 年5月30日にサービスがリリースされていますが、これまで一度も使ったことがなかったため、今回はAWS Security Lakeで集めたログをSplunkに取り込んでみたいと思います!
検証した構成としては一部省略している部分はありますが、以下の図の通りです。

前提
AWS Security Lakeは有効化されているものとします。手順については公式ドキュメント等をご参照ください。
Splunk Add-on for AWSが未導入の場合はSplunk環境に事前に導入してください。
設定の流れ
以下の設定の流れで進めていきます。
まずはAWS上でSecurity Lakeのサブスクライバーを設定してログの更新をSQSで管理できるようにします。
次に、SplunkのAWS Add-onで使用するIAMユーザを作成してアクセスキーを発行し、それをSplunkに設定するのが大まかな手順です。
サブスクライバーの設定
IAMユーザの作成
アクセスキーの発行
IAMロールの編集
Splunk Add-on for AWSのアカウント設定
Splunk Add-on for AWSのログ取込設定
ログの取込確認
1. サブスクライバーの設定
Security Lake >サブスクライバー>サブスクライバーを作成する をクリックします。

以下の通り入力します。
サブスクライバー名:[任意の名前]
説明:[任意の文字列]
アカウントID:[Security Lakeが動作しているアカウントID]
外部ID:[Splunk連携で直接使用するわけではないが、なにか入力が必要なので適当な文字列を入力]

取り込むソース:[今回は"すべてのログとイベントのソース"を選択します(実際は用途に合わせて選択してください)]
データアクセス:S3
S3通知タイプ:SQSキュー

作成 をクリックするとサブスクライバーが作成されます。
次に、SQSキューを確認します。サブスクライバーが作成されるとSQSメインキューおよびDLQが自動で作成されます。
後ほど使用するためメインキュー名を控えておきます。

2. IAMユーザの作成
Splunk Add-on for AWSで使用するためのIAMユーザを作成します(※2)。今回は以下のようなユーザを作成しました。sts:AssumeRole以外の権限は持たせていません。
ユーザ名:splunk-add-on
許可ポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "*"
}
]
}
3. アクセスキーの発行
作成したsplunk-add-onユーザのアクセスキーを発行します(※3)。AWSの外部で実行されるアプリケーションのユースケースを選択します。(アクセスキーの取り扱いには十分ご注意ください)

発行したアクセスキーの情報(csv)を保存しておきます。
4. IAMロールの編集
IAM>ロール から「AmazonSecurityLake-XXXXXXX-XXXXX-XXXXXX」という名前のポリシーがすでに存在するので、それを編集します。(XXXの部分は環境によって異なる値になります)

信頼ポリシーを編集からポリシーを以下の通り書き換えます。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::[アカウントID]:user/[作成したIAMユーザ名]"
},
"Action": "sts:AssumeRole"
}
]
}

後ほど本ロールのARNを使用するため控えておいてください。
5. Splunk Add-on for AWSの設定
以降はSplunk側での作業になります。Splunk環境にログインして進めます。(※4)
App>Splunk Add-on for AWS>設定>Account から追加をクリックします。

以下の通り設定します。入力後、追加をクリックします。
Name:[任意の名前]
Key ID:[AWSで作成したアクセスキー]
Secret Key:[AWSで作成したアクセスキーのシークレット]
Region Category:Global

App>Splunk Add-on for AWS>設定>IAM Role から追加をクリックします。

以下の通り設定します。入力後、追加をクリックします。
Name:[任意の名前]
IAM Role ARN:[手順4でIAMロールの編集で編集したロールのARNを入力]

6. Splunk Add-on for AWSのログ取込設定
App>Splunk Add-on for AWS>入力>Create New Input からSecurity Lake を選択してください。その後、SQS-Based S3をクリックします。(※5)

以下の通り設定します。入力後、追加をクリックします。
Name:[任意の名前]
AWS Account:[手順5で設定したアカウントを選択]
Assume Role:[手順5で設定したロールを選択]
AWS Region:[サブスクライバーが設定されているリージョン]
SQS Queue Name:[サブスクライバーが設定されているリージョンのSQSメインキュー名]※
SQS Batch Size:[任意の値を使用(デフォルトは10)]
Index:[任意のindex]
※リージョンを選択した後にSQS Queue Nameが自動取得できないとエラーが出る場合があります。おそらくIAMユーザ、ロールの権限周りの影響(最小の権限に絞っているため)ですが、手動で入力はできるためエラーは無視してください。

7. ログの取込確認
5~10分程度経過後に、ログの取込確認を行います。設定したindexおよびsourcetypeでサーチしてみます。

ログの取込が確認できました! category_nameというフィールドでログの大まかな種別が判断できます。
Application Activity:API実行に関するログ(CloudTrail)
Network Activity:VPCでフローログ、Route53のログ
Identity & Access Management:IAMアクティビティ(CloudTrail)
Findings:SecurityHubの検知
いかがでしたか。複数の種類およびマルチアカウント、リージョンのセキュリティ関連ログを1つの取込設定で簡単にSplunkにログを取り込めるのはかなり便利ではないでしょうか。
次回、後編ではもう少し詳しくログの中身を見ていきたいと思います。
参考
(※1) 一部、SecurityHubのログを統合 などログを統合できるサービスもあります。SecurityLakeがSecurityHubのログを収集できるため、SecurityHubのログ統合と併用して使うと便利です。
(※2)AWS公式ドキュメント:AWS アカウント での IAM ユーザーの作成
(※3)AWS公式ドキュメント:IAM ユーザーのアクセスキーの管理
(※4)Splunk公式ドキュメント:Manage accounts for the Splunk Add-on for AWS
(※5)Splunk公式ドキュメント:Configure Security Lake inputs for the Splunk Add-on for AWS
執筆者プロフィール: Yutaka Takahashi
ネットワーク、インフラ、SOC運用等を経験し現在はセキュリティエンジニアとして業務に従事。
主にSIEM(Splunk)、PAM、AWSの案件を中心に担当。
お問合せはお気軽に
https://service.shiftinc.jp/contact/
SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/
SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/
SHIFTの導入事例
https://service.shiftinc.jp/case/
お役立ち資料はこちら
https://service.shiftinc.jp/resources/
SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/
PHOTO:UnsplushのMaximalfocus