AWS Key Management Service
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

AWS CloudTrail 如何使用 AWS KMS

您可以使用 AWS CloudTrail 来记录 AWS 账户的 AWS API 调用和其他活动,以及将已记录的信息保存到您选择的 Amazon Simple Storage Service (Amazon S3) 存储桶中的日志文件。默认情况下,CloudTrail 提交到您的 S3 存储桶的日志文件是使用采纳 Amazon S3 托管加密密钥的服务器端加密 (SSE-S3) 进行加密的。但是,您可以选择改为使用采纳 AWS KMS 托管密钥的服务器端加密 (SSE-KMS)。要了解如何使用 AWS KMS 加密您的 CloudTrail 日志文件,请参阅 AWS CloudTrail User Guide 中的使用 AWS KMS 托管密钥 (SSE-KMS) 加密 CloudTrail 日志文件

了解何时使用您的 CMK

使用 AWS KMS 加密 CloudTrail 日志文件这一功能建立在采纳 AWS KMS 托管密钥的、名为服务器端加密 (SSE-KMS) 的 Amazon S3 功能的基础之上。要了解 SSE-KMS 的更多信息,请参阅本指南中的 Amazon Simple Storage Service (Amazon S3) 如何使用 AWS KMSAmazon Simple Storage Service 开发人员指南 中的使用采纳 AWS KMS 托管密钥的服务器端加密 (SSE-KMS) 保护数据

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

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

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

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

GenerateDataKey 请求会在您的 CloudTrail 日志中生成一个与以下示例类似的条目。当您看到与此类似的日志条目时,便可以确定 CloudTrail ( ) 调用了某特定跟踪 ( ) 的 AWS KMS ( ) GenerateDataKey API ( )。AWS KMS 借助某特定 CMK ( ) 创建了数据密钥。

注意

You might need to scroll to the right to see some of the callouts in the following example log entry.

{ "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 会代表 CloudTrail 将 GenerateDataKey 请求发送到 AWS KMS。为了响应该请求,AWS KMS 会生成一个唯一的数据密钥,然后将该数据密钥的两个副本发送给 Amazon S3,一个为明文,另一个则使用指定的 CMK 进行了加密。Amazon S3 使用明文数据密钥为 CloudTrail 日志文件加密,并在使用后尽快从内存中删除该明文数据密钥。Amazon S3 将加密的数据密钥与加密的 CloudTrail 日志文件一起存储为元数据。

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

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

注意

You might need to scroll to the right to see some of the callouts in the following example log entry.

{ "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 请求发送到 AWS KMS 以将日志文件的加密数据密钥解密。为了响应该请求,AWS KMS 使用您的 CMK 将数据密钥解密,然后将明文数据密钥发送到 Amazon S3。Amazon S3 使用明文数据密钥来将 CloudTrail 日志文件解密,并在使用后尽快从内存中删除该明文数据密钥。

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

每个 Decrypt 请求会在您的 CloudTrail 日志中生成一个与以下示例类似的条目。当您看到与此类似的日志条目时,便可以确定您的 AWS 账户 ( ) 中的 IAM 用户调用了某特定跟踪 ( ) 和某特定日志文件 ( ) 的 AWS KMS ( ) Decrypt API ( )。AWS KMS 借助某特定 CMK ( ) 解密了数据密钥。

注意

You might need to scroll to the right to see some of the callouts in the following example log entry.

{ "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 的使用频率

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

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

  • 如果您在单个 AWS 账户的两个地区中启用此功能,则每天可以生成大约 576 个 AWS KMS API (2 x 288)。

  • 如果您在三个 AWS 账户每一个的两个区域中启用此功能,则每天可以生成大约 1,728 个 AWS KMS API 请求 (6 x 288)。

这些数字仅代表从 PUT 请求产生的 AWS KMS 调用。当您从 S3 存储桶获取加密的日志文件时,它们不会计数从 GET 请求产生的对 AWS KMS 的解密调用。