使用 加密查詢結果 AWS Key Management Service - Amazon CloudWatch Logs

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

使用 加密查詢結果 AWS Key Management Service

根據預設,CloudWatch Logs 會使用 CloudWatch Logs 伺服器端預設的加密方法,加密您 CloudWatch Logs Insights 查詢所儲存的結果。您可以選擇使用 AWS KMS 金鑰來加密這些結果。如果您將 AWS KMS 金鑰與加密結果建立關聯,CloudWatch Logs 會使用該金鑰來加密帳戶中所有查詢的儲存結果。

如果您之後取消金鑰與查詢結果的關聯,CloudWatch Logs 會在日後的查詢中重新使用預設的加密方法。不過,在金鑰仍有關聯時所執行的查詢,依然會使用該金鑰來加密。由於 CloudWatch Logs 仍可繼續參照該金鑰,因此依然可在 KMS 金鑰解除關聯後傳回那些結果。然而,若之後將金鑰停用,CloudWatch Logs 就無法讀取使用該金鑰加密的日誌。

重要

CloudWatch Logs 僅支援對稱 KMS 金鑰。切勿使用非對稱金鑰加密查詢結果。如需詳細資訊,請參閱使用對稱和非對稱金鑰

限制

  • 若要執行下列步驟,您必須擁有下列許可:kms:CreateKeykms:GetKeyPolicykms:PutKeyPolicy

  • 建立或取消金鑰與查詢結果的關聯後,操作會在 5 分鐘內生效。

  • 如果您撤銷 CloudWatch Logs 對已關聯金鑰的存取權,或刪除所關聯的 KMS 金鑰,您將無法再擷取 CloudWatch Logs 中的加密資料。

  • 您無法使用 CloudWatch 主控台來關聯金鑰,您必須使用 AWS CLI 或 CloudWatch Logs API。

步驟 1:建立 AWS KMS key

若要建立 KMS 金鑰,請使用以下 create-key 命令:

aws kms create-key

輸出包含金鑰 ID 和金鑰的 Amazon Resource Name (ARN)。下列為範例輸出:

{ "KeyMetadata": { "Origin": "AWS_KMS", "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "Description": "", "KeyManager": "CUSTOMER", "Enabled": true, "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", "KeyUsage": "ENCRYPT_DECRYPT", "KeyState": "Enabled", "CreationDate": 1478910250.94, "Arn": "arn:aws:kms:us-west-2:123456789012:key/6f815f63-e628-448c-8251-e40cb0d29f59", "AWSAccountId": "123456789012", "EncryptionAlgorithms": [ "SYMMETRIC_DEFAULT" ] } }

步驟 2:設定 KMS 金鑰許可

根據預設,所有 KMS 金鑰皆屬私有。只有資源擁有者可以使用它來加密和解密資料。然而,資源擁有者可以授予其他使用者和資源存取金鑰的許可。在此步驟中,您會給予 CloudWatch Logs 服務主體使用金鑰的許可。此服務主體必須位於存放金鑰的相同 AWS 區域中。

最佳實務是,建議您將金鑰的使用限制為您指定的 AWS 帳戶。

首先,使用以下 get-key-policy 命令,將 KMS 金鑰的預設政策儲存為 policy.json

aws kms get-key-policy --key-id key-id --policy-name default --output text > ./policy.json

在文字編輯器中開啟 policy.json 檔案,並從下列其中一個陳述式中加入區段 (以粗體顯示)。使用逗號從新陳述式中分隔現有陳述式。這些陳述式使用 Condition 區段來增強 AWS KMS 金鑰的安全性。如需詳細資訊,請參閱AWS KMS 金鑰和加密內容

本範例中的 Condition 區段限制了 AWS KMS 金鑰的用途,僅限用於指定帳戶的 CloudWatch Logs Insights 查詢結果。

{ "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account_ID:root" }, "Action": "kms:*", "Resource": "*" }, { "Effect": "Allow", "Principal": { "Service": "logs.region.amazonaws.com" }, "Action": [ "kms:Encrypt*", "kms:Decrypt*", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:Describe*" ], "Resource": "*", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:logs:region:account_ID:query-result:*" }, "StringEquals": { "aws:SourceAccount": "Your_account_ID" } } } ] }

最後,使用下列 put-key-policy 命令新增更新的政策:

aws kms put-key-policy --key-id key-id --policy-name default --policy file://policy.json

步驟 3:為 KMS 金鑰與您的查詢結果建立關聯

若要為 KMS 金鑰與帳戶中的查詢結果建立關聯

使用 disassociate-kms-key 命令,如下所示:

aws logs associate-kms-key --resource-identifier "arn:aws:logs:region:account-id:query-result:*" --kms-key-id "key-arn"

步驟 4:將金鑰與帳戶中的查詢結果取消關聯

若要取消 KMS 金鑰與查詢結果的關聯,請使用以下 disassociate-kms-key 命令:

aws logs disassociate-kms-key --resource-identifier "arn:aws:logs:region:account-id:query-result:*"