收集 AWS ECS 指标日志
解析器版本:1.0
本文档介绍了如何使用 Amazon S3 将 AWS ECS 指标日志注入到 Google Security Operations。
Amazon Elastic Container Service (Amazon ECS) 是一项全代管式式容器编排服务,可帮助您部署、管理和扩缩容器化应用。CloudWatch Container Insights 会从 ECS 集群、服务、任务和容器中收集、汇总和总结指标和日志,包括 CPU 利用率、内存用量、网络流量和存储 I/O。此集成使用 Amazon Data Firehose 将 Container Insights 性能日志事件从 CloudWatch Logs 流式传输到 S3 存储桶,然后 Google SecOps 使用 Amazon S3 V2 Feed 提取这些事件。
准备工作
请确保满足以下前提条件:
- Google SecOps 实例
- 对 AWS 管理控制台的特权访问权限,并拥有以下管理权限:
- Amazon ECS(集群、账号设置)
- Amazon CloudWatch Logs(日志组、订阅过滤器)
- Amazon Data Firehose(传送流)
- Amazon S3(存储分区)
- AWS IAM(角色、政策、用户)
在 Amazon ECS 上启用容器数据分析
必须启用容器洞察,才能在 CloudWatch Logs 中为 ECS 集群生成性能日志事件。
在账号级层启用容器数据分析
- 访问 https://console.aws.amazon.com/ecs/v2,登录 Amazon ECS 控制台。
- 在导航窗格中,选择账号设置。
- 点击更新。
- 选择具有增强可观测性的 Container Insights。
- 点击保存更改。
在确认界面上,点击确认。
在现有集群上启用容器洞察
如需更新现有 ECS 集群,请运行以下 AWS CLI 命令(将
your-cluster-name替换为您的集群名称):aws ecs update-cluster-settings --cluster your-cluster-name --settings name=containerInsights,value=enhanced
验证 CloudWatch 日志组
启用容器洞察后,Amazon ECS 会自动创建一个 CloudWatch Logs 日志组,其命名惯例如下:
/aws/ecs/containerinsights/your-cluster-name/performance
要进行验证,请执行以下操作:
- 在 AWS 管理控制台中,依次前往 CloudWatch > 日志 > 日志组。
- 搜索
/aws/ecs/containerinsights/。 - 确认已为启用容器数据分析的每个 ECS 集群创建日志组。
配置 AWS S3 存储桶
- 按照本用户指南创建 Amazon S3 存储桶:创建存储桶。
- 保存存储桶名称和区域以供日后参考(例如
ecs-metrics-to-secops)。
为 Amazon Data Firehose 配置 IAM 角色
Amazon Data Firehose 需要 IAM 角色才能将日志写入 S3 存储桶。
创建 IAM 政策
- 在 AWS 控制台中,依次前往 IAM > 政策 > 创建政策。
- 选择 JSON 标签页。
粘贴以下政策(将
ecs-metrics-to-secops替换为您的实际存储桶名称):{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3Delivery", "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::ecs-metrics-to-secops", "arn:aws:s3:::ecs-metrics-to-secops/*" ] }, { "Sid": "CloudWatchLogging", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:log-group:/aws/kinesisfirehose/ecs-metrics-to-secops:log-stream:*" } ] }点击下一步。
在政策名称字段中,输入
ECSMetricsFirehoseS3Policy。点击创建政策。
创建 IAM 角色
- 依次前往 IAM > 角色 > 创建角色。
- 选择自定义信任政策。
粘贴以下信任政策:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "firehose.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }点击下一步。
搜索并选择 ECSMetricsFirehoseS3Policy。
点击下一步。
在角色名称字段中,输入
ECSMetricsFirehoseToS3Role。点击 Create role。
创建 Amazon Data Firehose 流
- 访问 https://console.aws.amazon.com/kinesis,打开 Kinesis 控制台。
- 在导航窗格中,选择 Amazon Data Firehose。
- 点击创建 Firehose 数据流。
- 在选择来源和目标下,提供以下配置:
- 来源:选择 Direct PUT。
- 目标:选择 Amazon S3。
- 在 Firehose 流名称字段中,输入
ecs-metrics-to-secops。 在转换记录下,在从 Amazon CloudWatch Logs 解压缩源记录部分中:
- 选择开启解压缩。
- 请勿选择开启消息提取功能。
在目标设置下:
- S3 存储桶:选择 S3 存储桶
ecs-metrics-to-secops。 - S3 存储桶前缀(可选):输入
ecs-metrics/。 - S3 存储桶错误输出前缀(可选):输入
firehose-errors/。
- S3 存储桶:选择 S3 存储桶
在缓冲区提示下:
- 缓冲区空间:
5MiB(默认)。 - 缓冲区间:
300秒(默认)。
- 缓冲区空间:
在高级设置下:
- 服务器端加密:可选。如果需要加密,请启用。
- 错误日志记录:选择已启用(推荐)。
- 权限:选择选择现有 IAM 角色,然后选择
ECSMetricsFirehoseToS3Role。
点击创建 Firehose 数据流。
等待数据流状态显示为有效。
为 CloudWatch Logs 配置 IAM 角色
CloudWatch Logs 需要 IAM 角色才能将日志数据发送到 Firehose 流。
创建 IAM 政策
- 依次前往 IAM > 政策 > 创建政策。
- 选择 JSON 标签页。
粘贴以下政策(将
<region>和<account-id>替换为您的 AWS 区域和账号 ID):{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "firehose:PutRecord", "firehose:PutRecordBatch" ], "Resource": "arn:aws:firehose:<region>:<account-id>:deliverystream/ecs-metrics-to-secops" } ] }点击下一步。
在政策名称字段中,输入
ECSMetricsCWLtoFirehosePolicy。点击创建政策。
创建 IAM 角色
- 依次前往 IAM > 角色 > 创建角色。
- 选择自定义信任政策。
粘贴以下信任政策(将
<region>替换为您的 AWS 区域):{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logs.<region>.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }点击下一步。
搜索并选择 ECSMetricsCWLtoFirehosePolicy。
点击下一步。
在角色名称字段中,输入
ECSMetricsCWLtoFirehoseRole。点击 Create role。
创建 CloudWatch Logs 订阅过滤条件
- 在 AWS 管理控制台中,依次前往 CloudWatch > 日志 > 日志组。
- 选择日志组
/aws/ecs/containerinsights/your-cluster-name/performance。 - 选择订阅过滤条件标签页。
- 依次点击创建 > 创建 Amazon Data Firehose 订阅过滤器。
- 提供以下配置详细信息:
- 目标:选择 Firehose 流
ecs-metrics-to-secops。 - 授予权限:选择角色
ECSMetricsCWLtoFirehoseRole。 - 订阅过滤条件名称:输入一个描述性名称(例如
ecs-metrics-to-secops-filter)。 - 日志格式:选择其他。
- 订阅过滤模式:留空可发送所有容器洞察性能事件。
- 目标:选择 Firehose 流
点击开始直播。
为 Google SecOps 配置 IAM 用户
Google SecOps 需要一个有权访问 S3 存储桶的 IAM 用户来注入交付的日志。
- 按照以下用户指南创建用户:创建 IAM 用户。
- 选择创建的用户。
- 选择安全凭据标签页。
- 在访问密钥部分中,点击创建访问密钥。
- 选择第三方服务作为使用情形。
- 点击下一步。
- 可选:添加说明标记。
- 点击创建访问密钥。
- 点击下载 .csv 文件以保存访问密钥和密钥,供日后参考。
- 点击完成。
- 选择权限标签页。
- 在权限政策部分中,点击添加权限。
- 选择添加权限。
- 选择直接附加政策。
- 搜索 AmazonS3FullAccess 政策。
- 选择相应政策。
- 点击下一步。
- 点击添加权限。
在 Google SecOps 中配置 Feed 以注入 AWS ECS 指标日志
- 依次前往 SIEM 设置 > Feed。
- 点击添加新 Feed。
- 在下一页上,点击配置单个 Feed。
- 为Feed 名称输入一个唯一名称。
- 选择 Amazon S3 V2 作为来源类型。
- 选择 AWS ECS 指标作为日志类型。
- 点击下一步,然后点击提交。
- 为以下字段指定值:
- S3 URI:
s3://ecs-metrics-to-secops/ecs-metrics/ - 来源删除选项:根据您的偏好选择删除选项
- 文件存在时间上限:包含在过去指定天数内修改的文件(默认值为 180 天)
- 访问密钥 ID:有权访问 S3 存储桶的用户访问密钥
- 私有访问密钥:具有 S3 存储桶访问权限的用户私有密钥
- 资产命名空间:资产命名空间
- 注入标签:要应用于此 Feed 中事件的标签
- S3 URI:
- 点击下一步,然后点击提交。
UDM 映射表
| 日志字段 | UDM 映射 | 逻辑 |
|---|---|---|
cluster_rtt_ClusterId_label |
additional.fields |
已合并 |
cluster_rtt_description_label |
additional.fields |
已合并 |
compressed_label |
additional.fields |
已合并 |
connectionID_localvalue_label |
additional.fields |
已合并 |
connectionID_serverValue_label |
additional.fields |
已合并 |
request_id_label |
additional.fields |
已合并 |
source_label |
additional.fields |
已合并 |
Time |
metadata.event_timestamp |
解析为 RFC 3339 |
has_principal |
metadata.event_type |
已映射:true → STATUS_UPDATE、true → NETWORK_CONNECTION |
connection |
metadata.product_event_type |
直接映射 |
sent_bytes |
network.sent_bytes |
直接映射 |
hostname |
principal.asset.hostname |
直接映射 |
principal_ip |
principal.asset.ip |
已合并 |
hostname |
principal.hostname |
直接映射 |
principal_ip |
principal.ip |
已合并 |
principal_port |
principal.port |
直接映射 |
action |
security_result.action |
已合并 |
severity |
security_result.severity |
映射:"ALERT", "EMERGENCY" → HIGH、"INFO", "NOTICE" → INFORMATIONAL、DEBUG → `LO... |
target_port |
target.port |
直接映射 |
url |
target.url |
直接映射 |
| 不适用 | metadata.event_type |
常量:STATUS_UPDATE |
| 不适用 | security_result.severity |
常量:CRITICAL |
更新日志
需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。