

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

# 如何 AWS CloudTrail 使用 AWS KMS
<a name="how-kms-works-with-cloudtrail"></a>

本节介绍如何处理 AWS KMS 使用 SSE-KMS 密钥加密的 CloudTrail 跟踪。

**重要**  
AWS CloudTrail 而且 Amazon S3 仅支持[对称模式 AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/symm-asymm-choose-key-spec.html#symmetric-cmks)。您不能使用[非对称 KMS 密钥](https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html)来加密您的 CloudTrail 日志。如需帮助确定 KMS 密钥是对称的还是非对称的，请参阅《*AWS Key Management Service 开发人员指南*》中的[识别不同的密钥类型](https://docs.aws.amazon.com/kms/latest/developerguide/identify-key-types.html)。

 CloudTrail 读取或写入使用 SSE-KMS 密钥加密的日志文件时，您无需支付密钥使用费。但是，当您访问使用 SSE-KMS 密钥加密的 CloudTrail 日志文件时，您需要支付密钥使用费。有关 AWS KMS 定价的信息，请参阅[AWS Key Management Service 定价](https://aws.amazon.com/kms/pricing/)。有关 CloudTrail 定价的信息，请参阅 [AWS CloudTrail 定价](https://aws.amazon.com/cloudtrail/pricing/)。

## 了解何时对跟踪使用 KMS 密钥
<a name="cloudtrail-details"></a>

使用基于 Amazon S3 的 AWS KMS 功能对 CloudTrail 日志文件进行加密，该功能称为服务器端加密 AWS KMS key (SSE-KMS)。要了解有关 SSE-KMS 的更多信息，请参阅《*亚马逊简单*存储服务用户指南》[中的使用 AWS KMS 密钥服务器端加密 (SSE-KMS)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)。

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

**Contents**
+ [

### 您配置 CloudTrail 为使用您的日志文件进行加密 AWS KMS key
](#cloudtrail-details-update-configuration)
+ [

### CloudTrail 将日志文件放入您的 S3 存储桶
](#cloudtrail-details-put-log-file)
+ [

### 从 S3 存储桶中获得加密的日志文件
](#cloudtrail-details-get-log-file)

### 您配置 CloudTrail 为使用您的日志文件进行加密 AWS KMS key
<a name="cloudtrail-details-update-configuration"></a>

[当您更新 CloudTrail 配置以使用 KMS 密钥](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/create-kms-key-policy-for-cloudtrail-update-trail.html)时， CloudTrail 会向发送[https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)请求 AWS KMS 以验证 KMS 密钥是否存在以及是否 CloudTrail 有权使用它进行加密。 CloudTrail 不使用生成的数据密钥。

`GenerateDataKey` 请求包括[加密上下文](https://docs.aws.amazon.com/kms/latest/developerguide/encrypt_context.html)的以下信息：
+ 跟踪的[亚马逊资源名称 (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) CloudTrail 
+ S3 存储桶的 ARN 和 CloudTrail 日志文件的传送路径

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

```
{
    "eventVersion": "1.09",
    "userIdentity": {
        "type": "AWSService",
        "invokedBy": "cloudtrail.amazonaws.com"
    },
    "eventTime": "2024-12-06T20:14:46Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "GenerateDataKey",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "cloudtrail.amazonaws.com",
    "userAgent": "cloudtrail.amazonaws.com",
    "requestParameters": {
        "keySpec": "AES_256",
        "keyId": "arn:aws:kms:us-east-1:123456789012:key/example1-6736-4661-bf00-exampleeb770",
        "encryptionContext": {
            "aws:cloudtrail:arn": "arn:aws:cloudtrail:us-east-1:123456789012:trail/management-events",
            "aws:s3:arn": "arn:aws:s3:::amzn-s3-demo-logging-bucket-123456789012-9af1fb49/AWSLogs/123456789012/CloudTrail/us-east-1/2024/12/06/123456789012_CloudTrail_us-east-1_20241206T2010Z_TO50OLMG1hIQ1png.json.gz"
        }
    },
    "responseElements": null,
    "requestID": "a0555e85-7e8a-4765-bd8f-2222295558e1",
    "eventID": "e4f3557e-7dbd-4e37-a00a-d86c137d1111",
    "readOnly": true,
    "resources": [
        {
            "accountId": "123456789012",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-east-1:123456789012:key/example1-6736-4661-bf00-exampleeb770"
         }],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "123456789012",
    "sharedEventID": "ce71d6be-0846-498e-851f-111a1af9078f",
    "eventCategory": "Management"
}
```

### CloudTrail 将日志文件放入您的 S3 存储桶
<a name="cloudtrail-details-put-log-file"></a>

每次 CloudTrail 将日志文件放入您的 S3 存储桶时，Amazon S3 都会代表向发送[https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)请求 CloudTrail。 AWS KMS 为响应此请求， AWS KMS 生成一个唯一的数据密钥，然后向 Amazon S3 发送两份数据密钥副本，一份为纯文本，另一份使用指定 KMS 密钥加密。Amazon S3 使用纯文本数据密钥对 CloudTrail 日志文件进行加密，然后在使用后尽快从内存中删除纯文本数据密钥。Amazon S3 将加密的数据密钥作为元数据存储在加密的 CloudTrail 日志文件中。

`GenerateDataKey` 请求包括[加密上下文](https://docs.aws.amazon.com/kms/latest/developerguide/encrypt_context.html)的以下信息：
+ 跟踪的[亚马逊资源名称 (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) CloudTrail 
+ S3 对象（ CloudTrail 日志文件）的 ARN

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

```
{
    "eventVersion": "1.09",
    "userIdentity": {
        "type": "AWSService",
        "invokedBy": "cloudtrail.amazonaws.com"
    },
    "eventTime": "2024-12-06T21:49:28Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "GenerateDataKey",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "cloudtrail.amazonaws.com",
    "userAgent": "cloudtrail.amazonaws.com",
    "requestParameters": {
        "encryptionContext": {
            "aws:cloudtrail:arn": "arn:aws:cloudtrail:us-east-1::trail/insights-trail",
            "aws:s3:arn": "arn:aws:s3:::amzn-s3-demo-logging-bucket1-123456789012-7867ab0c/AWSLogs/123456789012/CloudTrail/us-east-1/2024/12/06/123456789012_CloudTrail_us-east-1_20241206T2150Z_hVXmrJzjZk2wAM2V.json.gz"
        },
        "keySpec": "AES_256",
        "keyId": "arn:aws:kms:us-east-1:123456789012:key/example9-16ef-48ba-9163-example67a5a"
    },
    "responseElements": null,
    "requestID": "11117d14-9232-414a-b3d1-01bab4dc9f99",
    "eventID": "999e9a50-512c-4e2a-84a3-111a5f511111",
    "readOnly": true,
    "resources": [
        {
            "accountId": "123456789012",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-east-1:123456789012:key/example9-16ef-48ba-9163-example67a5a"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "123456789012",
    "sharedEventID": "5e663acc-b7fd-4cdd-8328-0eff862952fa",
    "eventCategory": "Management"
}
```

### 从 S3 存储桶中获得加密的日志文件
<a name="cloudtrail-details-get-log-file"></a>

每次您从 S3 存储桶获取加密的 CloudTrail 日志文件时，Amazon S3 都会代表您向发送解密该日志文件的加密数据密钥的[https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)请求。 AWS KMS 为了响应此请求， AWS KMS 使用您的 KMS 密钥解密数据密钥，然后将纯文本数据密钥发送到 Amazon S3。Amazon S3 使用纯文本数据密钥解密 CloudTrail 日志文件，然后在使用后尽快从内存中删除纯文本数据密钥。

`Decrypt` 请求包括[加密上下文](https://docs.aws.amazon.com/kms/latest/developerguide/encrypt_context.html)的以下信息：
+ 跟踪的[亚马逊资源名称 (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) CloudTrail 
+ S3 对象（ CloudTrail 日志文件）的 ARN

每个`Decrypt`请求都会在您的 CloudTrail 日志中生成一个条目，类似于以下示例。当你看到这样的日志条目时，你可以确定代入的角色调用了特定跟踪和特定日志文件的 AWS KMS `Decrypt`操作。 AWS KMS 已解密特定 KMS 密钥下的数据密钥。

```
{
    "eventVersion": "1.09",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AIDACKCEVSQ6C2EXAMPLE",
        "arn": "arn:aws:sts::123456789012:assumed-role/Admin",
        "accountId": "123456789012",
        "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AIDACKCEVSQ6C2EXAMPLE",
                "arn": "arn:aws:iam::123456789012:role/Admin",
                "accountId": "123456789012",
                "userName": "Admin"
            },
            "attributes": {
                "creationDate": "2024-12-06T22:04:04Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "AWS Internal"
    },
    "eventTime": "2024-12-06T22:26:34Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "Decrypt",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "AWS Internal",
    "userAgent": "AWS Internal",
    "requestParameters": {
        "encryptionContext": {
            "aws:cloudtrail:arn": "arn:aws:cloudtrail:us-east-1:123456789012:trail/insights-trail",
            "aws:s3:arn": "arn:aws:s3:::amzn-s3-demo-logging-bucket1-123456789012-7867ab0c/AWSLogs/123456789012/CloudTrail/us-east-1/2024/12/06/123456789012_CloudTrail_us-east-1_20241206T0000Z_aAAsHbGBdye3jp2R.json.gz"
        },
        "encryptionAlgorithm": "SYMMETRIC_DEFAULT"
    },
    "responseElements": null,
    "requestID": "1ab2d2d2-111a-2222-a59b-11a2b3832b53",
    "eventID": "af4d4074-2849-4b3d-1a11-a1aaa111a111",
    "readOnly": true,
    "resources": [
        {
            "accountId": "123456789012",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-east-1:123456789012:key/example9-16ef-48ba-9163-example67a5a"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "123456789012",
    "eventCategory": "Management",
    "sessionCredentialFromConsole": "true"
}
```