收集 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)
- 前往 AWS 控制台 > API Gateway。
对于 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
)。
对于 HTTP API:
- 依次选择 API > 监控 > Logging。
- 依次选择阶段 > 修改。
- 启用访问日志记录。
- 使用与上述相同的 JSON 日志格式。
- CloudWatch Logs 日志组:选择或创建日志组(例如
/aws/apigateway/access
)。
点击保存。
在 Google SecOps 中配置 Feed 以注入 Amazon API Gateway 日志
- 依次前往 SIEM 设置> Feed。
- 点击 + 添加新 Feed。
- 在Feed 名称字段中,输入
Amazon API Gateway - CloudWatch via Firehose
。 - 选择 Amazon Data Firehose 作为来源类型。
- 选择 Amazon API Gateway 作为日志类型。
- 点击下一步。
- 为以下输入参数指定值:
- 拆分分隔符:可选
n
- 资源命名空间:
aws.api_gateway
- 注入标签:例如
source=apigw_access
、aws_region=<your-region>
- 拆分分隔符:可选
- 点击下一步。
- 检查 Feed 配置,然后点击提交。
- 在 Feed 详细信息中,点击生成密钥,然后复制密钥。
- 从端点信息中复制 Feed HTTPS 端点网址。
- 在 API 和服务 > 凭据 > 创建凭据 > API 密钥中创建 Google Cloud API 密钥,并将其限制为 Google SecOps API。
- 复制 API 密钥并将其保存在安全的位置。
配置 Amazon Kinesis Data Firehose(直接向 Google SecOps 发送数据)
- 在 AWS 控制台中,依次前往 Kinesis > Data Firehose > 创建交付流。
- 提供以下配置详细信息:
- 来源:选择直接 PUT 或其他来源。
- 目的地:选择 HTTP 端点。
- HTTP 端点网址:输入
ENDPOINT_URL?key=API_KEY
(使用上一步中的 Feed HTTPS 端点网址和 API 密钥)。 - HTTP 方法:选择 POST。
- 访问密钥:粘贴 Feed 中生成的密钥。
- 缓冲提示:将缓冲区大小设置为 1 MiB,将缓冲间隔设置为 60 秒。
- 压缩:选择已停用。
- S3 备份:选择已停用。
- 将重试和日志记录设置保留为默认值。
- 点击创建交付数据流。(例如
cwlogs-to-secops
。)
配置 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/cwlogs-to-secops" } ] }
- 将
<region>
和<account-id>
替换为您的 AWS 区域和账号 ID。
为政策命名
CWLtoFirehoseWrite
,然后点击创建政策。依次前往 IAM > 角色 > 创建角色。
选择 Custom trust policy(自定义信任政策),然后输入以下内容:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logs.<your-region>.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
将政策
CWLtoFirehoseWrite
附加到角色。将角色命名为
CWLtoFirehoseRole
,然后点击创建角色。依次前往 CloudWatch > 日志 > 日志组。
选择您之前创建的 API Gateway 日志组。
打开订阅过滤条件标签页,然后点击创建。
选择 Create Amazon Kinesis Data Firehose subscription filter。
配置以下内容:
- 目标:交付数据流
cwlogs-to-secops
。 - 授予权限:角色
CWLtoFirehoseRole
。 - 过滤条件名称:输入
all-events
。 - 过滤模式:留空可发送所有事件。
- 目标:交付数据流
点击开始直播。
需要更多帮助?从社区成员和 Google SecOps 专业人士那里获得解答。