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

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

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

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

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

重要

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

限制

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

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

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

  • 不能使用 CloudWatch 控制台关联密钥,必须使用 Amazon CLI 或 CloudWatch Logs 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 Logs 服务主体权限以使用该密钥。此服务委托人必须位于存储密钥的相同 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部分限制了对指定账户 L CloudWatch ogs Insights 查询结果的 Amazon KMS 密钥使用。

{ "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:*"