收集 Amazon VPC Transit Gateway 流日志
解析器版本:3.0
本文档介绍了如何使用 Amazon S3 或 Amazon Kinesis Data Firehose 将 Amazon VPC Transit Gateway 流日志注入到 Google Security Operations 中。Transit Gateway 流日志可捕获 Transit Gateway 附件中的详细网络流量元数据(来源和目标 IP、端口、协议、字节数和数据包数、操作)。这些数据可在 Google SecOps 中实现安全监控、异常检测和合规性审核。
准备工作
请确保满足以下前提条件:
- Google SecOps 实例。
- 具有以下权限的 AWS 特权访问权限:
- 创建和管理传输网关流日志
- 创建 S3 存储分区(对于 S3 导出选项)
- 创建 IAM 用户、政策和角色
- 配置 Kinesis Data Firehose 传送数据流(对于 Firehose 选项)
- 访问 CloudWatch Logs 并创建订阅过滤条件(适用于 Firehose 选项)
选项 - 导出到 Amazon S3
启用传输网关流日志(到 S3)
- 访问 https://console.aws.amazon.com/vpc/,打开 Amazon VPC 控制台。
- 在导航窗格中,选择传输网关。
- 选中一个或多个传输网关对应的复选框,然后依次选择操作 > 创建流日志。
- 在目标位置部分,选择发送到 Amazon S3 存储桶。
在 S3 存储桶 ARN 字段中,输入现有 S3 存储桶的 ARN(例如
arn:aws:s3:::tgw-flowlogs-bucket)。对于日志记录格式,请选择流日志记录的格式:
- AWS 默认格式 - 包含版本 2 到版本 6 的所有字段。
- 自定义格式 - 仅选择所需的字段。
在日志文件格式部分,选择文本(默认)或 Parquet。
对于 Hive 兼容的 S3 前缀,您可以选择启用以使用 Hive 兼容的前缀进行分区。
对于按时间对日志进行分区,请选择每 1 小时 (60 分钟) 或每 24 小时 (1440 分钟)。
(可选)选择添加新标记,以将标记应用于流日志。
点击创建流日志。
创建 Amazon S3 存储桶
- 打开 Amazon S3 控制台。
- 点击创建存储分区。
- 提供以下配置详细信息:
- 存储分区名称:输入一个唯一名称(例如
tgw-flowlogs-bucket) - AWS 区域:选择您的 Transit Gateway 所在的同一区域
- 存储分区名称:输入一个唯一名称(例如
- 点击创建存储分区。
创建可访问 Amazon S3 的 IAM 用户
- 打开 IAM 控制台。
- 依次点击用户> 添加用户。
- 输入用户名(例如
chronicle-tgw-s3-reader)。 - 选择以编程方式访问。
- 点击 Next: Permissions。
- 选择 Attach existing policies directly。
- 搜索并选择 AmazonS3ReadOnlyAccess 政策。
- 依次点击 Next: Tags > Next: Review > Create user。
- 复制 Access Key ID 和 Secret Access Key 以用于 Google SecOps Feed 配置。
在 Google SecOps 中配置 Feed 以注入 Amazon VPC Transit Gateway 流日志 (S3)
- 依次前往 SIEM 设置 > Feed。
- 点击添加新 Feed。
- 在 Feed 名称字段中,输入 Feed 的名称(例如
AWS Transit Gateway Flow Logs - S3)。 - 选择 Amazon S3 作为来源类型。
- 选择 Amazon VPC 传输网关流日志作为日志类型。
- 点击下一步。
为以下输入参数指定值:
- S3 URI:存储桶 URI(例如
s3://tgw-flowlogs-bucket/flow-logs/)
- 来源删除选项:根据您的偏好选择删除选项:
- 永不:转移后永不删除任何文件。
- 删除已转移的文件:在成功转移后删除文件。
- 删除已转移的文件和空目录:成功转移后删除文件和空目录。
- 文件存在时间上限:包含在过去指定天数内修改的文件(默认值为 180 天)
- 访问密钥 ID:具有 S3 存储桶访问权限的 IAM 用户访问密钥
- Secret Access Key:具有 S3 存储桶访问权限的 IAM 用户密钥
- 资产命名空间:资产命名空间
- 注入标签:要应用于此 Feed 中事件的标签
- S3 URI:存储桶 URI(例如
点击下一步。
检查 Feed 配置,然后点击提交。
选项 - 通过 Amazon Kinesis Data Firehose 进行流式传输
启用 Transit Gateway 流日志(到 CloudWatch Logs)
- 访问 https://console.aws.amazon.com/vpc/,打开 Amazon VPC 控制台。
- 在导航窗格中,选择传输网关。
- 选中一个或多个传输网关对应的复选框,然后依次选择操作 > 创建流日志。
- 对于目标,选择发送到 CloudWatch Logs。
对于目标日志组,请选择现有日志组或输入新名称以创建日志组(例如
/aws/tgw/flowlogs)。对于 IAM 角色,请指定具有将日志发布到 CloudWatch Logs 的权限的角色。
对于日志记录格式,请选择流日志记录的格式:
- AWS 默认格式 - 包含版本 2 到版本 6 的所有字段。
- 自定义格式 - 仅选择所需的字段。
(可选)选择添加新标记,以将标记应用于流日志。
点击创建流日志。
在 Google SecOps 中创建 Feed 以注入 Amazon VPC Transit Gateway 流日志 (Firehose)
- 依次前往 SIEM 设置 > Feed。
- 点击添加新 Feed。
- 在 Feed 名称字段中,输入 Feed 的名称(例如
AWS Transit Gateway Flow Logs - Firehose)。 - 选择 Amazon Data Firehose 作为来源类型。
- 选择 Amazon VPC 传输网关流日志作为日志类型。
- 点击下一步。
- 为以下输入参数指定值:
- 拆分分隔符:输入
\n - 资产命名空间:资产命名空间
- 注入标签:要应用于此 Feed 中事件的标签
- 拆分分隔符:输入
- 点击下一步。
- 检查 Feed 配置,然后点击提交。
- 点击生成密钥,生成用于对此 Feed 进行身份验证的密钥。
- 复制并保存密钥。您将无法再查看此密钥。
- 点击详细信息标签页。
- 从端点信息字段复制 Feed 端点网址。
- 点击完成。
为 Amazon Data Firehose Feed 创建 API 密钥
- 前往 https://console.cloud.google.com/apis/credentials,进入 Google Cloud 控制台的凭据页面。
- 点击创建凭据,然后选择 API 密钥。
- 点击修改 API 密钥以限制密钥。
- 在 API 限制下,选择限制密钥。
- 搜索并选择 Google SecOps API。
- 点击保存。
- 复制并保存 API 密钥。
构建端点网址
以以下格式将 API 密钥附加到 Feed 端点网址:
<FEED_ENDPOINT_URL>?key=<API_KEY>
替换以下内容:
<FEED_ENDPOINT_URL>:Feed 端点网址<API_KEY>:API 密钥示例:
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...
保存此完整网址以供在下一步中使用。
为 Firehose 创建 IAM 政策
- 在 AWS 控制台中,依次前往 IAM > 政策 > 创建政策 > JSON 标签页。
粘贴以下政策 JSON:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "firehose:PutRecord", "firehose:PutRecordBatch" ], "Resource": "arn:aws:firehose:<REGION>:<ACCOUNT_ID>:deliverystream/<DELIVERY_STREAM_NAME>" } ] }替换以下内容:
<REGION>:您的 AWS 区域(例如us-east-1)<ACCOUNT_ID>:您的 AWS 账号 ID(12 位数字)<DELIVERY_STREAM_NAME>:您的 Firehose 传送流名称(您将在下一步中创建此名称)
为政策命名
TGWFlowLogsToFirehosePolicy(例如),然后点击创建政策。
为 CloudWatch Logs 创建 IAM 角色
- 依次前往 IAM > 角色 > 创建角色。
选择自定义信任政策,然后粘贴以下内容:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logs.<REGION>.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }将
<REGION>替换为您的 AWS 区域。点击下一步。
搜索并选择政策
TGWFlowLogsToFirehosePolicy。点击下一步。
将角色命名为
TGWFlowLogsToFirehoseRole(例如),然后点击创建角色。
创建 Kinesis Data Firehose 传送数据流
- 在 AWS 控制台中,依次前往 Kinesis > Data Firehose > 创建交付流。
提供以下配置详细信息:
来源和目的地:
- 来源:选择直接 PUT 或其他来源
- 目的地:选择 HTTP 端点
交付数据流名称:
- 交付数据流名称:输入一个名称(例如
tgw-flowlogs-to-secops)
- 交付数据流名称:输入一个名称(例如
HTTP 端点目标:
- HTTP 端点网址:输入您构建的完整端点网址(Feed 端点 + API 密钥)
- 内容编码:选择 GZIP
自定义 HTTP 标头:
- 点击添加自定义 HTTP 标头
- 标头名称:输入
X-Goog-Chronicle-Auth - 标头值:输入您在 Feed 创建步骤中保存的密钥
备份设置:
- Amazon S3 中的源记录备份:选择仅备份失败的数据
- S3 存储桶:选择现有存储桶或创建新存储桶来存储失败的记录
缓冲提示:
- 缓冲区大小:输入
1MiB - 缓冲间隔:输入
60秒
- 缓冲区大小:输入
点击创建交付数据流。
等待交付流状态变为有效。
将 CloudWatch 日志组订阅到 Firehose
- 在 AWS 管理控制台中,依次前往 CloudWatch > 日志 > 日志组。
- 选择 Transit Gateway 流日志组(例如
/aws/tgw/flowlogs)。 - 点击订阅过滤条件标签页。
- 依次点击创建 > 创建 Amazon Kinesis Data Firehose 订阅过滤器。
- 提供以下配置详细信息:
- 目标:选择交付数据流
tgw-flowlogs-to-secops - 授予权限:选择角色
TGWFlowLogsToFirehoseRole - 订阅过滤条件名称:输入一个名称(例如
tgw-flowlogs-to-chronicle) - 日志格式:选择其他
- 订阅过滤模式:留空可发送所有事件
- 目标:选择交付数据流
- 点击开始直播。
UDM 映射表
| 日志字段 | UDM 映射 | 逻辑 |
|---|---|---|
packets_lost_blackhole_label |
additional.fields |
已合并 |
packets_lost_mtu_exceeded_label |
additional.fields |
已合并 |
packets_lost_no_route_label |
additional.fields |
已合并 |
packets_lost_ttl_expired_label |
additional.fields |
已合并 |
start_time_label |
additional.fields |
已合并 |
tcp_flags_label |
additional.fields |
已合并 |
tgw_attachment_id_label |
additional.fields |
已合并 |
tgw_id_label |
additional.fields |
已合并 |
tgw_pair_attachment_id_label |
additional.fields |
已合并 |
type_label |
additional.fields |
已合并 |
end_time |
metadata.event_timestamp |
解析为 UNIX |
event_type |
metadata.event_type |
直接映射 |
account_id |
metadata.product_log_id |
直接映射 |
version |
metadata.product_version |
直接映射 |
flow_direction |
network.direction |
已映射:(?i)ingress → INBOUND,(?i)egress → OUTBOUND |
bytes |
network.sent_bytes |
直接映射 |
packets |
network.sent_packets |
直接映射 |
tgw_src_eni |
principal.asset.asset_id |
直接映射 |
srcaddr |
principal.asset.ip |
已合并 |
srcaddr |
principal.ip |
已合并 |
region |
principal.location.country_or_region |
直接映射 |
tgw_src_az_id |
principal.location.country_or_region |
直接映射 |
srcport |
principal.port |
直接映射 |
pkt_src_aws_service_label |
principal.resource.attribute.labels |
已合并 |
tgw_src_az_id_label |
principal.resource.attribute.labels |
已合并 |
tgw_src_subnet_id |
principal.resource.name |
直接映射 |
tgw_src_vpc_id |
principal.resource.product_object_id |
直接映射 |
resource_type |
principal.resource.resource_subtype |
直接映射 |
tgw_src_vpc_account_id |
principal.user.userid |
直接映射 |
security_result_action |
security_result.action |
已合并 |
protocol_label |
security_result.detection_fields |
已合并 |
tgw_dst_eni |
target.asset.asset_id |
直接映射 |
dstaddr |
target.asset.ip |
已合并 |
dstaddr |
target.ip |
已合并 |
tgw_dst_az_id |
target.location.country_or_region |
直接映射 |
dstport |
target.port |
直接映射 |
pkt_dst_aws_service_label |
target.resource.attribute.labels |
已合并 |
tgw_dst_subnet_id |
target.resource.name |
直接映射 |
tgw_dst_vpc_id |
target.resource.product_object_id |
直接映射 |
tgw_dst_vpc_account_id |
target.user.userid |
直接映射 |
| 不适用 | metadata.product_name |
常量:AWS VPC Transit Gateway |
| 不适用 | metadata.vendor_name |
常量:AWS |
| 不适用 | network.direction |
常量:INBOUND |
更新日志
需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。