如何使用 Amazon Kinesis Firehose 将 VPC 流日志推送到 Splunk?

上次更新日期:2021 年 7 月 23 日

我正在安装 Splunk 全功能转发器来分析我的 Amazon Virtual Private Cloud (Amazon VPC) 数据。我正在将数据从 AWS 源推送到 Splunk 集群进行处理,但这需要多个步骤。如何更好地将我的 AWS 数据与 Splunk 集成?

简短描述

您可以使用 Splunk 的 HTTP 事件收集器 (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 或网络负载均衡器。另外,请确保允许停用了 cookie 过期时间的基于持续时间的粘性会话。有关排查 Splunk 终端节点的任何数据流问题的更多信息,请参阅未传送到 Splunk 的数据

解决方法

先决条件

在开始之前,请完成以下先决条件:

开始创建 Kinesis Data Firehose 传输流

1.     创建传输流。对于 Source (源),请选择 Direct PUT 或其他源。

2.     选择下一步

使用 AWS Lambda 配置记录转换

1.     配置记录转换
注意:
确保为 Transform source records with AWS Lambda(使用 AWS Lambda 转换源记录)下的 Record transformation(记录转换)选择 Enabled(启用)。您必须启用此选项,因为 CloudWatch 将日志作为压缩的 .gzip 文件发送。Amazon Kinesis 必须先提取这些文件,然后才能使用它们。

2.     对于 Lambda function (Lambda 函数),选择 Create new (新建)

3.     在 Choose Lambda blueprint(选择 Lambda 蓝图)窗口中,对于 Lambda blueprint(Lambda 蓝图),选择 Kinesis Firehose CloudWatch Logs Processor

4.     选择在浏览器中打开的新选项卡以创建新的 Lambda 函数。
对于 Name (名称),输入 Lambda 函数的名称。
对于 Role (角色),请选择 Create a custom role (创建自定义角色)

5.     选择在浏览器中打开的新选项卡以创建新的 AWS Identity and Access Management (IAM) 角色。
对于 Role Name(角色名称),确保名称是 lambda_basic_execution

6.     选择 Allow(允许)以创建角色并返回 Lambda 函数配置页面。

7.     选择 Create function (创建函数),然后等待函数创建完毕。

8.     将 Timeout(超时)从默认的 3 秒增加到 1 分钟,以防止函数超时。

9.     选择 Save(保存)。

完成创建 Kinesis Data Firehose 传输流

1.     打开 Amazon Kinesis 控制台

2.     在导航窗格中选择 Data Firehose

3.     对于传输流,选择 Lambda function(Lambda 函数)。
从下拉菜单中选择新的 AWS Lambda 函数的名称。
对于 Destination(目标),选择 Splunk
输入 Splunk HEC 详细信息,包括您之前创建的 Splunk HEC 终端节点。必须使用有效的 SSL 证书终止 Splunk HEC 终端节点。使用匹配的 DNS 主机名连接到 HEC 终端节点。集群终端节点的格式是 https://YOUR-ENDPOINT.splunk.com:8088
对于 Splunk endpoint type (Splunk 终端节点类型),选择 Raw endpoint (原始终端节点),然后输入身份验证令牌。

4.     选择下一步

5.     (可选)通过选择现有存储桶或创建新存储桶,为失败的事件或所有事件创建 Amazon Simple Storage Service (Amazon S3) 备份。确保在传输流向导中配置 Amazon S3 相关设置,例如缓冲条件、压缩和加密设置以及错误日志记录选项。

6.     在 IAM role (IAM 角色) 下,选择 Create New (新建)

7.     在打开的选项卡中,输入 Role name(角色名称),然后选择 Allow(允许)。

8.     选择下一步

9.     选择 Create delivery stream(创建传输流)。

配置 VPC 流日志

如果您已经有要使用的 VPC 流日志,请跳到下一部分。

1.     打开 CloudWatch 控制台

2.     在导航窗格中,选择 Logs

3.     对于 Actions(操作),选择 Create log group(创建日志组)。

4.     输入日志组名称。

5.     选择 Create log group (创建日志组)

6.     打开 Amazon VPC 控制台

7.     在导航窗格中的 Virtual Private Cloud 下,选择 Your VPCs (您的 VPC)

8.     在内容窗格中,选择您的 VPC。

9.     选择 Flow logs (流日志) 视图。

10.    选择 Create flow log (创建流日志)
对于 Filter (筛选器),选择 All (全部)
对于 Destination log group (目标日志组),选择您刚创建的日志组。
对于 IAM role(IAM 角色),选择允许您的 VPC 将日志发布到 CloudWatch 的 IAM 角色。
注意:
如果您没有合适的 IAM 角色,请在 IAM role(IAM 角色)下选择 Set Up Permissions(设置权限)。选择 Create a new IAM role(创建新 IAM 角色)。保留所选的默认设置。选择 Allow(允许)以创建角色 VPCFlowLogs 并将其与目标日志组关联。

11.    选择 Create(创建)以创建您的 VPC 流日志。

12.    建立从日志组到传输流的实时订阅源。
有关 AWS Lambda 说明,请参阅访问 AWS Lambda 的 Amazon CloudWatch Logs。有关 Amazon OpenSearch 服务的说明,请参阅将 CloudWatch Logs 数据流处理到 Amazon OpenSearch 服务
对于 Kinesis Data Firehose,请使用以下说明在 AWS Command Line Interface (AWS CLI) 中创建 CloudWatch Logs 订阅。

注意:如果您在运行 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"