问题描述
我想设置一些监控来捕获我的 AWS 账户中的访问被拒绝和未经授权的操作错误。我想在不同的 AWS 服务中捕获所有这些事件,但遇到了一些问题。我最初设置了一些触发基本 lambda 函数的云监视规则,但我没有捕获我正在寻找的事件。下面是一些触发 Lambda 函数的规则事件(理想情况下,一旦我开始工作,我会过滤掉这些事件以捕获所有事件)。
{
"source": ["aws.cloudtrail"],"detail-type": ["AWS API Call via CloudTrail"],"detail": {
"eventSource": ["cloudtrail.amazonaws.com"]
}
}
// All cloud watch
{
"source": [
"aws.cloudwatch"
]
}
我一直在使用 AWS CLI 进行测试,调用我无权访问的资源,例如:
- aws dynamodb 列表
- aws ec2 描述实例
- 列表项
我收到了来自 CLI 的正确错误响应,但我没有看到这些事件被传播到 Lambda(不过我看到其他非错误触发了 Lambda)。
我是否必须更严格地配置它,或者我是否缺少收集这些错误的步骤?
感谢您的帮助
解决方法
aws dynamodb list-tables
、aws ec2 describe-instances
和 List item
不起作用,因为 List*
、Get*
和 Describe*
API 事件不受支持 来自 CloudWatch Events:
如果您想捕获此类事件,您必须通过 CloudWatch Logs 来完成。即,设置您的 CT trail to push events to CloudWatch Logs。然后,为您的 lambda 设置一个 subscription filter。这将通过 CloudWatch Logs 将所有 API 事件推送到您的 lambda。随后,您将能够检测事件中的 AccessDenied
错误并执行您需要的其他操作。
其他可能性是在日志上设置 metric filter,以便捕获 AccessDenied
错误以创建 CloudWatch 指标。然后根据指标设置 CloudWatch 警报。这将触发警报,但不会将触发警报的事件的详细信息传递给您的函数。您只会知道发生了访问被拒绝,但没有更多详细信息。
更新
create-table
按预期工作。我在测试中使用了以下规则,并将其连接到 SQS 以进行快速检查:
{
"detail-type": [
"AWS API Call via CloudTrail"
],"detail": {
"eventSource": [
"dynamodb.amazonaws.com"
],"errorCode": [
"AccessDenied"
]
}
}