Amazon CloudTrail 如何使用 Amazon KMS - Amazon Key Management Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon CloudTrail 如何使用 Amazon KMS

您可以使用Amazon CloudTrail要录制的内容AmazonAPI 调用和其他活动 Amazon Web Services 账户 并将记录的信息保存到您选择的 Amazon Simple Storage Service (Amazon S3) 存储桶中的日志文件中。默认情况下,CloudTrail 提交到您 S3 存储桶的日志文件是使用采纳 Amazon S3 托管加密密钥的服务器端加密 (SSE-S3) 进行加密的。但是,您可以选择改为使用服务器端加密与Amazon KMS托管密钥 (SSE-KMS)。要了解如 CloudTrail 使用Amazon KMS,请参阅通过加密 CloudTrail 日志文件Amazon KMS托管密钥 (SSE-KMS)中的Amazon CloudTrail用户指南

重要

Amazon CloudTrail和 Amazon S3 仅支持对称客户主密钥(CMK). 您无法使用非对称 CMK来加密您的 CloudTrail 日志。要获取确定 CMK 是对称还是非对称的帮助,请参阅识别对称 CMK 和非对称 CMK

了解何时使用您的 CMK

通过加密 CloudTrail 日志文件Amazon KMS构建在名为服务器端加密的 Amazon S3 功能的基础上,Amazon KMS托管密钥 (SSE-KMS)。要了解有关 SSE-KMS 的更多信息,请参阅Amazon Simple Storage Service (Amazon S3) 如何使用 Amazon S3)Amazon KMS或者在本指南中使用,使用服务器端加密与Amazon KMS托管密钥 (SSE-KMS)中的Amazon Simple Storage Service 开发人员指南

当您配置Amazon CloudTrail使用 SSE-KMS 加密您的日志文件时,CloudTrail 和 Amazon S3 会在您借助这些服务执行特定操作时使用您的客户主密钥 (CMK)。以下部分说明了这些服务将何时以及如何使用您的 CMK,并提供了您可以用于验证此说明的其他信息。

您可以将 CloudTrail 配置为使用您的客户主密钥 (CMK) 加密日志文件

当您 时更新您的 CloudTrail 配置以使用您的 CMK,CloudTrail 会发送一个GenerateDataKey请求到Amazon KMS以验证 CMK 是否存在以及 CloudTrail 有权使用该 CMK 进行加密。CloudTrail 不使用生成的数据密钥。

GenerateDataKey 请求包括加密上下文的以下信息:

  • 这些区域有:Amazon 资源名称 (ARN)CloudTrail 跟踪的项目

  • S3 存储桶的 ARN 和 CloudTrail 日志文件的传输路径

这些区域有:GenerateDataKey请求会在您的 CloudTrail 日志中生成一个与以下示例类似的条目。当您看到与此类似的日志条目时,便可以确定 CloudTrail ( ) 调用了Amazon KMS( GenerateDataKey操作 ( ) (为指定跟踪) ( )。Amazon KMS借助某特定 CMK ( )。

注意

您可能需要滚动到右侧以查看以下示例日志条目中的一些注解。

{ "eventVersion": "1.02", "userIdentity": { "type": "IAMUser", "principalId": "AIDACKCEVSQ6C2EXAMPLE", "arn": "arn:aws:iam::086441151436:user/AWSCloudTrail", "accountId": "086441151436", "accessKeyId": "AKIAI44QH8DHBEXAMPLE", "userName": "AWSCloudTrail", "sessionContext": {"attributes": { "mfaAuthenticated": "false", "creationDate": "2015-11-11T21:15:33Z" }}, "invokedBy": "internal.amazonaws.com" }, "eventTime": "2015-11-11T21:15:33Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKey", "awsRegion": "us-west-2", "sourceIPAddress": "internal.amazonaws.com", "userAgent": "internal.amazonaws.com", "requestParameters": { "keyId": "arn:aws:kms:us-west-2:111122223333:alias/ExampleAliasForCloudTrailCMK", "encryptionContext": { "aws:cloudtrail:arn": "arn:aws:cloudtrail:us-west-2:111122223333:trail/Default", "aws:s3:arn": "arn:aws:s3:::example-bucket-for-CT-logs/AWSLogs/111122223333/" }, "keySpec": "AES_256" }, "responseElements": null, "requestID": "581f1f11-88b9-11e5-9c9c-595a1fb59ac0", "eventID": "3cdb2457-c035-4890-93b6-181832b9e766", "readOnly": true, "resources": [{ "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId": "111122223333" }], "eventType": "AwsServiceEvent", "recipientAccountId": "111122223333" }

CloudTrail 会将日志文件放入您的 S3 存储桶中

每当 CloudTrail 将日志文件放入您的 S3 存储桶中时,Amazon S3 会在您的 S3 存储桶中生成一个GenerateDataKey请求到Amazon KMS代表 CloudTrail。根据这项要求,Amazon KMS会生成一个唯一的数据密钥,然后将该数据密钥的两个副本发送给 Amazon S3,一个为明文,另一个则使用指定的 CMK 进行了加密。Amazon S3 使用明文数据密钥为 CloudTrail 日志文件加密,并在使用后尽快从内存中删除该明文数据密钥。Amazon S3 将加密的数据密钥作为元数据与加密的 CloudTrail 日志文件一起存储为元数据。

GenerateDataKey 请求包括加密上下文的以下信息:

EACHGenerateDataKey请求会在您的 CloudTrail 日志中生成一个与以下示例类似的条目。当您看到与此类似的日志条目时,便可以确定 CloudTrail ( ) 调用了Amazon KMS( GenerateDataKey操作 ( ) (为指定跟踪) ( ) 以保护特定日志文件 ( )。Amazon KMS借助指定的 CMK ( ) 创建了数据密钥,该数据密钥在同一日志条目中显示了两次。

注意

您可能需要滚动到右侧以查看以下示例日志条目中的一些注解。

{ "eventVersion": "1.02", "userIdentity": { "type": "AssumedRole", "principalId": "AROACKCEVSQ6C2EXAMPLE:i-34755b85", "arn": "arn:aws:sts::086441151436:assumed-role/AWSCloudTrail/i-34755b85", "accountId": "086441151436", "accessKeyId": "AKIAI44QH8DHBEXAMPLE", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2015-11-11T20:45:25Z" }, "sessionIssuer": { "type": "Role", "principalId": "AROACKCEVSQ6C2EXAMPLE", "arn": "arn:aws:iam::086441151436:role/AWSCloudTrail", "accountId": "086441151436", "userName": "AWSCloudTrail" } }, "invokedBy": "internal.amazonaws.com" }, "eventTime": "2015-11-11T21:15:58Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKey", "awsRegion": "us-west-2", "sourceIPAddress": "internal.amazonaws.com", "userAgent": "internal.amazonaws.com", "requestParameters": { "encryptionContext": { "aws:cloudtrail:arn": "arn:aws:cloudtrail:us-west-2:111122223333:trail/Default", "aws:s3:arn": "arn:aws:s3:::example-bucket-for-CT-logs/AWSLogs/111122223333/CloudTrail/us-west-2/2015/11/11/111122223333_CloudTrail_us-west-2_20151111T2115Z_7JREEBimdK8d2nC9.json.gz" }, "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "keySpec": "AES_256" }, "responseElements": null, "requestID": "66f3f74a-88b9-11e5-b7fb-63d925c72ffe", "eventID": "7738554f-92ab-4e27-83e3-03354b1aa898", "readOnly": true, "resources": [{ "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId": "111122223333" }], "eventType": "AwsServiceEvent", "recipientAccountId": "111122223333" }

从 S3 存储桶中获得加密的日志文件

每次当您从您的 S3 存储桶中获得加密的 CloudTrail 日志文件时,Amazon S3 会将Decrypt请求到Amazon KMS以将日志文件的加密数据密钥解密。根据这项要求,Amazon KMS使用您的 CMK 将数据密钥解密,然后将明文数据密钥发送到 Amazon S3。Amazon S3 使用明文数据密钥来将 CloudTrail 日志文件解密,并在使用后尽快从内存中删除该明文数据密钥。

Decrypt 请求包括加密上下文的以下信息:

EACHDecrypt请求会在您的 CloudTrail 日志中生成一个与以下示例类似的条目。当您看到与此类似的日志条目时,便可以确定您的 Amazon Web Services 账户 ( ) 调用了Amazon KMS( Decrypt操作 ( ) (为指定跟踪) ( ) 和特定日志文件) ( )。Amazon KMS借助某特定 CMK ( )。

注意

您可能需要滚动到右侧以查看以下示例日志条目中的一些注解。

{ "eventVersion": "1.02", "userIdentity": { "type": "IAMUser", "principalId": "AIDACKCEVSQ6C2EXAMPLE", "arn": "arn:aws:iam::111122223333:user/cloudtrail-admin", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName": "cloudtrail-admin", "sessionContext": {"attributes": { "mfaAuthenticated": "false", "creationDate": "2015-11-11T20:48:04Z" }}, "invokedBy": "signin.amazonaws.com" }, "eventTime": "2015-11-11T21:20:52Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "us-west-2", "sourceIPAddress": "internal.amazonaws.com", "userAgent": "internal.amazonaws.com", "requestParameters": { "encryptionContext": { "aws:cloudtrail:arn": "arn:aws:cloudtrail:us-west-2:111122223333:trail/Default", "aws:s3:arn": "arn:aws:s3:::example-bucket-for-CT-logs/AWSLogs/111122223333/CloudTrail/us-west-2/2015/11/11/111122223333_CloudTrail_us-west-2_20151111T2115Z_7JREEBimdK8d2nC9.json.gz" } }, "responseElements": null, "requestID": "16a0590a-88ba-11e5-b406-436f15c3ac01", "eventID": "9525bee7-5145-42b0-bed5-ab7196a16daa", "readOnly": true, "resources": [{ "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId": "111122223333" }], "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }

了解您的 CMK 的使用频率

为了预测成本并更好地了解您的Amazon,您可能需要知道 CloudTrail 使用您的 CMK 的频率。Amazon KMS会对超出免费套餐服务的所有 API 服务请求收费。有关确切的费用,请参阅 Amazon Key Management Service 定价

当 CloudTrail 用Amazon KMS托管密钥 (SSE-KMS),每次CloudTrail 会将日志文件放入您的 S3 存储桶中它会导致一个Amazon KMSAPI 请求。通常情况下,CloudTrail 会每五分钟将日志文件放入 S3 存储桶一次,这会在您的 S3 存储桶中生成大约 288 个日志文件Amazon KMS每天、每个区域和每个 Amazon Web Services 账户 。例如:

  • 如果您在单个 Amazon Web Services 账户 ,您可以预计大约 576Amazon KMS每天的 API 请求(2 x 288)。

  • 如果您在三个区域中的两个区域中启用此功能 Amazon Web Services 账户 ,您可以预计约 1,728Amazon KMS每天的 API 请求(6 x 288)。

这些数字仅代表从 PUT 请求产生的 Amazon KMS 调用。他们不计算解密调用数Amazon KMS该结果来自GET当您从 S3 存储桶中获得加密的日志文件时会请求。