Amazon Kinesis Firehose を使用して VPC フローログを Splunk にプッシュするにはどうすればよいですか?

最終更新日: 2021 年 7 月 23 日

Amazon Virtual Private Cloud (Amazon VPC) データを分析するため Splunk ヘビーフォワーダをインストールしています。AWS ソースから Splunk クラスターにデータをプッシュして処理していますが、追加の手順が必要です。AWS データを Splunk と統合するにはどうしたらよいですか?

簡単な説明

ヘビーフォワーダーを使用する代わりに、Splunk の HTTP Event Collector (HEC) と Amazon Kinesis Data Firehose を使って、Splunk クラスターにデータとアプリケーションイベントを送信できます。

Splunk クラスタにデータとアプリケーションイベントを送信するには、次の手順を実行します。

1.    Kinesis Data Firehose 配信ストリームを作成します。

2.    レコード変換用に AWS Lambda を設定します。

3.    VPC フローログを設定します。

4.    お使いのストリームへの Amazon CloudWatch Logs サブスクリプションを作成します。

注意:Application Load Balancer を使用する場合は、Classic Load Balancer を使用します。Kinesis Data Firehose は、Application Load Balancer または Network Load Balancer をサポートしていません。また、Cookie の有効期限を非アクティブにした期間ベースのスティッキーセッションを許可を確認するようにしてください。Splunk エンドポイントに関するデータストリームの問題のトラブルシューティングの詳細については、Splunkに配信されないデータを参照してください。

解決方法

前提条件

開始する前に、次の前提条件を完了してください。

Kinesis Data Firehose 配信ストリームの作成を開始する

1.     配信ストリームを作成します。[ソース] で、[Direct PUT] または他のソースを選択します。

2.     [次へ] を選択します。

AWS Lambda を使用してレコード変換を設定する

1.     レコード変換を設定します
注意:
[Transform source records with AWS Lambda (AWS Lambda を使用してソースレコードを変換)] の下にある [Record transformation (レコード変換)] で、必ず [Enabled (有効)] を選択してください。CloudWatch はログを圧縮 gzip ファイルとして送信するため、このオプションを有効にする必要があります。Amazon Kinesis では、これらのファイルを取り出して使用可能にしておく必要があります。

2.     [Lambda 関数] で、[新規作成] を選択します。

3.     表示された [Choose Lambda blueprint (Lambda 設計図を選択)] ポップアップウィンドウの [Lambda blueprint (Lambda 設計図)] で、[Kinesis Firehose CloudWatch Logs Processor] を選択します。

4.     ブラウザで新しいタブを選択して、新しい Lambda 関数を作成します。
[名前] には、Lambda 関数の名前を入力します。
[ロール] で、[カスタムロールの作成] を選択します。

5.     ブラウザで新しいタブを選択して、新しい AWS Identity and Access Management (IAM) ロールを作成します。
ロール名で、名前が lambda_basic_execution になっていることを確認します。

6.     [許可] を選択してロールを作成し、Lambda 関数設定ページに戻ります。

7.     [関数の作成] を選択し、関数が作成されるまで待ちます。

8.     [タイムアウト] をデフォルトの 3 秒から 1 分 に増やし、機能のタイムアウトを防止します。

9.     [保存] を選択します。

Kinesis Data Firehose 配信ストリームの作成を終了します

1.     Amazon Kinesis コンソールを開きます

2.     ナビゲーションペインの [Data Firehose] を選択します。

3.     配信ストリームで [Lambda 関数] を選択します。
ドロップダウンメニューから新しい AWS Lambda 関数の名前を選択します。
[送信先] で、[Splunk] を選択します。
先ほど作成した Splunk HEC エンドポイントなど、Splunk HEC の詳細を入力します。Splunk HEC エンドポイントは、有効な SSL 証明書で終了する必要があります。一致する DNS ホスト名を使用して HEC エンドポイントに接続します。クラスターエンドポイントの形式は、https://YOUR-ENDPOINT.splunk.com:8088 です。
[Splunk endpoint type (Splunk エンドポイントタイプ)] で、[Raw endpoint (Raw エンドポイント)] を選択し、次に認証トークンを入力します。

4.     [次へ] を選択します。

5.     (オプション) 既存のバケットを選択するか新しいバケットを作成して、失敗したイベントまたはすべてのイベントの Amazon Simple Storage Service (Amazon S3) バックアップを作成します。配信ストリームウィザードで、バッファ条件、圧縮、暗号化の設定などの Amazon S3 関連設定と、エラーログオプションを必ず設定してください。

6.     [IAM ロール] で [新規作成] を選択します。

7.     開いたタブでロール名を入力し、[許可] を選択します。

8.     [次へ] を選択します。

9.     [配信ストリームの作成] を選択します。

VPC フローログを設定する

使用する VPC フローログがすでにある場合は、次のセクションにスキップします。

1.     CloudWatch コンソールを開きます。

2.     ナビゲーションペインで [ログ] を選択します。

3.     [アクション] で、[ロググループの作成] を選択します。

4.     [ロググループ名] を入力します。

5.     [ロググループの作成] を選択します。

6.     Amazon VPC コンソールを開きます。

7.     ナビゲーションペインで、[Virtual Private Cloud] の下にある [VPC] を選択します。

8.     コンテンツペインで [VPC] を選択します。

9.     [Flow logs (フローログ)] ビューを選択します。

10.    [Create flow log (フローログの作成)] を選択します。
[フィルター] には、[すべて] を選択します。
[Destination log group (送信先ロググループ)] で、作成したばかりのロググループを選択します。
[IAM ロール] で、VPC によって ログを CloudWatch に公開できる IAM ロールを選択します。
注意:
適切な IAM ロールがない場合は、[IAM ロール] で [アクセス許可設定] を選択してください。[新しい IAM ロールの作成] を選択します。デフォルト設定は選択されたままにしておきます。[許可] を選択して、ロール VPCFlowLogs を宛先ロググループに関連付けます。

11.    [作成] を選択して、VPC フローログを作成します。

12.    ロググループから配信ストリームへのリアルタイムフィードを確立します。
AWS Lambda の手順については、「AWS Lambda の Amazon CloudWatch Logs へのアクセス」を参照してください。Amazon OpenSearch サービスの手順については、「Amazon OpenSearch サービスに CloudWatch Logsのデータをストリーミングする」を参照してください。
Kinesis Data Firehose で、以下のようにして、 AWS Command Line Interface (AWS CLI) で CloudWatch Logs サブスクリプションを作成します。

注意: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、最新の AWS CLI バージョンを使用していることを確認してください

CloudWatch Logs サブスクリプションを作成する

1.     CloudWatch に、正しいロールアクセス許可を持つ Kinesis Data Firehose ストリームを公開するためのアクセス権限を付与します。

2.     AWS CLI を開きます。

3.     以下のサンプル JSON ファイルを使用して、信頼ポリシー (TrustPolicyforCWLToFireHose.json など) を作成します。必ず、YOUR-RESOURCE-REGION を、お使いのリソースの AWS リージョンに置き換えてください。

{
  "Statement": {
    "Effect": "Allow",
    "Principal": { "Service": "logs.YOUR-RESOURCE-REGION.amazonaws.com" },
    "Action": "sts:AssumeRole"
  }
}

4.     以下のコマンド例を使って、アクセス許可を持つのロールを信頼ポリシーから作成します。

$ aws iam create-role --role-name CWLtoKinesisFirehoseRole --assume-role-policy-document file://TrustPolicyForCWLToFireHose.json

5.     以下のサンプル JSON ファイルを使用して、IAM ポリシー (PermissionPolicyForCWLToFireHose.json など) を作成します。以下を置き換えます:YOUR-AWS-ACCT-NUM を AWS アカウント番号に置き換えます。
YOUR-RESOURCE-REGION をリソースのリージョンに置き換えます。
FirehoseSplunkDeliveryStream をストリーム名に置き換えます。

{
    "Statement":[
      {
        "Effect":"Allow",
        "Action":["firehose:*"],
        "Resource":["arn:aws:firehose:YOUR-RESOURCE-REGION:YOUR-AWS-ACCT-NUM:deliverystream/FirehoseSplunkDeliveryStream"]
      },
      {
        "Effect":"Allow",
        "Action":["iam:PassRole"],
        "Resource":["arn:aws:iam::YOUR-AWS-ACCT-NUM:role/CWLtoKinesisFirehoseRole"]
      }
    ]
}

6.     次のコマンド例を使用して、新しく作成されたロールを IAM ポリシーにアタッチします。

$ aws iam put-role-policy 
    --role-name CWLtoKinesisFirehoseRole 
    --policy-name Permissions-Policy-For-CWL 
    --policy-document file://PermissionPolicyForCWLToFireHose.json

7.     次のコマンド例を使用して、サブスクリプションフィルターを作成します。YOUR-AWS-ACCT-NUM を、お使いの AWS アカウント番号に、YOUR-RESOURCE-REGION を、お使いのリソースのリージョンに、FirehoseSplunkDeliveryStream を、お使いのストリーム名に置き換えてください。

$ aws logs put-subscription-filter 
   --log-group-name " /vpc/flowlog/FirehoseSplunk" 
   --filter-name "Destination" 
   --filter-pattern "" 
   --destination-arn "arn:aws:firehose:YOUR-RESOURCE-REGION:YOUR-AWS-ACCT-NUM:deliverystream/FirehoseSplunkDeliveryStream" 
   --role-arn "arn:aws:iam::YOUR-AWS-ACCT-NUM:role/CWLtoKinesisFirehoseRole"