收集 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 集群生成性能日志事件。

在账号级层启用容器数据分析

  1. 访问 https://console.aws.amazon.com/ecs/v2,登录 Amazon ECS 控制台
  2. 在导航窗格中,选择账号设置
  3. 点击更新
  4. 选择具有增强可观测性的 Container Insights
  5. 点击保存更改
  6. 在确认界面上,点击确认

在现有集群上启用容器洞察

  • 如需更新现有 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
    

要进行验证,请执行以下操作:

  1. AWS 管理控制台中,依次前往 CloudWatch > 日志 > 日志组
  2. 搜索 /aws/ecs/containerinsights/
  3. 确认已为启用容器数据分析的每个 ECS 集群创建日志组。

配置 AWS S3 存储桶

  1. 按照本用户指南创建 Amazon S3 存储桶创建存储桶
  2. 保存存储桶名称区域以供日后参考(例如 ecs-metrics-to-secops)。

为 Amazon Data Firehose 配置 IAM 角色

Amazon Data Firehose 需要 IAM 角色才能将日志写入 S3 存储桶。

创建 IAM 政策

  1. AWS 控制台中,依次前往 IAM > 政策 > 创建政策
  2. 选择 JSON 标签页。
  3. 粘贴以下政策(将 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:*"
            }
        ]
    }
    
  4. 点击下一步

  5. 政策名称字段中,输入 ECSMetricsFirehoseS3Policy

  6. 点击创建政策

创建 IAM 角色

  1. 依次前往 IAM > 角色 > 创建角色
  2. 选择自定义信任政策
  3. 粘贴以下信任政策:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": "firehose.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    
  4. 点击下一步

  5. 搜索并选择 ECSMetricsFirehoseS3Policy

  6. 点击下一步

  7. 角色名称字段中,输入 ECSMetricsFirehoseToS3Role

  8. 点击 Create role

创建 Amazon Data Firehose 流

  1. 访问 https://console.aws.amazon.com/kinesis,打开 Kinesis 控制台
  2. 在导航窗格中,选择 Amazon Data Firehose
  3. 点击创建 Firehose 数据流
  4. 选择来源和目标下,提供以下配置:
    • 来源:选择 Direct PUT
    • 目标:选择 Amazon S3
  5. Firehose 流名称字段中,输入 ecs-metrics-to-secops
  6. 转换记录下,在从 Amazon CloudWatch Logs 解压缩源记录部分中:

    1. 选择开启解压缩
    2. 请勿选择开启消息提取功能
  7. 目标设置下:

    • S3 存储桶:选择 S3 存储桶 ecs-metrics-to-secops
    • S3 存储桶前缀(可选):输入 ecs-metrics/
    • S3 存储桶错误输出前缀(可选):输入 firehose-errors/
  8. 缓冲区提示下:

    • 缓冲区空间5 MiB(默认)。
    • 缓冲区间300 秒(默认)。
  9. 高级设置下:

    • 服务器端加密:可选。如果需要加密,请启用。
    • 错误日志记录:选择已启用(推荐)。
    • 权限:选择选择现有 IAM 角色,然后选择 ECSMetricsFirehoseToS3Role
  10. 点击创建 Firehose 数据流

  11. 等待数据流状态显示为有效

为 CloudWatch Logs 配置 IAM 角色

CloudWatch Logs 需要 IAM 角色才能将日志数据发送到 Firehose 流。

创建 IAM 政策

  1. 依次前往 IAM > 政策 > 创建政策
  2. 选择 JSON 标签页。
  3. 粘贴以下政策(将 <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"
            }
        ]
    }
    
  4. 点击下一步

  5. 政策名称字段中,输入 ECSMetricsCWLtoFirehosePolicy

  6. 点击创建政策

创建 IAM 角色

  1. 依次前往 IAM > 角色 > 创建角色
  2. 选择自定义信任政策
  3. 粘贴以下信任政策(将 <region> 替换为您的 AWS 区域):

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": "logs.<region>.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    
  4. 点击下一步

  5. 搜索并选择 ECSMetricsCWLtoFirehosePolicy

  6. 点击下一步

  7. 角色名称字段中,输入 ECSMetricsCWLtoFirehoseRole

  8. 点击 Create role

创建 CloudWatch Logs 订阅过滤条件

  1. AWS 管理控制台中,依次前往 CloudWatch > 日志 > 日志组
  2. 选择日志组 /aws/ecs/containerinsights/your-cluster-name/performance
  3. 选择订阅过滤条件标签页。
  4. 依次点击创建 > 创建 Amazon Data Firehose 订阅过滤器
  5. 提供以下配置详细信息:
    • 目标:选择 Firehose 流 ecs-metrics-to-secops
    • 授予权限:选择角色 ECSMetricsCWLtoFirehoseRole
    • 订阅过滤条件名称:输入一个描述性名称(例如 ecs-metrics-to-secops-filter)。
    • 日志格式:选择其他
    • 订阅过滤模式:留空可发送所有容器洞察性能事件。
  6. 点击开始直播

为 Google SecOps 配置 IAM 用户

Google SecOps 需要一个有权访问 S3 存储桶的 IAM 用户来注入交付的日志。

  1. 按照以下用户指南创建用户创建 IAM 用户
  2. 选择创建的用户
  3. 选择安全凭据标签页。
  4. 访问密钥部分中,点击创建访问密钥
  5. 选择第三方服务作为使用情形
  6. 点击下一步
    • 可选:添加说明标记。
  7. 点击创建访问密钥
  8. 点击下载 .csv 文件以保存访问密钥密钥,供日后参考。
  9. 点击完成
  10. 选择权限标签页。
  11. 权限政策部分中,点击添加权限
  12. 选择添加权限
  13. 选择直接附加政策
  14. 搜索 AmazonS3FullAccess 政策。
  15. 选择相应政策。
  16. 点击下一步
  17. 点击添加权限

在 Google SecOps 中配置 Feed 以注入 AWS ECS 指标日志

  1. 依次前往 SIEM 设置 > Feed
  2. 点击添加新 Feed
  3. 在下一页上,点击配置单个 Feed
  4. Feed 名称输入一个唯一名称。
  5. 选择 Amazon S3 V2 作为来源类型
  6. 选择 AWS ECS 指标作为日志类型
  7. 点击下一步,然后点击提交
  8. 为以下字段指定值:
    • S3 URIs3://ecs-metrics-to-secops/ecs-metrics/
    • 来源删除选项:根据您的偏好选择删除选项
    • 文件存在时间上限:包含在过去指定天数内修改的文件(默认值为 180 天)
    • 访问密钥 ID:有权访问 S3 存储桶的用户访问密钥
    • 私有访问密钥:具有 S3 存储桶访问权限的用户私有密钥
    • 资产命名空间资产命名空间
    • 注入标签:要应用于此 Feed 中事件的标签
  9. 点击下一步,然后点击提交

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 已映射:trueSTATUS_UPDATEtrueNETWORK_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"INFORMATIONALDEBUG → `LO...
target_port target.port 直接映射
url target.url 直接映射
不适用 metadata.event_type 常量:STATUS_UPDATE
不适用 security_result.severity 常量:CRITICAL

更新日志

查看相应解析器的更改日志

需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。