我有一个 CloudTrail 设置来记录管理事件,但是每月的服务成本已上升到不合理的数额。做了一些调查后,90% 的事件似乎都是 Lambda 写入 CloudWatch Log,并且还读取活动。
理想情况下,我只想记录写入事件,并完全排除 CloudWatch。
首先,我尝试调整现有的 CloudTrail,将 readOnly 设置为 false,并排除 messages.amazaon.aws.com,如下所示:
aws cloudtrail put-event-selectors --trail-name existing-management-trail --region eu-west-1 --advanced-event-selectors "[{\"Name\":\"Write Management Events (Excluding CloudWatch)\",\"FieldSelectors\":[{\"Field\":\"eventCategory\",\"Equals\":[\"Management\"]},{\"Field\":\"readOnly\",\"Equals\":[\"false\"]},{\"Field\":\"eventSource\",\"NotEquals\":[\"logs.amazonaws.com\"]}]}]"
An error occurred (InvalidEventSelectorsException) when calling the PutEventSelectors operation: The specified eventSource selectors are not supported when eventCategory is set to "Equals": "Management".
然后我想,如果您无法对管理事件放置过滤器,我会创建一个全新的过滤器,并指定我想要跟踪的各个资源:
aws cloudtrail create-trail --name test-trail --s3-bucket-name aws-cloudtrail-test-writeonly --is-multi-region-trail --region eu-west-1
aws cloudtrail put-event-selectors --trail-name test-trail --region eu-west-1 --advanced-event-selectors "[{\"Name\":\"Write Events (Excluding CloudWatch)\",\"FieldSelectors\":[{\"Field\":\"resources.type\",\"Equals\":[\"AWS::IAM::User\",\"AWS::IAM::Role\",\"AWS::IAM::Policy\",\"AWS::S3::Bucket\",\"AWS::EC2::Instance\",\"AWS::EC2::Volume\",\"AWS::EC2::SecurityGroup\",\"AWS::RDS::DBInstance\",\"AWS::Lambda::Function\",\"AWS::ElasticLoadBalancingV2::LoadBalancer\",\"AWS::CloudFormation::Stack\",\"AWS::EKS::Cluster\",\"AWS::SNS::Topic\",\"AWS::SQS::Queue\",\"AWS::Route53::HostedZone\",\"AWS::SecretsManager::Secret\",\"AWS::KMS::Key\"]},{\"Field\":\"readOnly\",\"Equals\":[\"false\"]}]}]"
An error occurred (UnsupportedOperationException) when calling the PutEventSelectors operation: The operation requested is not supported in the region.
这个错误有点令人困惑,因为 eu-west-1 应该支持这个吗?我对如何正确设置它有点困惑 - 或者为什么很难排除 CloudWatch 事件。当前的设置确实有很多 lambda 处于有意的详细状态!我什至认为我们认为拥有 CloudTrail 的目的是记录 AWS 用户活动,以便我们可以跟踪我们的一位工程师是否无意中修改了某些内容,以便我们可以解决错误 - 它并不是真的打算记录我们的 lambda 活动.
任何有关如何提供帮助的想法,我都很感激。如果不可能,我也很想知道为什么不(如果你知道的话!)
管理事件不支持 eventSource,当您未在命令中指定任何 eventCategory 时,CloudTrail 默认采用管理事件。
AWS 设计了 CloudTrail 来进行全面审核,确保关键管理操作不会被意外排除。由于 Lambda 与 CloudWatch 的交互是服务到服务的,因此这些事件仍被视为“写入”事件并记录为管理活动的一部分。因此,AWS cloudtrail 会跟踪 AWS 账户内的所有 API 调用,无论是服务还是 IAM 用户都已完成此操作。
您可以将日志记录限制为仅写入管理事件,这可以显着减少记录的交互量。
aws cloudtrail put-event-selectors --trail-name test-trail --region eu-west-1 --event-selectors '[
{
"ReadWriteType": "WriteOnly",
"IncludeManagementEvents": true
}
]'
或
aws cloudtrail put-event-selectors --trail-name test-trail --region eu-west-1 --advanced-event-selectors '[{
"Name": "Write Management Events",
"FieldSelectors": [
{"Field": "eventCategory", "Equals": ["Management"]},
{"Field": "readOnly", "Equals": ["false"]}
]
}]'
管理事件记录管理 AWS 资源的高级控制平面 API 操作。这些事件包括:
创建、修改或删除 AWS 资源(例如,创建 S3 存储桶、启动 EC2 实例、部署 Lambda 函数)。
服务配置更改(例如,更新 IAM 策略、更改安全组规则)。