Cloud & IT Cert Prep · 课时

CloudTrail 跟踪与事件历史记录

创建管理事件和数据事件跟踪,将日志传送到 S3 和 CloudWatch Logs,并在控制台中搜索 90 天的事件历史记录

第 1 / 4 课13 个步骤

CloudTrail 跟踪与事件历史记录 是 CoddyKit 上的免费 Cloud & IT Cert Prep 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cloud & IT Cert Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cloud & IT Cert Prep 课程共包含 4 节课。

什么是 AWS CloudTrail

AWS CloudTrail 是一项记录 AWS 账户中每次 API 调用的服务——无论调用来自控制台、CLI、SDK 还是其他 AWS 服务。每条记录称为一个 CloudTrail 事件,其中包含 API 操作、请求者身份、源 IP、请求参数和响应。CloudTrail 是 AWS 安全审计、合规性检查和运维调查的基础。在 SAA-C03 考试中,只要问题询问“是谁进行了这项更改”,通常就应选择 CloudTrail。

事件历史记录:免费回溯 90 天

默认情况下,每个 AWS 账户都可以访问CloudTrail 事件历史记录,其中保存 90 天的滚动管理事件记录,可在控制台中查看或通过 CLI 查询。您可以按资源名称、资源类型、事件名称或用户名进行筛选。事件历史记录免费、无需配置,并且可以立即使用。这是调查近期更改最快捷的方式;但如果需要更长的保留期或更强大的查询功能,则必须创建 Trail。

# Search event history for who deleted an S3 bucket in the last 7 days
aws cloudtrail lookup-events \
  --lookup-attributes AttributeKey=EventName,AttributeValue=DeleteBucket \
  --start-time $(date -u -d '7 days ago' +%Y-%m-%dT%H:%M:%SZ) \
  --query 'Events[].{Time:EventTime,User:Username,Detail:CloudTrailEvent}' \
  --output table

创建 CloudTrail Trail

Trail 是 CloudTrail 的一种配置,可将事件持续传送到 S3 存储桶(也可以选择传送到 CloudWatch Logs)。您需要支付 S3 存储和数据传输费用。Trail 可以限定在单个区域,也可以配置为捕获账户中当前及未来所有区域事件的多区域 Trail。对于 SAA-C03 考试,始终建议使用多区域 Trail——单区域 Trail 会遗漏其他区域中的活动,因此被视为安全漏洞。

# Create a multi-region trail delivering to S3
aws cloudtrail create-trail \
  --name OrgAuditTrail \
  --s3-bucket-name my-cloudtrail-logs-111122223333 \
  --is-multi-region-trail \
  --include-global-service-events \
  --enable-log-file-validation

# Start logging (trails are created in 'paused' state)
aws cloudtrail start-logging --name OrgAuditTrail

管理事件与数据事件

CloudTrail 会记录两类事件:管理事件(也称为控制平面事件)记录对资源执行的操作,例如创建 EC2 实例、修改安全组和附加 IAM 策略。这些事件默认在每个 Trail 中启用,并且不会产生额外的单事件费用。数据事件记录对象级操作,例如 S3 的 GetObject、PutObject、DeleteObject,或 Lambda 的 Invoke。数据事件的数量可能非常多,并会产生额外费用,因此必须按资源或资源类型明确启用。

# Add data event logging for all S3 objects in a specific bucket
aws cloudtrail put-event-selectors \
  --trail-name OrgAuditTrail \
  --event-selectors '[
    {
      "ReadWriteType": "All",
      "IncludeManagementEvents": true,
      "DataResources": [
        {
          "Type": "AWS::S3::Object",
          "Values": ["arn:aws:s3:::my-sensitive-bucket/"]
        }
      ]
    }
  ]'

CloudTrail 与 CloudWatch Logs 集成

将 CloudTrail 事件传送到 CloudWatch Logs 后,您可以针对 API 活动设置实时告警。您可以在 CloudTrail 日志组上创建指标筛选器,以统计特定事件,例如统计 DeleteBucket 或 CreateUser 调用的次数,然后设置 CloudWatch 警报,在可疑操作发生后几分钟内通知安全团队。这是CIS AWS 基准中的核心模式,SAA-C03 考试也经常涉及它。

# Update a trail to also deliver to CloudWatch Logs
aws cloudtrail update-trail \
  --name OrgAuditTrail \
  --cloud-watch-logs-log-group-arn arn:aws:logs:us-east-1:111122223333:log-group:CloudTrail/Logs:* \
  --cloud-watch-logs-role-arn arn:aws:iam::111122223333:role/CloudTrailCWLogsRole

# Create a metric filter for root account login
aws logs put-metric-filter \
  --log-group-name CloudTrail/Logs \
  --filter-name RootLogin \
  --filter-pattern '{$.userIdentity.type = "Root" && $.eventName = "ConsoleLogin"}' \
  --metric-transformations metricName=RootLogins,metricNamespace=CISBenchmark,metricValue=1

全局服务事件

某些 AWS 服务——尤其是 IAM、STS、Route 53 和 CloudFront——属于全局服务,会将其 API 调用记录为全局服务事件。无论操作从何处发起,这些事件始终记录在 us-east-1 区域。创建 Trail 时,请启用 --include-global-service-events,以捕获 IAM 用户创建、策略更改和 STS 角色代入等事件。如果您有多个特定区域的 Trail,只需在其中一个 Trail 中启用全局服务事件,以避免产生重复日志记录。

# Verify that global service events are enabled on a trail
aws cloudtrail get-trail \
  --name OrgAuditTrail \
  --query 'Trail.{MultiRegion:IsMultiRegionTrail,GlobalServiceEvents:IncludeGlobalServiceEvents}'

用于 CloudTrail 日志的 S3 存储桶策略

CloudTrail 需要特定的 S3 存储桶策略,授予 CloudTrail 服务主体(cloudtrail.amazonaws.com)在存储桶上调用 GetBucketAcl 和 PutObject 的权限。AWS 会强制要求存储桶不得公开访问,并且对象所有权必须设置为“存储桶所有者强制执行”。切勿将 CloudTrail 日志存储在应用程序使用的同一存储桶中——这会形成循环依赖:如果应用程序存储桶被锁定,对审计日志的访问也会因此中断。

# Minimum S3 bucket policy for CloudTrail (abbreviated)
# {
#   "Version": "2012-10-17",
#   "Statement": [
#     {
#       "Sid": "AWSCloudTrailAclCheck",
#       "Effect": "Allow",
#       "Principal": {"Service": "cloudtrail.amazonaws.com"},
#       "Action": "s3:GetBucketAcl",
#       "Resource": "arn:aws:s3:::my-cloudtrail-logs-111122223333"
#     },
#     {
#       "Sid": "AWSCloudTrailWrite",
#       "Effect": "Allow",
#       "Principal": {"Service": "cloudtrail.amazonaws.com"},
#       "Action": "s3:PutObject",
#       "Resource": "arn:aws:s3:::my-cloudtrail-logs-111122223333/AWSLogs/111122223333/*",
#       "Condition": {"StringEquals": {"s3:x-amz-acl": "bucket-owner-full-control"}}
#     }
#   ]
# }

组织 Trail

在 AWS 组织中,您可以从管理账户创建组织 Trail,它会自动应用于所有成员账户,包括当前账户和未来账户。成员账户无法修改或删除组织 Trail,从而确保审计覆盖范围不会被规避。组织 Trail 会将日志传送到集中式 S3 存储桶,并使用按账户划分的前缀,使安全团队能够在一个位置使用 Athena 或 SIEM 工具查询所有账户的审计日志。

# Create an organisation trail from the management account
aws cloudtrail create-trail \
  --name OrgCentralTrail \
  --s3-bucket-name central-org-cloudtrail-logs \
  --is-multi-region-trail \
  --is-organization-trail \
  --include-global-service-events \
  --enable-log-file-validation

aws cloudtrail start-logging --name OrgCentralTrail

用于日志分析的 Athena 集成

传送到 S3 的 CloudTrail 日志采用 JSON 格式。您可以在 CloudTrail 控制台中使用 亚马逊 Athena 集成,自动创建按账户、区域和日期分区的 Glue 表。这样,您无需将数据加载到数据库中,就可以使用标准 SQL 查询数月的 API 历史记录。在查询中按日期进行分区(WHERE year='2024' AND month='01'),以避免扫描整张表并控制 Athena 成本。

-- Query CloudTrail logs in Athena for IAM policy changes in January 2024
SELECT
  eventtime,
  useridentity.arn AS principal,
  eventname,
  requestparameters
FROM cloudtrail_logs_111122223333
WHERE year = '2024'
  AND month = '01'
  AND eventsource = 'iam.amazonaws.com'
  AND eventname IN ('PutUserPolicy','AttachRolePolicy','CreateUser')
ORDER BY eventtime DESC
LIMIT 100;

查询 Event History 与 Trail 日志

搜索 CloudTrail 记录有两种方式:控制台中的 Event History(最近 90 天,仅限管理事件,筛选条件有限)以及 S3/Athena 中的 Trail 日志(保留期限不限,还包括数据事件,并支持完整的 SQL 查询能力)。对于考试场景:如果题目要求调查早于 90 天的事件,或查询数据平面事件(S3 GetObject、Lambda Invoke),请始终建议通过 Athena 查询 Trail 日志。如果题目询问调查近期管理事件的最简单方法,Event History 就足够了。

考试必记的 CloudTrail 事实

请牢记以下内容,以备 SAA-C03 考试:CloudTrail 不是实时的——将事件传送到 S3 最多可能需要 15 分钟(如需近实时告警,请使用 CloudWatch Logs)。Event History 的保留期为 90 天,且仅包含管理事件。必须显式启用数据事件,并且会产生额外费用。日志文件验证使用 SHA-256 哈希来检测篡改。全局服务事件(IAM、STS、Route 53)只会出现在 us-east-1 中。组织 Trail 无法由成员账户禁用。

快速检查

请检验您对本课 AWS 解决方案架构师(SAA-C03)概念的理解。

课程回顾

在本课中,您学习了:Event History 提供免费的、为期 90 天的管理事件访问;Trail 持续将日志传送到 S3,并支持配置保留期和可选的数据事件;组织 Trail 适用于所有成员账户,且成员账户无法将其禁用。接下来我们将学习 CloudTrail Insights 和日志文件完整性验证。

免费开始

用 AI 导师学习 Cloud & IT Cert Prep — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
150
课程
600

常见问题解答

「CloudTrail 跟踪与事件历史记录」课时是免费的吗?

是的 — 「CloudTrail 跟踪与事件历史记录」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cloud & IT Cert Prep 课程的其余内容,请升级到 CoddyKit PRO。 Cloud & IT Cert Prep 课程共包含 4 节课。

「CloudTrail 跟踪与事件历史记录」这节课中我会学到什么?

创建管理事件和数据事件跟踪,将日志传送到 S3 和 CloudWatch Logs,并在控制台中搜索 90 天的事件历史记录 你通过在浏览器中直接运行的动手代码来练习 Cloud & IT Cert Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cloud & IT Cert Prep 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cloud & IT Cert Prep 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「CloudTrail 跟踪与事件历史记录」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cloud & IT Cert Prep 课中编写并运行代码吗?

能。每节 Cloud & IT Cert Prep 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. CloudTrail 跟踪与事件历史记录
  2. CloudTrail Insights 与日志文件完整性
  3. AWS Config 规则与修复
  4. 合规性数据包与组织级跟踪
← 返回 Cloud & IT Cert Prep