使用 Amazon Key Management Service 加密查询结果 - Amazon CloudWatch Logs
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 Logs 将对以后的查询再次使用默认加密方法。但是,在关联密钥时运行的查询仍使用该密钥加密。取消关联 KMS 密钥后,CloudWatch Logs 仍然可以返回这些结果,这是因为 CloudWatch Logs 仍然可以继续引用该密钥。但如果该密钥之后被禁用,则 CloudWatch Logs 无法读取使用该密钥加密的查询结果。

重要

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

Limits

  • 要执行下列步骤,您必须具有以下权限: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.jsonget-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 部分限制了对指定账户 CloudWatch Logs 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:*"