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

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

Amazon CloudTrail 如何使用 Amazon KMS

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

重要

Amazon CloudTrail 和 Amazon S3 仅支持对称 Amazon KMS keys。您不能使用非对称 KMS 密钥来加密您的 CloudTrail 日志。要获取确定 KMS 密钥是对称还是非对称的帮助,请参阅 识别非对称 KMS 密钥

CloudTrail 读取或写入使用 SSE-KMS 密钥加密的日志文件时,您无需支付密钥使用费。但是,当您访问使用 SSE-KMS 密钥加密的 CloudTrail 日志文件时,您需要支付密钥使用费。有关 Amazon KMS 定价的信息,请参阅 Amazon Key Management Service 定价。有关 CloudTrail 定价的信息,请参阅《Amazon CloudTrail用户指南》中的定Amazon CloudTrail价和管理成本

了解何时使用您的 KMS 密钥

使用基于 Amazon S3 的Amazon KMS功能对 CloudTrail 日志文件进行加密,该功能称为服务器端加密 Amazon KMS key (SSE-KMS)。要了解 SSE-KMS 的详情,请参阅本指南中的 Amazon Simple Storage Service (Amazon S3) 如何使用 Amazon KMS,或 Amazon Simple Storage Service 用户指南通过具有 KMS 密钥的服务器端加密 (SSE-KMS) 保护数据

当您配置Amazon CloudTrail为使用 SSE-KMS 加密日志文件时, CloudTrail Amazon S3 Amazon KMS keys 会在您对这些服务执行某些操作时使用您的日志文件。以下部分说明了这些服务将何时以及如何使用您的 KMS 密钥,并提供了您可以用于验证此说明的其他信息。

您配置 CloudTrail 为使用您的日志文件进行加密 Amazon KMS key

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

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

GenerateDataKey请求会在您的 CloudTrail 日志中生成一个类似于以下示例的条目。当你看到这样的日志条目时,你可以确定那个 CloudTrail ( ) 为特定的跟踪 Amazon KMS ( ) 调用了 () GenerateDataKey 操作 ( )。 Amazon KMS在特定的 KMS 密钥下创建了数据密钥 ( )。

注意

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

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

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

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

注意

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

{ "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 使用您的 KMS 密钥将数据密钥解密,然后将明文数据密钥发送到 Amazon S3。Amazon S3 使用纯文本数据密钥解密 CloudTrail 日志文件,然后在使用后尽快从内存中删除纯文本数据密钥。

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

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

注意

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

{ "eventVersion": "1.02", "userIdentity": { "type": "IAMUser", "principalId": "AIDACKCEVSQ6C2EXAMPLE", "arn": "arn:aws:iam::111122223333:role/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" }