View a markdown version of this page

判斷 KMS 金鑰的過去用量 - AWS Key Management Service

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

判斷 KMS 金鑰的過去用量

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

警告

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

檢查 KMS 金鑰許可,以判斷潛在用量的範圍

判斷目前可存取 KMS 金鑰的人員或內容,可協助您判斷 KMS 金鑰的使用範圍,以及是否仍然需要。若要判斷目前可存取 KMS 金鑰的人員或內容,請參閱 判斷對 的存取 AWS KMS keys

檢查使用 KMS 金鑰執行的最後一個密碼編譯操作

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

您可以使用 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 執行個體將會失敗。

了解用量追蹤期間

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

當您檢查 KMS 金鑰的上次用量資訊時,回應會包含追蹤開始日期。TrackingStartDate 是從 AWS KMS 開始記錄該金鑰密碼編譯活動的日期。將此日期與金鑰的建立日期搭配使用,透過比較金鑰的建立日期與追蹤開始日期來判斷其用量歷史記錄:

  • 如果上次使用資訊存在,則自追蹤開始以來,金鑰已用於密碼編譯操作。回應包含操作類型、時間戳記和相關聯的 AWS CloudTrail 事件 ID。

  • 如果上次使用資訊是的,則自追蹤開始以來,金鑰沒有記錄的密碼編譯操作。比較金鑰的建立日期與 TrackingStartDate,以判斷其意義:

    • 如果金鑰是在 TrackingStartDate 或之後建立的,則金鑰在建立之後尚未用於密碼編譯操作。

    • 如果金鑰是在 之前建立的TrackingStartDate,則自追蹤開始以來,沒有正在使用的金鑰記錄。不過,追蹤開始之前可能已使用金鑰。若要判斷之前是否使用過 金鑰,請檢查您的過去 AWS CloudTrail 日誌。

警告

刪除未使用的金鑰時,請勿僅倚賴上次使用資訊。反之,請先停用金鑰並監控 AWS CloudTrail DisabledException項目,這表示停用時嘗試使用金鑰。這有助於識別潛在的相依性和工作負載失敗。

追蹤的密碼編譯操作

只會追蹤並記錄下列成功的密碼編譯操作,以報告上次使用資訊。排除非加密操作。

  • Decrypt

  • DeriveSharedSecret

  • Encrypt

  • GenerateDataKey

  • GenerateDataKeyPair

  • GenerateDataKeyPairWithoutPlaintext

  • GenerateDataKeyWithoutPlaintext

  • GenerateMac

  • ReEncrypt

  • Sign

  • Verify

  • VerifyMac

其他考量

當您使用用量資訊時,請記住下列事項:

  • 多區域 KMS 金鑰 — 對於多區域 KMS 金鑰,主要金鑰和複本金鑰會獨立追蹤上次使用資訊。多區域金鑰集中的每個金鑰都會維護自己的上次使用資訊。

  • ReEncrypt 操作ReEncrypt操作使用兩個金鑰:用於解密的來源金鑰和用於加密的目的地金鑰。這兩個金鑰的上次使用資訊都會獨立記錄,每個金鑰都具有來自個別金鑰擁有者帳戶的 CloudTrail 事件 ID。

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

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

GetKeyLastUsage 操作會傳回使用指定 KMS 金鑰執行的最後一個密碼編譯操作的使用資訊。若要識別 KMS 金鑰,請使用金鑰 ID金鑰 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 日誌以檢查過去的用量

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

所有 AWS KMS API 活動都會記錄在 AWS CloudTrail 日誌檔案中。如果您已在 KMS 金鑰所在的區域中建立 CloudTrail 追蹤,您可以檢查 CloudTrail 日誌檔案,以檢視特定 KMS 金鑰所有 AWS KMS API 活動的歷史記錄。即使沒有追蹤,您依然可以在 CloudTrail 事件歷史記錄中檢視最新事件。如需如何使用 AWS KMS CloudTrail 的詳細資訊,請參閱 使用 記錄 AWS KMS API 呼叫 AWS CloudTrail

以下範例會顯示 KMS 金鑰用來保護存放在 Amazon Simple Storage Service (Amazon S3) 中的物件時,所產生的 CloudTrail 日誌項目。在此範例中,物件會使用透過含有 KMS 金鑰的伺服器端加密 (SSE-KMS) 來保護資料 上傳至 Simple Storage Service (Amazon S3)。當您使用 SSE-KMS 將物件上傳到 Amazon S3 時,請指定用於保護物件的 KMS 金鑰。Amazon S3 使用 AWS KMS GenerateDataKey操作來請求物件的唯一資料金鑰,而此請求事件會以類似如下的項目記錄在 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。如需 CloudTrail 的詳細資訊,請參閱《AWS CloudTrail 使用者指南》。