收集 AWS EC2 主机日志

解析器版本:1.0

支持:

本文档介绍了如何将 AWS EC2 主机日志集成到 Google Security Operations 中,以便进行监控和分析。集成涉及将 EC2 主机日志解析并映射到统一数据模型 (UDM)、执行数据转换,以及在 EC2 主机和实例之间创建关系。这些日志提供有关实例、主机属性、实例类型和性能指标的宝贵信息,可用于安全监控、审核和合规性。

准备工作

  • 确保您拥有 Google SecOps 实例。
  • 确保您拥有对 AWS 的特权访问权限。

配置 AWS IAM 和 S3

  1. 按照以下用户指南创建 Amazon S3 存储桶:创建存储桶。
  2. 保存存储桶名称和区域以备后用。
  3. 按照以下用户指南创建用户:创建 IAM 用户。
  4. 选择创建的用户。
  5. 选择安全凭证标签页。
  6. 在访问密钥部分中,点击创建访问密钥。
  7. 选择第三方服务作为用例。
  8. 点击下一步。
  9. 可选:添加说明标记。
  10. 点击创建访问密钥。
  11. 点击 Download CSV file(下载 CSV 文件),保存访问密钥和密钥以供日后使用。
  12. 点击完成。
  13. 选择权限标签页。
  14. 在权限政策部分中,点击添加权限。
  15. 选择添加权限。
  16. 选择直接附加政策
  17. 搜索并选择 AmazonS3FullAccess 政策。
  18. 点击下一步。
  19. 点击添加权限。

为 AWS KMS 配置 CloudTrail

  1. 登录 AWS Management Console。
  2. 在搜索栏中,输入并从服务列表中选择 CloudTrail。
  3. 点击创建轨迹。
  4. 提供轨迹名称,例如 EC2-Activity-Trail。
  5. 选中为我组织中的所有账号启用复选框。
  6. 输入之前创建的 S3 存储桶 URI(格式应为:s3://your-log-bucket-name/),或创建一个新的 S3 存储桶。
  7. 如果启用了 SSE-KMS,请提供 AWS KMS 别名,或选择现有的 AWS KMS 密钥。
  8. 您可以将其他设置保留为默认值。
  9. 点击下一步。
  10. 在事件类型下,选择管理事件和数据事件,以捕获 EC2 主机活动。
  11. 点击下一步。
  12. 在检查并创建中检查设置。
  13. 点击 Create trail(创建跟踪记录)。
  14. 可选:如果您创建了新存储桶,请继续执行以下流程:
    • 前往 S3。
    • 找到并选择新创建的日志存储桶。
    • 选择 AWSLogs 文件夹。
    • 点击复制 S3 URI 并保存。

在 Google SecOps 中配置 Feed 以注入 AWS EC2 主机

  1. 前往 SIEM 设置 > Feed。
  2. 点击新增。
  3. 在 Feed 名称字段中,输入 Feed 的名称,例如 AWS EC2 主机日志。
  4. 选择 Amazon S3 V2 作为来源类型。
  5. 选择 AWS EC2 主机作为日志类型。
  6. 点击下一步。
  7. 为以下输入参数指定值:

    • S3 URI:存储桶 URI。
      • s3://your-log-bucket-name/
        • 将 your-log-bucket-name 替换为存储桶的实际名称。
    • 源删除选项:根据您的偏好选择删除选项。

    • 文件存在时间上限:包含过去指定天数内修改过的文件。默认值为 180 天。

    • 访问密钥 ID:有权访问 S3 存储桶的用户访问密钥。

    • 私有访问密钥:有权访问 S3 存储桶的用户密钥。

    • 资产命名空间:资产命名空间。

    • 注入标签:要应用于此 Feed 中事件的标签。

  8. 点击下一步。

  9. 在最终确定界面中查看新的 Feed 配置,然后点击提交。

支持的 AWS EC2 主机日志格式

AWS EC2 主机解析器支持 JSON 格式的日志。

支持的 AWS EC2 主机示例日志

  • JSON

      {
        "AllocationTime": "2018-01-23T12:33:31.692Z",
        "AllowsMultipleInstanceTypes": "",
        "AssetID": "",
        "AutoPlacement": "off",
        "AvailabilityZone": "us-east-1a",
        "AvailabilityZoneID": "",
        "AvailableCapacity": {
          "VCPUs": 96,
          "Instance": {
            "Available": 48,
            "Total": 48,
            "Type": "m5.large"
          }
        },
        "ClientToken": "",
        "ID": "h-05abcdd12ee9ca123",
        "Maintenance": "",
        "Properties": {
          "Cores": 48,
          "InstanceFamily": "",
          "InstanceType": "m5.large",
          "Sockets": 2,
          "TotalVCPUs": 96
        },
        "Recovery": "off",
        "ReservationID": "",
        "Instances": null,
        "MemberOfServiceLinkedResourceGroup": false,
        "OutpostARN": "",
        "OwnerID": "",
        "ReleaseTime": "",
        "State": "available",
        "TagSet": null
      }
    

UDM 映射表

日志字段 UDM 映射 逻辑
AllocationTime entity.metadata.creation_timestamp AllocationTime 字段会被解析为时间戳,并映射到 creation_timestamp 字段。解析器会尝试各种格式(yyyy-MM-dd HH:mm:ss、RFC 3339、UNIX、ISO8601)。
AllowsMultipleInstanceTypes entity.entity.asset.attribute.labels.value 原始日志中的 AllowsMultipleInstanceTypes 值用作标签的值。相应标签的键设置为 allows_multiple_instance_types。
AutoPlacement entity.entity.asset.attribute.labels.value 原始日志中的 AutoPlacement 值用作标签的值。相应标签的键设置为 auto_placement。
AvailabilityZone entity.entity.asset.attribute.cloud.availability_zone AvailabilityZone 字段直接映射到 availability_zone 字段。
AvailabilityZoneID entity.entity.asset.attribute.labels.value 原始日志中的 AvailabilityZoneID 值用作标签的值。相应标签的键设置为 availability_zone_id。
AvailableCapacity.AvailableInstanceCapacity.AvailableCapacity entity.entity.asset.attribute.labels.value AvailableCapacity.AvailableInstanceCapacity.AvailableCapacity(或重命名后的 AvailableCapacity.Instance.Available)的值会转换为字符串,并用作标签的值。该键设置为 available_instance_capacity_available_capacity。
AvailableCapacity.AvailableInstanceCapacity.InstanceType entity.entity.asset.attribute.labels.value AvailableCapacity.AvailableInstanceCapacity.InstanceType(或重命名后的 AvailableCapacity.Instance.Type)的值用作标签的值。键设置为 available_instance_capacity_instance_type。
AvailableCapacity.AvailableInstanceCapacity.TotalCapacity entity.entity.asset.attribute.labels.value AvailableCapacity.AvailableInstanceCapacity.TotalCapacity(或重命名后的 AvailableCapacity.Instance.Total)的值会转换为字符串,并用作标签的值。键设置为 total_capacity。
AvailableCapacity.AvailableVCpus entity.entity.asset.attribute.labels.value AvailableCapacity.AvailableVCpus(或重命名后的 AvailableCapacity.VCPUs)的值会转换为字符串,并用作标签的值。键设置为 available_v_cpus。
ClientToken entity.entity.asset.attribute.labels.value 原始日志中的 ClientToken 值用作标签的值。相应标签的键设置为 client_token。
HostID entity.metadata.product_entity_id HostID(或重命名后的 ID)字段直接映射到 product_entity_id 字段。
HostID entity.entity.asset.asset_id HostID(或重命名后的 ID)字段直接映射到 asset_id 字段。
HostMaintenance entity.entity.asset.attribute.labels.value 原始日志中的 HostMaintenance(或重命名后的 Maintenance)值用作标签的值。相应标签的键设置为 host_maintenance。
HostProperties.Cores entity.entity.asset.hardware.cpu_number_cores HostProperties.Cores 的值会转换为无符号整数并映射到 cpu_number_cores。
HostProperties.InstanceFamily entity.entity.asset.attribute.labels.value 原始日志中的 HostProperties.InstanceFamily 值用作标签的值。相应标签的键设置为 host_properties_instance_family。
HostProperties.InstanceType entity.entity.asset.attribute.labels.value 原始日志中的 HostProperties.InstanceType 值用作标签的值。相应标签的键设置为 host_properties_instance_type。
HostProperties.Sockets entity.entity.asset.attribute.labels.value HostProperties.Sockets 的值会转换为字符串并用作标签的值。该键设置为 host_properties_sockets。
HostProperties.TotalVCpus entity.entity.asset.attribute.labels.value HostProperties.TotalVCpus(或重命名后的 HostProperties.TotalVCPUs)的值会转换为字符串,并用作标签的值。该键设置为 host_properties_total_v_cpus。
HostRecovery entity.entity.asset.attribute.labels.value 原始日志中 HostRecovery(或重命名后的 Recovery)的值将用作标签的值。相应标签的键设置为 host_recovery。
HostReservationID entity.entity.asset.attribute.labels.value 原始日志中的 HostReservationID(或重命名后的 ReservationID)值用作标签的值。相应标签的键设置为 host_reservation_id。
MemberOfServiceLinkedResourceGroup entity.entity.asset.attribute.labels.value MemberOfServiceLinkedResourceGroup 的值会转换为字符串并用作标签的值。该键设置为 member_of_service_linked_resource_group。
OwnerID entity.entity.asset.attribute.labels.value 原始日志中的 OwnerID 值用作标签的值。相应标签的键设置为 owner_id。
ReleaseTime entity.entity.asset.attribute.labels.value 原始日志中的 ReleaseTime 值用作标签的值。相应标签的键设置为 release_time。
State entity.entity.asset.attribute.labels.value 原始日志中的 State 值用作标签的值。相应标签的键设置为 state。
TagSet entity.entity.asset.attribute.labels 系统会遍历 TagSet 数组,并将每个标记的 Key 和 Value 分别用作标签的键和值。解析器会为此字段分配值 AMAZON_WEB_SERVICES。原始日志中的 collection_time 会映射到 collected_timestamp 字段。解析器会将值 ASSET 分配给此字段。解析器会将值 AWS EC2 HOSTS 分配给此字段。解析器会为此字段分配值 AWS。关系派生自 Instances 和 OutpostArn 字段,但这些字段本身不会直接映射到 IDM 对象。解析器逻辑会根据这些字段创建关系对象,并将其合并到 relations 数组中。
collection_time entity.metadata.collected_timestamp 日志的 collection_time 用作事件的 collected_timestamp。

更新日志

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

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