删库跑路,成为IT行业,一个潜在的威胁。在几次业内“知名”事故之后。各个公司在安全上更加重视。系统操作的监管/审计,被很多公司提上日程。以备系统合规的安全检查,和故障的溯源分析。
那在AWS上,我们如何做到安全性和溯源性呢?Cloudtrail是AWS的审计工具,但是如何简单直观的查询审计日志呢?我们通过Cloudtrail + Athena 来实现,并可以通过SQL的方式,根据审计的需求,查询相应的结果。
下面就开始我们的探索之旅:
1. 首先先了解一下基本概念。
什么是 AWS CloudTrail?
AWS CloudTrail 是一项 AWS 服务,可帮助对您的 AWS 账户进行监管、合规性检查、操作审核和风险审核。用户、角色或 AWS 服务执行的操作将记录为 CloudTrail 中的事件。事件包括在 AWS 管理控制台、AWS Command Line Interface 和 AWS 开发工具包和 API 中执行的操作
Amazon Athena 是什么?
Amazon Athena 是一种交互式查询服务,让您能够使用标准 SQL 直接在 Amazon Simple Storage Service (Amazon S3) 中轻松分析数据。只需在 AWS 管理控制台中执行几项操作,即可将 Athena 指向 Amazon S3 中存储的数据,并开始使用标准 SQL 运行临时查询,然后在几秒钟内获得结果。
Athena 是无服务器的,因此您无需设置或管理任何基础设施,且只需为您运行的查询付费。Athena 可自动扩展 – 并行执行查询 – 因此,即使在数据集很大、查询很复杂的情况下也能很快获得结果。
2. 下面开始设置Cloudtrail,复制官方文档步骤
使用 AWS 管理控制台创建 CloudTrail 跟踪
登录 AWS 管理控制台并通过以下网址打开 CloudTrail 控制台:https://cn-northwest-1.console.amazonaws.cn/cloudtrail。
选择您要在其中创建跟踪的 AWS 区域。
选择 Get Started Now。
提示
如果您没有看到 Get Started Now (立即入门),请选择 Trails (跟踪),然后选择 Create trail (创建跟踪)。
在 Create Trail 页面上,对于 Trail name,键入一个跟踪名。
2.1 起个Tail的名字,选择需要审计的内容
2.2 选择需要审计的S3 bucket
2.3 选择需要审计的Lambda function
2.4 选择cloud trail log的存放位置,点击”创建create“。
2.5 然后,再S3中,就可以看到cloudtrail产生的日志文件了。
如何查找您的 CloudTrail 日志文件:
https://docs.aws.amazon.com/zh_cn/awscloudtrail/latest/userguide/cloudtrail-find-log-files.html
3. Cloudtrail log有了,但是我们如何分析呢?之前,我们可能直接打开json格式的log,硬读?
以下示例显示,一位名为 Alice 的 IAM 用户对实例 i-ebeaf9e2 执行 ec2-start-instances 命令,从而使用 AWS CLI 调用了 Amazon EC2 StartInstances 操作。
{"Records": [{ "eventVersion": "1.0", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Alice", "acces+sKeyId": "EXAMPLE_KEY_ID", "accountId": "123456789012", "userName": "Alice" }, "eventTime": "2014-03-06T21:22:54Z", "eventSource": "ec2.amazonaws.com", " eventName": "StartInstances ", "awsRegion": "us-east-2", "sourceIPAddres+s": "205.251.233.176", "userAgent": "ec2-api-tools 1.6.12.2", "requestParameters": {"instances+Set": {"items": [{"instanceId": "i-ebeaf9e2"}]}}, "responseElements": {"instances+Set": {"items": [{ "instanceId": "i-ebeaf9e2", "currentState": { "code": 0, "name": "pending" }, "previous+State": { "code": 80, "name": "stopped" } }]}} }]}
4. 深入了解cloudtrail的日志文件格式。 对于后面通过Athena查询,才知道如何实现自己的需求。
CloudTrail 日志文件示例
https://docs.aws.amazon.com/zh_cn/awscloudtrail/latest/userguide/cloudtrail-log-file-examples.html
CloudTrail 日志事件参考
https://docs.aws.amazon.com/zh_cn/awscloudtrail/latest/userguide/cloudtrail-event-reference.html
毕竟cloudtrail的记录非常多,加上日积月累之后,通过人工硬读的方式,肯定是力不从心了。
熟悉大数据处理的话,有很多方法可以处理json格式的文件。但是毕竟审计工作,也不是需要天天做的,开一批机器做数据处理,也是很浪费的行为。
AWS Athena解决了这个问题,随用随查,方便的同时,也降低了成本。
您可以使用 Athena 通过指定日志文件的 LOCATION 直接从 Amazon S3 查询这些日志文件。您可以通过两种方式之一来执行此操作:
通过直接从 CloudTrail 控制台为 CloudTrail 日志文件创建表。
通过在 Athena 控制台中手动为 CloudTrail 日志文件创建表。
这里以第一种方式创建的表:
~~~~~~~~~
在 CloudTrail 控制台中为 CloudTrail 跟踪创建表
在 CloudTrail 控制台。
在导航窗格中,选择 Event history。
在 Event history (事件历史记录) 中,选择 Run advanced queries in Amazon Athena (在 Amazon Athena 中运行高级查询)。
对于 Storage location (存储位置),选择其中存储了要查询的跟踪日志文件的 Amazon S3 存储桶。
注意
您可以通过转到 Trails 并选择跟踪来查找与跟踪相关联的存储桶。存储桶名称会显示在 Storage location 中。
5. 选择 Create Table。将使用包含 Amazon S3 存储桶名称的默认名称创建表。
~~~~~~~
其实就两边,点一点,就完成了,Athena已经帮忙自动准备好 创建外部表的DDL SQL
5. 然后就可以进入到Athena界面,并看到刚刚创建的表
查询示例1:
查询示例2:
select count (*) as TotalEvents, useridentity.username, eventname
from "default"."cloudtrail_logs_cloudtrail_cn_bright"
where eventtime >= '2017-01-01T00:00:00Z'
and useridentity.type = 'IAMUser'
group by useridentity.username, eventname
order by TotalEvents desc;
至此,我们已经实现审计日志的SQL化查询,有任何定制化查询需求,只要针对的准备相应的SQL,就可实现审计目标。
任何人,任何事,都尽在掌握!保证了系统的安全性和稳定性!
更多查询SQL,可以参考官方blog
Analyze Security, Compliance, and Operational Activity Using AWS CloudTrail and Amazon Athena
参考链接:
https://docs.aws.amazon.com/zh_cn/athena/latest/ug/cloudtrail-logs.html
https://amazonaws-china.com/blogs/big-data/aws-cloudtrail-and-amazon-athena-dive-deep-to-analyze-security-compliance-and-operational-activity/