

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

# 判斷 KMS 金鑰的過去用量
<a name="monitoring-keys-determining-usage"></a>

為了監控和稽核目的，您可能想知道過去如何使用 KMS 金鑰。例如，您可能想要先判斷 KMS 金鑰是否仍在使用中，再停用或排程刪除，或識別您帳戶中未使用的金鑰。下列策略可協助您判斷 KMS 金鑰過去的使用情形。

**警告**  
這些用於確定過去用量的策略僅適用於 AWS 委託人和 AWS KMS 操作。他們無法偵測對 不涉及 API 呼叫的金鑰使用情況 AWS KMS。從對稱 KMS 金鑰產生資料金鑰之後，其後續用於 外部的本機加密或解密 AWS KMS 不會反映在上次使用資訊中。同樣地，這些策略無法偵測在 外部使用非對稱 KMS 金鑰的公有金鑰 AWS KMS。如需刪除用於公有金鑰密碼編譯之非對稱 KMS 金鑰特殊風險的詳細資訊，包括建立無法解密的加密文字，請參閱 [Deleting asymmetric KMS keys](deleting-keys.md#deleting-asymmetric-cmks)。

**Topics**
+ [檢查 KMS 金鑰許可，以判斷潛在用量的範圍](#monitoring-keys-usage-key-permissions)
+ [檢查使用 KMS 金鑰執行的最後一個密碼編譯操作](#examine-last-usage)
+ [檢查 AWS CloudTrail 日誌以檢查過去的用量](#deleting-keys-usage-cloudtrail)

## 檢查 KMS 金鑰許可，以判斷潛在用量的範圍
<a name="monitoring-keys-usage-key-permissions"></a>

判斷目前可存取 KMS 金鑰的人員或內容，可協助您判斷 KMS 金鑰的使用範圍，以及是否仍然需要。若要判斷目前可存取 KMS 金鑰的人員或內容，請參閱 [判斷對 的存取 AWS KMS keys](determining-access.md)。

## 檢查使用 KMS 金鑰執行的最後一個密碼編譯操作
<a name="examine-last-usage"></a>

AWS KMS 提供上次使用每個 KMS 金鑰執行之成功密碼編譯操作的用量資訊，以及相關聯的 CloudTrail 事件 ID。這可以簡化識別未使用的 KMS 金鑰的程序。您也可以在金鑰政策中使用 [kms:TrailingDaysWithoutKeyUsage](conditions-kms.md#conditions-kms-trailing-days-without-key-usage) 條件金鑰，以防止最近使用的金鑰意外停用或排程刪除。

您可以使用 AWS 管理主控台 AWS CLI或 AWS KMS API，檢視使用 KMS 金鑰執行的上次成功密碼編譯操作。

**注意**  
某些 AWS 服務會建立依賴 KMS 金鑰進行資料保護的資源，但不會經常叫用該金鑰的密碼編譯操作。例如，只有在磁碟區連接至執行個體時，Amazon EC2 服務才會呼叫 AWS KMS 來解密加密的 Amazon EBS 磁碟區的資料金鑰。在這些情況下，您不得單獨使用上次使用資訊來判斷是否可以刪除 KMS 金鑰。如果刪除保護 Amazon EBS 磁碟區的 KMS 金鑰，則已連接的 Amazon EBS 磁碟區不會中斷，但後續嘗試將該加密的 Amazon EBS 磁碟區連接至另一個 Amazon EC2 執行個體將會失敗。

### 了解用量追蹤期間
<a name="understanding-tracking-period"></a>

AWS KMS 只會追蹤對每個 KMS 金鑰執行的上次成功密碼編譯操作。從密碼編譯操作發生的時間到記錄用量的時間，最多可能會延遲一小時。

當您檢查 KMS 金鑰的上次用量資訊時，回應會包含追蹤開始日期。`TrackingStartDate` 是從 AWS KMS 開始記錄該金鑰密碼編譯活動的日期。將此日期與金鑰的建立日期搭配使用，透過比較金鑰的建立日期與追蹤開始日期來判斷其用量歷史記錄：
+ 如果上次使用資訊**存在**，則自追蹤開始以來，金鑰已用於密碼編譯操作。回應包含操作類型、時間戳記和相關聯的 AWS CloudTrail 事件 ID。
+ 如果上次使用資訊是**空**的，則自追蹤開始以來，金鑰沒有記錄的密碼編譯操作。比較金鑰的建立日期與 `TrackingStartDate`，以判斷其意義：
  + 如果金鑰是在 `TrackingStartDate` *或之後*建立的，則金鑰在建立之後尚未用於密碼編譯操作。
  + 如果金鑰是在 *之前*建立的`TrackingStartDate`，則自追蹤開始以來，沒有正在使用的金鑰記錄。不過，追蹤開始之前可能已使用金鑰。若要判斷之前是否使用過 金鑰，請檢查您的過去 AWS CloudTrail 日誌。

**警告**  
刪除未使用的金鑰時，請勿僅倚賴上次使用資訊。反之，請先[停用金鑰](enabling-keys.md)並監控 AWS CloudTrail `DisabledException`項目，這表示停用時嘗試使用金鑰。這有助於識別潛在的相依性和工作負載失敗。

### 追蹤的密碼編譯操作
<a name="tracked-crypto-operations"></a>

只會追蹤並記錄下列成功的密碼編譯操作，以報告上次使用資訊。排除非加密操作。
+ `Decrypt`
+ `DeriveSharedSecret`
+ `Encrypt`
+ `GenerateDataKey`
+ `GenerateDataKeyPair`
+ `GenerateDataKeyPairWithoutPlaintext`
+ `GenerateDataKeyWithoutPlaintext`
+ `GenerateMac`
+ `ReEncrypt`
+ `Sign`
+ `Verify`
+ `VerifyMac`

### 其他考量
<a name="last-usage-considerations"></a>

當您使用用量資訊時，請記住下列事項：
+ **多區域 KMS 金鑰** — 對於多區域 KMS 金鑰，主要金鑰和複本金鑰會獨立追蹤上次使用資訊。多區域金鑰集中的每個金鑰都會維護自己的上次使用資訊。
+ **ReEncrypt 操作** — `ReEncrypt`操作使用兩個金鑰：用於解密的來源金鑰和用於加密的目的地金鑰。這兩個金鑰的上次使用資訊都會獨立記錄，每個金鑰都具有來自個別金鑰擁有者帳戶的 CloudTrail 事件 ID。

您可以使用下列方法檢視上次用量資訊：

### 使用 AWS KMS 主控台
<a name="key-last-usage-using-console"></a>

您可以在每個 KMS 金鑰的詳細資訊頁面上，檢視使用 KMS 金鑰執行的上次成功密碼編譯操作。如需如何檢視 KMS 金鑰詳細資訊頁面的程序，請參閱 [存取和列出 KMS 金鑰詳細資訊](finding-keys.md)。

### 使用 AWS KMS API
<a name="key-last-usage-using-api"></a>

[GetKeyLastUsage](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyLastUsage.html) 操作會傳回使用指定 KMS 金鑰執行的最後一個密碼編譯操作的使用資訊。若要識別 KMS 金鑰，請使用[金鑰 ID](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-id) 或[金鑰 ARN](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN)。

例如，以下呼叫會`GetKeyLastUsage`擷取金鑰 ID 為 {{1234abcd-12ab-34cd-56ef-1234567890ab}} 之 KMS 金鑰的使用資訊。

```
$ aws kms get-key-last-usage --key-id "{{1234abcd-12ab-34cd-56ef-1234567890ab}}"
{
    "KeyCreationDate": 1773253425.56,
    "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab",
    "TrackingStartDate": 1773253425.56,
    "KeyLastUsage": {
        "Timestamp": 1773253497.0,
        "Operation": "Encrypt",
        "KmsRequestId": "040cce3e-9ef3-4651-b8cf-e47c9bafdc9b",
        "CloudTrailEventId": "2cfd5892-ea8c-4342-ad49-4b9594b06a8b"
    }
}
```

相反地，以下呼叫不會`GetKeyLastUsage`顯示金鑰 ID 為 {{0987dcba-09fe-87dc-65ba-ab0987654321}} 之 KMS 金鑰的用量資訊。

```
$ aws kms get-key-last-usage --key-id "{{0987dcba-09fe-87dc-65ba-ab0987654321}}"
{
    "KeyCreationDate": 1672531200.0,
    "KeyId": "0987dcba-09fe-87dc-65ba-ab0987654321",
    "TrackingStartDate": 1773253425.56,
    "KeyLastUsage": {}
}
```

## 檢查 AWS CloudTrail 日誌以檢查過去的用量
<a name="deleting-keys-usage-cloudtrail"></a>

您可以使用 KMS 金鑰的使用歷史記錄，來協助您判斷是否有在特定 KMS 金鑰下加密的加密文字。

所有 AWS KMS API 活動都會記錄在 AWS CloudTrail 日誌檔案中。如果您已在 KMS 金鑰所在的區域中[建立 CloudTrail 追蹤](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html)，您可以檢查 CloudTrail 日誌檔案，以檢視特定 KMS 金鑰所有 AWS KMS API 活動的歷史記錄。即使沒有追蹤，您依然可以在 [CloudTrail 事件歷史記錄](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events.html)中檢視最新事件。如需如何使用 AWS KMS CloudTrail 的詳細資訊，請參閱 [使用 記錄 AWS KMS API 呼叫 AWS CloudTrail](logging-using-cloudtrail.md)。

以下範例會顯示 KMS 金鑰用來保護存放在 Amazon Simple Storage Service (Amazon S3) 中的物件時，所產生的 CloudTrail 日誌項目。在此範例中，物件會使用[透過含有 KMS 金鑰的伺服器端加密 (SSE-KMS) 來保護資料](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html) 上傳至 Simple Storage Service (Amazon S3)。當您使用 SSE-KMS 將物件上傳到 Amazon S3 時，請指定用於保護物件的 KMS 金鑰。Amazon S3 使用 AWS KMS [https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)操作來請求物件的唯一資料金鑰，而此請求事件會以類似如下的項目記錄在 CloudTrail 中：

```
{
  "eventVersion": "1.02",
  "userIdentity": {
    "type": "AssumedRole",
    "principalId": "AROACKCEVSQ6C2EXAMPLE:example-user",
    "arn": "arn:aws:sts::111122223333:assumed-role/Admins/example-user",
    "accountId": "111122223333",
    "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
    "sessionContext": {
      "attributes": {
        "mfaAuthenticated": "false",
        "creationDate": "2015-09-10T23:12:48Z"
      },
      "sessionIssuer": {
        "type": "Role",
        "principalId": "AROACKCEVSQ6C2EXAMPLE",
        "arn": "arn:aws:iam::111122223333:role/Admins",
        "accountId": "111122223333",
        "userName": "Admins"
      }
    },
    "invokedBy": "internal.amazonaws.com"
  },
  "eventTime": "2015-09-10T23:58:18Z",
  "eventSource": "kms.amazonaws.com",
  "eventName": "GenerateDataKey",
  "awsRegion": "us-west-2",
  "sourceIPAddress": "internal.amazonaws.com",
  "userAgent": "internal.amazonaws.com",
  "requestParameters": {
    "encryptionContext": {"aws:s3:arn": "arn:aws:s3:::example_bucket/example_object"},
    "keySpec": "AES_256",
    "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
  },
  "responseElements": null,
  "requestID": "cea04450-5817-11e5-85aa-97ce46071236",
  "eventID": "80721262-21a5-49b9-8b63-28740e7ce9c9",
  "readOnly": true,
  "resources": [{
    "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
    "accountId": "111122223333"
  }],
  "eventType": "AwsApiCall",
  "recipientAccountId": "111122223333"
}
```

當您稍後從 Amazon S3 下載此物件時，Amazon S3 會傳送`Decrypt`請求至 AWS KMS ，以使用指定的 KMS 金鑰解密物件的資料金鑰。當您執行此操作，您的 CloudTrail 日誌檔案會包含類似以下內容的項目：

```
{
  "eventVersion": "1.02",
  "userIdentity": {
    "type": "AssumedRole",
    "principalId": "AROACKCEVSQ6C2EXAMPLE:example-user",
    "arn": "arn:aws:sts::111122223333:assumed-role/Admins/example-user",
    "accountId": "111122223333",
    "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
    "sessionContext": {
      "attributes": {
        "mfaAuthenticated": "false",
        "creationDate": "2015-09-10T23:12:48Z"
      },
      "sessionIssuer": {
        "type": "Role",
        "principalId": "AROACKCEVSQ6C2EXAMPLE",
        "arn": "arn:aws:iam::111122223333:role/Admins",
        "accountId": "111122223333",
        "userName": "Admins"
      }
    },
    "invokedBy": "internal.amazonaws.com"
  },
  "eventTime": "2015-09-10T23:58:39Z",
  "eventSource": "kms.amazonaws.com",
  "eventName": "Decrypt",
  "awsRegion": "us-west-2",
  "sourceIPAddress": "internal.amazonaws.com",
  "userAgent": "internal.amazonaws.com",
  "requestParameters": {
    "encryptionContext": {"aws:s3:arn": "arn:aws:s3:::example_bucket/example_object"}},
  "responseElements": null,
  "requestID": "db750745-5817-11e5-93a6-5b87e27d91a0",
  "eventID": "ae551b19-8a09-4cfc-a249-205ddba330e3",
  "readOnly": true,
  "resources": [{
    "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
    "accountId": "111122223333"
  }],
  "eventType": "AwsApiCall",
  "recipientAccountId": "111122223333"
}
```

透過評估這些日誌項目，您或許可以確定特定 KMS 金鑰的過去使用情形，這可能有助於您確定是否要刪除它。

若要查看 AWS KMS 更多 API 活動如何出現在 CloudTrail 日誌檔案中的範例，請前往 [使用 記錄 AWS KMS API 呼叫 AWS CloudTrail](logging-using-cloudtrail.md)。如需 CloudTrail 的詳細資訊，請參閱《[AWS CloudTrail 使用者指南](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/)》。