

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 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 開發人員指南》**中的 [Identify different key types](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 key (SSE-KMS) AWS KMS 建置來加密 CloudTrail 日誌檔案。若要進一步了解 SSE-KMS，請參閱《*Amazon Simple Storage Service 使用者指南*》中的[使用伺服器端加密與 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)的下列資訊：
+ CloudTrail 追蹤的 [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)
+ 交付 CloudTrail 日誌檔案的 S3 儲存貯體 ARN 和路徑

`GenerateDataKey` 請求會在您的 CloudTrail 日誌中產生類似以下範例的項目。當您看到像這樣的日誌項目時，您可以判斷 CloudTrail AWS KMS `GenerateDataKey`已針對特定線索呼叫 操作。 已在特定 KMS 金鑰下 AWS 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 都會 AWS KMS 代表 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 會產生唯一的資料金鑰，然後傳送兩個資料金鑰複本給 Amazon S3，一個為純文字，另一個使用指定的 KMS 金鑰加密。Amazon S3 使用純文字資料金鑰來加密 CloudTrail 日誌檔案，然後在使用後盡快從記憶體移除純文字資料金鑰。Amazon S3 會將加密的資料金鑰以中繼資料形式跟加密 CloudTrail 日誌檔案一起存放。

`GenerateDataKey` 請求包含[加密內容](https://docs.aws.amazon.com/kms/latest/developerguide/encrypt_context.html)的下列資訊：
+ CloudTrail 追蹤的 [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)
+ S3 物件的 ARN (CloudTrail 日誌檔案)

每個 `GenerateDataKey` 請求會在您的 CloudTrail 日誌中產生類似以下範例的項目。當您看到像這樣的日誌項目時，您可以判斷 CloudTrail 已針對特定線索呼叫 AWS KMS `GenerateDataKey` 操作，以保護特定日誌檔案。 在指定的 KMS 金鑰下 AWS 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 都會 AWS KMS 代表您傳送[https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)請求至 ，以解密日誌檔案的加密資料金鑰。為了回應此請求， AWS KMS 會使用 KMS 金鑰來解密資料金鑰，然後將純文字資料金鑰傳送至 Amazon S3。Amazon S3 使用純文字資料金鑰來解密 CloudTrail 日誌檔案，然後在使用後盡快從記憶體移除純文字資料金鑰。

`Decrypt` 請求包含[加密內容](https://docs.aws.amazon.com/kms/latest/developerguide/encrypt_context.html)的下列資訊：
+ CloudTrail 追蹤的 [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)
+ S3 物件的 ARN (CloudTrail 日誌檔案)

每個 `Decrypt` 請求會在您的 CloudTrail 日誌中產生類似以下範例的項目。當您看到像這樣的日誌項目時，您可以判斷 擔任的角色是否針對特定線索和特定日誌檔案呼叫 AWS KMS `Decrypt` 操作。 已在特定 KMS 金鑰下 AWS 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"
}
```