Splunk は、AWS re:Invent 2016 で、複数の AWS Lambda 設計図を発表しました。これらの設計図を使えば、15 以上の AWS サービスから Splunk にログ、イベント、アラートをストリーミングして、AWS インフラストラクチャや AWS アプリケーションのセキュリティと運用に関する重要なインサイトを獲得できます。
このブログ記事では、そのうちの 1 つ、CloudWatch Logs 用 Lambda 設計図を使って、AWS CloudWatch Logs から AWS Lambda 経由で Splunk にログデータをストリーミングする手順についてご説明します。この仕組みを実現すれば、下の図に示すように、ほぼリアルタイムの分析と可視化が可能になります。
以下では、CloudWatch Logs に保存される VPC フローログのストリーミングを例に説明しています。VPC フローログでは、ネットワークインターフェイスで送受信されるすべての IP トラフィックに関する情報が取得されるため、セキュリティ分析やトラブルシューティングに役立てることができます。ただし、以下の図の手順は、CloudWatch Logs に保存されるどのログにも適用できます。
この記事の目次:
Splunk では、ローカルファイルの監視から、ワイヤーデータのストリーミング、他社製リモート API からのデータのプル、syslog、TCP/UDP、http 経由のデータ受信まで、さまざまな方法でデータを取り込むことができます。
リモートソースからのプル方式を使う代表例が、Splunk Add-on for AWS です。さまざまな AWS サービスからデータを収集できる、信頼性の高いアドオンとして人気があります。
プッシュ方式を使う代表例が、AWS Lambda 関数を使用する方法です。この方法では、Splunk HTTP イベントコレクター (HEC) に HTTPS 経由でイベントをストリーミングできます。
プルとプッシュの 2 つの方式は、適用する用途も考慮事項も異なります。この記事では、プッシュ方式を取り上げます。この方式は特に、マイクロサービスアーキテクチャや、AWS Lambda のようなイベント駆動型コンピューティングに適しています。プッシュ方式は、管理や調整のための専用のポーリングプロセスが不要なため、一般的に以下のメリットがあります。
以下の手順では、CloudWatch Logs ログストリームの例として VPC フローログを使用します。VPC フローログやその他のソースからの CloudWatch Logs ログストリームをすでに設定済みの場合は、ステップ 2 に進み、以降は VPC フローログを既存のデータタイプに置き換えて作業を進めてください。
1a. フローログのロールを作成して、CloudWatch Logs にログを発行するための VPC フローログサービスへのアクセス権を付与します。次の IAM ポリシーをアタッチした新しい IAM ロールを作成します。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:DescribeLogGroups",
"logs:DescribeLogStreams"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
作成したロール名をメモしておいてください (例:vpcFlowLogsRole)。後の手順で必要になります。また、フローログサービスがこのロールを引き受けられるように、ロールに信頼関係を設定する必要もあります。新しく作成したロールの [信頼関係] タブで、[信頼関係の編集] をクリックし、既存のポリシーを削除して、次のポリシーをコピーします。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "vpc-flow-logs.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
1b. AWS VPC ガイドの説明に従って、AWS VPC コンソールで VPC のフローログを有効にします。このガイドでは、送信先 CloudWatch Logs ロググループを「vpcFlowLogs」と指定したと仮定します。以降の手順では、この名前を使用します。数分後に、CloudWatch Logs コンソールで、このロググループの下にフローログレコードが表示され始めます。
フローログの記録が開始されたので、次に Splunk 側からデータパイプラインを設定します。
2a. Splunk Add-on for AWS をインストールします。Splunk HEC を使用するので、CloudWatch Logs ログストリームや VPC フローログの収集にアドオンのモジュラー入力を使用する必要はありません。ただし、VPC フローログレコードの解析やフィールドの抽出を自動化するために、アドオンに内蔵されているデータ解析ロジック (ソースタイプ) を利用します。
2b. Splunk Enterprise で HEC トークンを作成します。手順については、Splunk HEC マニュアルを参照してください。
入力の設定をするときは、ソースタイプを必ず「aws:cloudwatchlogs:vpcflow」に設定してください。これは、フィールドを自動的に抽出するために重要です。また、作成した HEC トークンの値をメモしておいてください。
注:Splunk Cloud を利用している場合は、HEC の有効化を Splunk サポートに依頼する必要があります。
データ入力設定は次のようになります。
パイプラインでは、Splunk HEC の前に AWS Lambda を経由します。グループにログが発生すると、CloudWatch Logs によって AWS Lambda が実行され、レコードが Splunk にストリーミングされます。まさにこの目的に使用できる Lambda 設計図が Splunk によって公開されています。
3a. ここをクリックして、AWS コンソールで「CloudWatch Logs to Splunk」Lambda 設計図を使って Lambda 関数を作成します。または、AWS Lambda コンソールに移動し、[Create a Lambda function] (Lambda 関数を作成) をクリックして、[Select blueprint] (設計図を選択) で「splunk」を検索します。検索結果から、「splunk-cloudwatch-logs-processor」Lambda 設計図を選択します。
3b. Lambda 関数のトリガーを設定します。 [CloudWatch Logs] が選択されていない場合は、選択します。次に、ロググループとして [vpcFlowLogs] を指定します。[Filter Name] (名前のフィルター) に「vpcFlowLogsFilter」などのフィルター名を入力します。オプションとして、Lambda から送られるデータを制限したい場合は、[Filter Pattern] (フィルターパターン) にフィルターパターンを入力できます。[Next] (次へ) をクリックする前に、[Enable trigger] (トリガーを有効にする) が選択されていることを確認してください。設定画面は次のようになります。
これは CloudWatch Logs サブスクリプションフィルターとも呼ばれます。この方法を使うと、選択したロググループ (ここでは vpcFlowLogs) からのログイベントのリアルタイムフィードを簡単に作成できます。
AWS コンソールでこの Lambda トリガーを追加すると、Lambda によって、CloudWatch Logs サービスからこの Lambda 関数を呼び出すために必要なアクセス権が自動的に追加されます。
3c. Lambda 関数を設定します。この関数にはすでに CloudWatch Logs データを処理するために必要なロジックが実装されています (データの復号、圧縮ファイルの解凍、Splunk HEC への送信前のイベントのブレークなど) 。設定が必要なパラメーターは以下のとおりです。
AWS Lambda では、デフォルトで、環境変数が保管時に Lambda サービスキーを使って暗号化されます。関数が呼び出されると、AWS Lambda によって自動的に復号されます。この設定の目的では必須ではありませんが、Lambda 関数のデプロイ前に環境変数を暗号化するオプションを選択できます。詳しくは、「機密情報を保存するために、環境変数を使用して Lambda 関数を作成する」を参照してください。
この時点で、Lambda の設定を確認したら、[次へ] をクリックします。画面は次のようになります。
数分後、Splunk Enterprise でイベントが表示され始めます。
sourcetype="aws:cloudwatchlogs:vpcflow"
または、Lambda によってデフォルト値の「lambda:」に設定されたソースで検索することもできます。
source="lambda:vpcFlowLogsProcessor"
Lambda を使ってデータを取り込むメリットには、設定が簡単なだけでなく、Splunk App for AWS に内蔵の便利なダッシュボードと高度な VPC フローログ トラフィック/セキュリティ分析機能を利用できることもあります。適切なソースタイプを設定すれば (上記の VPC フローログの場合は「aws:cloudwatchlogs:vpcflow」)、関連するダッシュボードにデータが自動的に表示されます。 Splunk App for AWS のインストール後、このアプリで [Traffic & Access] ドロップダウンメニューから [VPC Flow Logs: Traffic Analysis] ダッシュボード、[Security] ドロップダウンメニューから [VPC Flow Logs: Security Analysis] ダッシュボードを表示できます。
Splunk でイベントが表示されない場合は、データフローに沿ってパイプラインを 1 段ずつ確認して問題を解決できます。
以上、AWS Lambda と Splunk HEC を組み合わせて、負荷が低く拡張性に優れたデータパイプラインを設定し、重要な CloudWatch Logs ログデータを既存の Splunk Enterprise にストリーミングする方法をご説明しました。このデータパイプラインを使用すれば、Splunk Enterprise でデータをほぼリアルタイムで処理、分析できます。
今回の例では、CloudWatch Logs に保存される VPC フローログを使用しました。このデータは、VPC トラフィックやセキュリティ状況を把握するために非常に役立ちます。ただし、VPC フローログ自体は数分おきにキャプチャされるため、VPC フローログの分析はある程度まとめて行われる点に注意してください。
こちらをクリックすると、AWS コンソールから直接、Splunk の Lambda 設計図を使い始めることができます。ぜひ AWS Lambda と Splunk HEC を活用して、独自のサーバーレスアーキテクチャとデータパイプラインを構築してみてください。ご意見・ご感想を下のディスカッションで受け付けています。不明な点がある場合は、Splunk Answers から投稿することもできます。
Splunkプラットフォームは、データを行動へとつなげる際に立ちはだかる障壁を取り除いて、オブザーバビリティチーム、IT運用チーム、セキュリティチームの能力を引き出し、組織のセキュリティ、レジリエンス(回復力)、イノベーションを強化します。
Splunkは、2003年に設立され、世界の21の地域で事業を展開し、7,500人以上の従業員が働くグローバル企業です。取得した特許数は1,020を超え、あらゆる環境間でデータを共有できるオープンで拡張性の高いプラットフォームを提供しています。Splunkプラットフォームを使用すれば、組織内のすべてのサービス間通信やビジネスプロセスをエンドツーエンドで可視化し、コンテキストに基づいて状況を把握できます。Splunkなら、強力なデータ基盤の構築が可能です。