使用加密查询结果 Amazon Key Management Service - Amazon CloudWatch 日志
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用加密查询结果 Amazon Key Management Service

默认情况下, CloudWatch Logs 使用默认 CloudWatch 的 Logs 服务器端加密方法对 CloudWatch Logs Insights 查询的存储结果进行加密。您可以选择使用 Amazon KMS 密钥来加密这些结果。如果您将 Amazon KMS 密钥与加密结果相关联,则 CloudWatch Logs 将使用该密钥对账户中所有查询的存储结果进行加密。

如果您稍后解除密钥与查询结果的关联,则 CloudWatch 日志会回到默认的加密方法以供日后查询使用。但是,在关联密钥时运行的查询仍使用该密钥进行加密。 CloudWatch 解除 KMS 密钥关联后,日志仍然可以返回这些结果,因为 CloudWatch 日志仍然可以继续引用该密钥。但是,如果密钥稍后被禁用,则 CloudWatch Logs 将无法读取使用该密钥加密的查询结果。

重要

CloudWatch 日志仅支持对称 KMS 密钥。请勿使用非对称密钥来加密查询结果。有关更多信息,请参阅使用对称和非对称密钥

限制

  • 要执行下列步骤,您必须具有以下权限:kms:CreateKeykms:GetKeyPolicykms:PutKeyPolicy

  • 将密钥与日志组关联或取消关联后,最多可能需要五分钟时间,此操作才能生效。

  • 如果您撤消 CloudWatch 日志对关联密钥的访问权限或删除关联的 KMS 密钥,则无法再检索 CloudWatch 日志中的加密数据。

  • 您不能使用 CloudWatch 控制台关联密钥,必须使用 Amazon CLI 或日 CloudWatch 志 API。

步骤 1:创建一个 Amazon KMS key

要创建 KMS,请使用以下 create-key 命令:

aws kms create-key

输出包含密钥的密钥 ID 和 Amazon 资源名称(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 日志服务主体使用密钥的权限。该服务主体必须位于存储密钥的同一 Amazon 区域。

作为最佳实践,我们建议您将密钥的使用限制在您指定的 Amazon 账户中。

首先,policy.json使用以下get-key-policy命令保存 KMS 密钥的默认策略:

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

在文本编辑器中打开 policy.json 文件,然后从以下语句之一中添加粗体的部分。使用逗号将现有语句与新语句分隔。这些语句使用Condition章节来增强 Amazon KMS 密钥的安全性。有关更多信息,请参阅 Amazon KMS 密钥和加密上下文

此示例中的Condition部分将 Amazon 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:*"