收集 AWS API Gateway 访问日志

支持的语言:

本文档介绍了如何使用 AWS CloudWatch Logs 和 Kinesis Data Firehose 将 Amazon API Gateway 访问日志注入到 Google Security Operations。Amazon API Gateway 提供 REST 和 HTTP API,用于大规模构建和管理 API。访问日志有助于监控 API 使用情况和排查问题。此集成会将这些日志流式传输到 Google SecOps 以进行分析和监控。

准备工作

请确保满足以下前提条件:

  • Google SecOps 实例
  • 对 AWS 的特权访问权限

启用 Amazon API Gateway 访问日志记录(到 CloudWatch Logs)

  1. 前往 AWS 控制台 > API Gateway
  2. 对于 REST API

    • 依次打开 Stage > Logs/Tracing > enable Access logging
    • 日志格式:选择 JSON

      {
        "requestId":"$context.requestId",
        "ip":"$context.identity.sourceIp",
        "requestTime":"$context.requestTime",
        "httpMethod":"$context.httpMethod",
        "routeKey":"$context.routeKey",
        "status":"$context.status",
        "protocol":"$context.protocol",
        "responseLength":"$context.responseLength",
        "integrationLatency":"$context.integrationLatency",
        "error":"$context.error.message"
      }
      
    • CloudWatch Logs 日志组:选择或创建日志组(例如 /aws/apigateway/access)。

  3. 对于 HTTP API

    • 依次选择 API > 监控 > Logging
    • 依次选择阶段 > 修改
    • 启用访问日志记录
    • 使用与上述相同的 JSON 日志格式。
    • CloudWatch Logs 日志组:选择或创建日志组(例如 /aws/apigateway/access)。
  4. 点击保存

在 Google SecOps 中配置 Feed 以注入 Amazon API Gateway 日志

  1. 依次前往 SIEM 设置> Feed
  2. 点击 + 添加新 Feed
  3. Feed 名称字段中,输入 Amazon API Gateway - CloudWatch via Firehose
  4. 选择 Amazon Data Firehose 作为来源类型
  5. 选择 Amazon API Gateway 作为日志类型
  6. 点击下一步
  7. 为以下输入参数指定值:
    • 拆分分隔符:可选 n
    • 资源命名空间aws.api_gateway
    • 注入标签:例如 source=apigw_accessaws_region=<your-region>
  8. 点击下一步
  9. 检查 Feed 配置,然后点击提交
  10. 在 Feed 详细信息中,点击生成密钥,然后复制密钥
  11. 端点信息中复制 Feed HTTPS 端点网址
  12. API 和服务 > 凭据 > 创建凭据 > API 密钥中创建 Google Cloud API 密钥,并将其限制为 Google SecOps API
  13. 复制 API 密钥并将其保存在安全的位置。

配置 Amazon Kinesis Data Firehose(直接向 Google SecOps 发送数据)

  1. AWS 控制台中,依次前往 Kinesis > Data Firehose > 创建交付流
  2. 提供以下配置详细信息:
    • 来源:选择直接 PUT 或其他来源
    • 目的地:选择 HTTP 端点
    • HTTP 端点网址:输入 ENDPOINT_URL?key=API_KEY(使用上一步中的 Feed HTTPS 端点网址和 API 密钥)。
    • HTTP 方法:选择 POST
    • 访问密钥:粘贴 Feed 中生成的密钥。
    • 缓冲提示:将缓冲区大小设置为 1 MiB,将缓冲间隔设置为 60 秒
    • 压缩:选择已停用
    • S3 备份:选择已停用
    • 重试日志记录设置保留为默认值。
  3. 点击创建交付数据流。(例如 cwlogs-to-secops。)

配置 IAM 权限并订阅日志组

  1. AWS 控制台中,依次前往 IAM > 政策 > 创建政策 > JSON
    1. 在 JSON 编辑器中,输入以下政策:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "firehose:PutRecord",
            "firehose:PutRecordBatch"
          ],
          "Resource": "arn:aws:firehose:<region>:<account-id>:deliverystream/cwlogs-to-secops"
        }
      ]
    }
    
    • <region><account-id> 替换为您的 AWS 区域和账号 ID。
  2. 为政策命名 CWLtoFirehoseWrite,然后点击创建政策

  3. 依次前往 IAM > 角色 > 创建角色

  4. 选择 Custom trust policy(自定义信任政策),然后输入以下内容:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": "logs.<your-region>.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    
  5. 将政策 CWLtoFirehoseWrite 附加到角色。

  6. 将角色命名为 CWLtoFirehoseRole,然后点击创建角色

  7. 依次前往 CloudWatch > 日志 > 日志组

  8. 选择您之前创建的 API Gateway 日志组。

  9. 打开订阅过滤条件标签页,然后点击创建

  10. 选择 Create Amazon Kinesis Data Firehose subscription filter

  11. 配置以下内容:

    • 目标:交付数据流 cwlogs-to-secops
    • 授予权限:角色 CWLtoFirehoseRole
    • 过滤条件名称:输入 all-events
    • 过滤模式:留空可发送所有事件。
  12. 点击开始直播

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