AWS CloudTrail
用户指南 (版本 1.0)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用 AWS Command Line Interface 创建和更新跟踪

注意

您需要 AWS 命令行工具来运行本主题中的 AWS Command Line Interface (AWS CLI) 命令。有关更多信息,请参阅 AWS Command Line Interface 用户指南。要在 AWS CLI 命令行中获得 CloudTrail 命令的帮助信息,请键入 aws cloudtrail help

用于创建和更新跟踪的两个选项

在使用 AWS CLI 创建或更新跟踪时,您拥有两组选项:

  • create-trailupdate-trail

  • create-subscriptionupdate-subscription

create-trail 和 update-trail

create-trailupdate-trail 命令提供了 create-subscriptionupdate-subscription 命令所不提供的以下功能:

  • 使用 --is-multi-region-trail 选项创建跨区域接收日志的跟踪或更新跟踪。

  • 使用 --no-is-multi-region-trail 选项将多区域跟踪转换为单区域跟踪。

  • 使用 --kms-key-id 选项启用或禁用日志文件加密。此选项指定您已创建并附加了让 AWS KMS 能够加密日志的策略的 CloudTrail 密钥。有关更多信息,请参阅使用 AWS CLI 启用和禁用 CloudTrail 日志文件加密

  • 使用 --enable-log-file-validation--no-enable-log-file-validation 选项启用或禁用日志文件验证。有关更多信息,请参阅验证 CloudTrail 日志文件完整性

  • 指定 CloudWatch Logs 日志组和角色,以便 CloudTrail 能够向 CloudWatch Logs 日志组传送事件。有关更多信息,请参阅使用 Amazon CloudWatch Logs 监控 CloudTrail 日志文件

create-subscription 和 update-subscription

create-subscriptionupdate-subscription 命令提供以下优势:

  • 可以让 CloudTrail 为您创建一个 S3 存储桶。使用 create-trail 命令时,您必须指定已在其中应用 CloudTrail 存储桶策略的现有存储桶。

  • create-subscription 命令可对跟踪启动日志记录。使用 create-trail 命令时,您必须运行 start-logging 命令。

使用 create-trail

创建单区域跟踪

以下命令创建单区域跟踪。指定的 Amazon S3 存储桶必须已经存在并且已应用适当的 CloudTrail 权限。有关更多信息,请参阅CloudTrail 的 Amazon S3 存储桶策略

aws cloudtrail create-trail --name my-trail --s3-bucket-name my-bucket

有关更多信息,请参阅CloudTrail 跟踪命名要求

示例输出:

{ "IncludeGlobalServiceEvents": true, "Name": "my-trail", "TrailARN": "arn:aws:cloudtrail:us-east-2:123456789012:trail/my-trail", "LogFileValidationEnabled": false, "IsMultiRegionTrail": false, "IsOrganizationTrail": false, "S3BucketName": "my-bucket" }

默认情况下,create-trail 命令将创建一个单区域跟踪,此跟踪不启用日志文件验证。

为跟踪启动日志记录操作

create-trail 命令完成后,运行 start-logging 命令可以为跟踪启动日志记录。

注意

在使用 CloudTrail 控制台或 create-subscription 命令创建跟踪时,将自动启用日志记录。

以下示例为跟踪启动日志记录:

aws cloudtrail start-logging --name my-trail

虽然此命令不返回输出,但您可以使用 get-trail-status 命令验证日志记录是否启动:

aws cloudtrail get-trail-status --name my-trail

为了确认正在记录跟踪,输出中的 IsLogging 元素将显示 true

{ "LatestDeliveryTime": 1441139757.497, "LatestDeliveryAttemptTime": "2015-09-01T20:35:57Z", "LatestNotificationAttemptSucceeded": "2015-09-01T20:35:57Z", "LatestDeliveryAttemptSucceeded": "2015-09-01T20:35:57Z", "IsLogging": true, "TimeLoggingStarted": "2015-09-01T00:54:02Z", "StartLoggingTime": 1441068842.76, "LatestDigestDeliveryTime": 1441140723.629, "LatestNotificationAttemptTime": "2015-09-01T20:35:57Z", "TimeLoggingStopped": "" }

创建应用到所有区域的跟踪

要创建应用到所有区域的跟踪,可使用 --is-multi-region-trail 选项。

以下示例中创建的跟踪会将所有区域的日志传送到名为 my-bucket 的现有存储桶中:

aws cloudtrail create-trail --name my-trail --s3-bucket-name my-bucket --is-multi-region-trail

要确认您的跟踪存在于所有区域,请验证输出中的 IsMultiRegionTrail 元素是否为 true

{ "IncludeGlobalServiceEvents": true, "Name": "my-trail", "TrailARN": "arn:aws:cloudtrail:us-east-2:123456789012:trail/my-trail", "LogFileValidationEnabled": false, "IsMultiRegionTrail": true, "IsOrganizationTrail": false, "S3BucketName": "my-bucket" }

注意

使用 start-logging 命令可以为您的跟踪启动日志记录操作。

创建应用到所有区域且启用了日志文件验证功能的跟踪

要在使用 create-trail 时启用日志文件验证功能,请使用 --enable-log-file-validation 选项。

有关日志文件验证的信息,请参阅验证 CloudTrail 日志文件完整性

以下示例创建将所有区域的日志传送到指定存储桶的跟踪。此命令使用 --enable-log-file-validation 选项。

aws cloudtrail create-trail --name my-trail --s3-bucket-name my-bucket --is-multi-region-trail --enable-log-file-validation

要确认系统已启用日志文件验证功能,请验证输出中的 LogFileValidationEnabled 元素是否为 true

{ "IncludeGlobalServiceEvents": true, "Name": "my-trail", "TrailARN": "arn:aws:cloudtrail:us-east-2:123456789012:trail/my-trail", "LogFileValidationEnabled": true, "IsMultiRegionTrail": true, "IsOrganizationTrail": false, "S3BucketName": "my-bucket" }

使用 update-trail

您可以使用 update-trail 命令更改跟踪的配置设置。

注意

如果您使用 AWS CLI 或某个 AWS 开发工具包修改跟踪,请确保跟踪的存储桶策略处于最新状态。要使您的存储桶自动接收来自新的 AWS 区域的事件,策略必须包含完整服务名称 cloudtrail.amazonaws.com。有关更多信息,请参阅CloudTrail 的 Amazon S3 存储桶策略

注意

您只能从已创建跟踪的区域运行 update-trail 命令。

将应用到一个区域的跟踪转换为应用到所有区域

要更改现有跟踪以使其应用到所有区域,请使用 --is-multi-region-trail 选项:

aws cloudtrail update-trail --name my-trail --is-multi-region-trail

要确认跟踪现已应用到所有区域,请验证输出中的 IsMultiRegionTrail 元素是否为 true

{ "IncludeGlobalServiceEvents": true, "Name": "my-trail", "TrailARN": "arn:aws:cloudtrail:us-east-2:123456789012:trail/my-trail", "LogFileValidationEnabled": false, "IsMultiRegionTrail": true, "IsOrganizationTrail": false, "S3BucketName": "my-bucket" }

将多区域跟踪转换为单区域跟踪

要更改现有的多区域跟踪以使其只应用于创建该跟踪的区域,请使用 --no-is-multi-region-trail 选项。

aws cloudtrail update-trail --name my-trail --no-is-multi-region-trail

要确认跟踪现在只应用到一个区域,请验证输出中的 IsMultiRegionTrail 元素是否为 false

{ "IncludeGlobalServiceEvents": true, "Name": "my-trail", "TrailARN": "arn:aws:cloudtrail:us-east-2:123456789012:trail/my-trail", "LogFileValidationEnabled": false, "IsMultiRegionTrail": false, "IsOrganizationTrail": false, "S3BucketName": "my-bucket" }

启用和禁用记录全球服务事件

要更改跟踪以使其不记录全球服务事件,请使用 --no-include-global-service-events 选项。

aws cloudtrail update-trail --name my-trail --no-include-global-service-events

要确认跟踪不再记录全球服务事件,输出中的 IncludeGlobalServiceEvents 元素应显示 false

{ "IncludeGlobalServiceEvents": false, "Name": "my-trail", "TrailARN": "arn:aws:cloudtrail:us-east-2:123456789012:trail/my-trail", "LogFileValidationEnabled": false, "IsMultiRegionTrail": false, "IsOrganizationTrail": false, "S3BucketName": "my-bucket" }

要更改跟踪以使其记录全球服务事件,请使用 --include-global-service-events 选项。

启用日志文件验证

要启用对跟踪的日志文件验证,可使用 --enable-log-file-validation 选项。摘要文件将传送到该跟踪的 Amazon S3 存储桶。

aws cloudtrail update-trail --name my-trail --enable-log-file-validation

要确认系统已启用日志文件验证功能,请验证输出中的 LogFileValidationEnabled 元素是否为 true

{ "IncludeGlobalServiceEvents": true, "Name": "my-trail", "TrailARN": "arn:aws:cloudtrail:us-east-2:123456789012:trail/my-trail", "LogFileValidationEnabled": true, "IsMultiRegionTrail": false, "IsOrganizationTrail": false, "S3BucketName": "my-bucket" }

禁用日志文件验证

要禁用对跟踪的日志文件验证,请使用 --no-enable-log-file-validation 选项。

aws cloudtrail update-trail --name my-trail-name --no-enable-log-file-validation

要确认系统已禁用日志文件验证功能,请验证输出中的 LogFileValidationEnabled 元素是否为 false

{ "IncludeGlobalServiceEvents": true, "Name": "my-trail", "TrailARN": "arn:aws:cloudtrail:us-east-2:123456789012:trail/my-trail", "LogFileValidationEnabled": false, "IsMultiRegionTrail": false, "IsOrganizationTrail": false, "S3BucketName": "my-bucket" }

要使用 AWS CLI 验证日志文件,请参阅使用 AWS CLI 验证 CloudTrail 日志文件完整性

使用 create-subscription

使用 create-subscription 命令可以创建跟踪。您还可以使用此命令为日志文件传输创建一个 Amazon S3 存储桶,为通知创建一个 Amazon SNS 主题。create-subscription 命令也可对其创建的跟踪启动日志记录操作。

create-subscription 命令包含以下选项:

  • --name 指定跟踪的名称。此选项是必需的。有关更多信息,请参阅CloudTrail 跟踪命名要求

  • --s3-use-bucket 指定日志文件存储的现有 Amazon S3 存储桶。

  • --s3-new-bucket 指定该命令执行时创建的新存储桶的名称。存储桶名称必须具有全局唯一性。有关更多信息,请参阅 Amazon S3 存储桶命名要求

  • --s3-prefix 指定日志文件传输路径的前缀(可选)。最大长度为 200 个字符。

    注意

    如果要对现有存储桶使用新的日志文件前缀,请先将相应前缀添加到存储桶策略中。有关更多信息,请参阅更改现有存储桶的前缀

  • --sns-new-topic 指定您可以订阅有关日志文件传输到存储桶的通知的 Amazon SNS 主题的名称(可选)。

注意

键入 aws cloudtrail create-subscription help 以查看选项列表。

下面的示例创建一个跟踪、一个用于日志文件传输的 Amazon S3 存储桶、一个 S3 存储桶前缀和一个 SNS 主题。

aws cloudtrail create-subscription --name=awscloudtrail-example --s3-new-bucket=awscloudtrail-new-bucket-example --s3-prefix=prefix-example --sns-new-topic=awscloudtrail-example-log-deliverytopic

如果命令成功执行,则将显示类似于以下内容的输出:

Setting up new S3 bucket awscloudtrail-new-bucket-example... Setting up new SNS topic awscloudtrail-example-log-deliverytopic... Creating/updating CloudTrail configuration... CloudTrail configuration: { "trailList": [ { "IncludeGlobalServiceEvents": true, "Name": "awscloudtrail-example", "S3KeyPrefix": "prefix-example", "TrailARN": "arn:aws:cloudtrail:us-east-2:123456789012:trail/awscloudtrail-example", "LogFileValidationEnabled": false, "IsMultiRegionTrail": false, "IsOrganizationTrail": false, "HasCustomEventSelectors": false, "S3BucketName": "awscloudtrail-new-bucket-example" "SnsTopicName": "awscloudtrail-example-log-deliverytopic", "HomeRegion": "us-east-2" } ], "ResponseMetadata": { "HTTPStatusCode": 200, "RequestId": "4c55c744-a0ea-4aea-b3b9-eb63dfe68383" } } Starting CloudTrail service... Logs will be delivered to awscloudtrail-new-bucket-example:prefix-example

使用 update-subscription

可以使用 update-subscription 命令并将选项设置为新值来更新跟踪。下面的示例使用 --s3-use-bucket 选项指定一个不同的现有 Amazon S3 存储桶。如果您需要一个带其他名称的跟踪,可使用 delete-trail 命令删除该跟踪,然后运行 create-subscription 命令。

aws cloudtrail update-subscription --name=awscloudtrail-example --s3-use-bucket=awscloudtrail-new-bucket-example2 --s3-prefix=prefix-example

如果此命令成功执行,则 S3BucketName 值将更新为 awscloudtrail-new-bucket-example2

CloudTrail configuration: { "trailList": [ { "IncludeGlobalServiceEvents": true, "Name": "awscloudtrail-example", "S3KeyPrefix": "prefix-example", "TrailARN": "arn:aws:cloudtrail:us-east-2:123456789012:trail/awscloudtrail-example", "LogFileValidationEnabled": false, "IsMultiRegionTrail": false, "IsOrganizationTrail": false, "HasCustomEventSelectors": false, "S3BucketName": "awscloudtrail-new-bucket-example2" "SnsTopicName": "awscloudtrail-example-log-deliverytopic", "HomeRegion": "us-east-2" } ] }

注意

如果您指定一个现有的 Amazon S3 存储桶,并且该存储桶不是使用 CloudTrail 创建的,则您需要附加适当的策略。请参阅 CloudTrail 的 Amazon S3 存储桶策略

管理跟踪

CloudTrail CLI 包括其他几个可帮助您管理跟踪的命令。

检索跟踪设置和跟踪状态

使用 describe-trails 命令检索跟踪设置:

aws cloudtrail describe-trails

如果命令成功,则将显示类似于以下内容的输出:

{ "trailList": [ { "IncludeGlobalServiceEvents": true, "Name": "my-trail", "S3KeyPrefix": "my-prefix", "TrailARN": "arn:aws:cloudtrail:us-east-2:123456789012:trail/my-trail", "LogFileValidationEnabled": false, "IsMultiRegionTrail": false, "IsOrganizationTrail": false, "HasCustomEventSelectors": false, "S3BucketName": "my-bucket" "SnsTopicName": "my-topic", "HomeRegion": "us-east-2" } ] }

运行 get-trail-status 命令检索跟踪的状态。

注意

如果跟踪是组织跟踪,并且您是 AWS Organizations 组织中的成员账户,则必须提供该跟踪的完整 ARN,而不仅仅是名称。

aws cloudtrail get-trail-status --name awscloudtrail-example

如果命令成功,则将显示类似于以下内容的输出:

{ "LatestDeliveryTime": 1441139757.497, "LatestDeliveryAttemptTime": "2015-09-01T20:35:57Z", "LatestNotificationAttemptSucceeded": "2015-09-01T20:35:57Z", "LatestDeliveryAttemptSucceeded": "2015-09-01T20:35:57Z", "IsLogging": true, "TimeLoggingStarted": "2015-09-01T00:54:02Z", "StartLoggingTime": 1441068842.76, "LatestDigestDeliveryTime": 1441140723.629, "LatestNotificationAttemptTime": "2015-09-01T20:35:57Z", "TimeLoggingStopped": "" }

除了前面的 JSON 代码中显示的字段外,在出现 Amazon SNS 或 Amazon S3 错误的情况下,状态还包含以下字段:

  • LatestNotificationError。在主题订阅失败的情况下,包含 Amazon SNS 发出的错误。

  • LatestDeliveryError。在 CloudTrail 无法将日志文件传输到存储桶的情况下,包含 Amazon S3 发出的错误。

配置事件选择器

要查看跟踪的事件选择器设置,请运行 get-event-selectors 命令:

aws cloudtrail get-event-selectors --trail-name TrailName

注意

如果跟踪是组织跟踪,并且您是 AWS Organizations 组织中的成员账户,则必须提供该跟踪的完整 ARN,而不仅仅是名称。

以下示例返回跟踪的事件选择器的默认设置。

{ "EventSelectors": [ { "IncludeManagementEvents": true, "DataResources": [], "ReadWriteType": "All" } ], "TrailARN": "arn:aws:cloudtrail:us-east-2:123456789012:trail/TrailName" }

要创建事件选择器,请运行 put-event-selectors 命令。当事件在您的账户中发生时,CloudTrail 将评估您的跟踪配置。如果事件匹配跟踪的任何事件选择器,则跟踪将处理并记录事件。您可以为一个跟踪配置最多 5 个事件选择器和最多 250 个数据资源。有关更多信息,请参阅记录跟踪的数据和管理事件

示例:带有特定事件选择器的跟踪

以下示例为名为 TrailName 的跟踪创建一个事件选择器,以包含只读和只写管理事件、两个 Amazon S3 存储桶/前缀组合的数据事件以及单个名为 hello-world-python-function 的 AWS Lambda 函数的数据事件。

aws cloudtrail put-event-selectors --trail-name TrailName --event-selectors '[{"ReadWriteType": "All","IncludeManagementEvents": true,"DataResources": [{"Type":"AWS::S3::Object", "Values": ["arn:aws:s3:::mybucket/prefix","arn:aws:s3:::mybucket2/prefix2"]},{"Type": "AWS::Lambda::Function","Values": ["arn:aws:lambda:us-west-2:999999999999:function:hello-world-python-function"]}]}]'

以下示例返回为跟踪配置的事件选择器:

{ "EventSelectors": [ { "IncludeManagementEvents": true, "DataResources": [ { "Values": [ "arn:aws:s3:::mybucket/prefix", "arn:aws:s3:::mybucket2/prefix2" ], "Type": "AWS::S3::Object" }, { "Values": [ "arn:aws:lambda:us-west-2:123456789012:function:hello-world-python-function" ], "Type": "AWS::Lambda::Function" }, ], "ReadWriteType": "All" } ], "TrailARN": "arn:aws:cloudtrail:us-east-2:123456789012:trail/TrailName" }

示例:记录所有事件的跟踪

以下示例为名为 TrailName2 的跟踪创建了一个包括所有事件的事件选择器,以包括只读和只写管理事件以及 AWS 账户中所有 Amazon S3 存储桶和 AWS Lambda 函数的所有数据事件。

注意

如果跟踪仅应用于一个区域,则只记录该区域的事件,即使事件选择器参数指定所有 Amazon S3 存储桶和 Lambda 函数。事件选择器仅应用于在其中创建跟踪的区域。

aws cloudtrail put-event-selectors --trail-name TrailName2 --event-selectors '[{"ReadWriteType": "All","IncludeManagementEvents": true,"DataResources": [{"Type":"AWS::S3::Object", "Values": ["arn:aws:s3:::"]},{"Type": "AWS::Lambda::Function","Values": ["arn:aws:lambda"]}]}]'

以下示例返回为跟踪配置的事件选择器:

{ "EventSelectors": [ { "IncludeManagementEvents": true, "DataResources": [ { "Values": [ "arn:aws:s3:::" ], "Type": "AWS::S3::Object" }, { "Values": [ "arn:aws:lambda" ], "Type": "AWS::Lambda::Function" }, ], "ReadWriteType": "All" } ], "TrailARN": "arn:aws:cloudtrail:us-east-2:123456789012:trail/TrailName2" }

停止和启动跟踪的日志记录

以下命令启动和停止 CloudTrail 日志记录:

aws cloudtrail start-logging --name awscloudtrail-example
aws cloudtrail stop-logging --name awscloudtrail-example

注意

在删除存储桶之前,运行 stop-logging 命令以停止向存储桶传送事件。如果不停止日志记录,CloudTrail 将在有限时段内尝试将日志文件传送到具有相同名称的存储桶。

删除跟踪

可使用以下命令删除跟踪。您只能从创建跟踪的区域中删除跟踪。

aws cloudtrail delete-trail --name awscloudtrail-example

在删除跟踪时,请不要删除 Amazon S3 存储桶或与该存储桶关联的 Amazon SNS 主题。可使用 AWS 管理控制台、AWS CLI 或服务 API 单独删除这些资源。