使用  AWS Key Management Service 加密查询结果 - Amazon CloudWatch 日志

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

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

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

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

重要

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

限制

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

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

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

  • 不能使用 CloudWatch 控制台关联密钥,必须使用 AWS CLI 或 CloudWatch Logs API。

第 1 步:创建一个 AWS 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 服务主体权限以使用该密钥。此服务委托人必须位于存储密钥的相同 AWS 区域内。

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

首先,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部分来增强 AWS KMS 密钥的安全性。有关更多信息,请参阅 AWS KMS 密钥和加密上下文

此示例中的Condition部分限制了对指定账户 L CloudWatch ogs Insights 查询结果的 AWS 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:*"