Amazon CloudWatch Logs
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

使用 AWS KMS 对 CloudWatch Logs 中的日志数据加密

可以使用 AWS Key Management Service (AWS KMS) 客户主键 (CMK) 对 CloudWatch Logs 中的日志数据加密。在创建日志组时或者在日志组已存在的情况下,通过将 CMK 与日志组相关联,在日志组级别启用加密。

将 CMK 与日志组关联后,该日志组所有新接收的数据都将使用 CMK 加密。此数据在其保留期内始终以加密格式存储。CloudWatch Logs 可随时根据请求解密该数据。无论何时请求加密数据,CloudWatch Logs 都必须拥有对 CMK 的权限。

解除 CMK 与日志组的关联后,CloudWatch Logs 将停止对日志组新接收的数据加密。所有先前接收的数据仍保持加密状态。

限制

  • 要将 CMK 与日志组关联并执行以下步骤,您必须拥有以下权限:kms:CreateKeykms:GetKeyPolicykms:PutKeyPolicy

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

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

  • 不能使用 CloudWatch 控制台将 CMK 与日志组关联。

步骤 1:创建 AWS KMS CMK

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

aws kms create-key

输出包含 CMK 的密钥 ID 和 Amazon 资源名称 (ARN)。下面是示例输出:

{ "KeyMetadata": { "KeyId": "6f815f63-e628-448c-8251-e40cb0d29f59", "Description": "", "Enabled": true, "KeyUsage": "ENCRYPT_DECRYPT", "KeyState": "Enabled", "CreationDate": 1478910250.94, "Arn": "arn:aws:kms:us-west-2:123456789012:key/6f815f63-e628-448c-8251-e40cb0d29f59", "AWSAccountId": "123456789012" } }

步骤 2:设置 CMK 的权限

默认情况下,所有 AWS KMS CMK 均为私有;只有资源所有者可以使用它加密和解密数据。但是,资源所有者可以将 CMK 的访问权限授予其他用户和资源。在此步中,您将授予 CloudWatch 服务委托人权限以使用该 CMK。此服务委托人必须位于存储 CMK 的相同区域内。

首先,使用以下 policy.jsonget-key-policy 命令将您的 CMK 默认策略保存为

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

在文本编辑器中打开 policy.json 文件并添加粗体语句,将 region 替换为将用于您的日志组的区域,并使用逗号将现有语句与新语句分隔开。

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

最后,使用以下 put-key-policy 命令添加更新后的策略:

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

步骤 3:将日志组与 CMK 关联

可以在创建日志组时或之后将 CMK 与它关联。

在创建日志组时将 CMK 与它关联

按如下方式使用 create-log-group 命令:

aws logs create-log-group --log-group-name my-log-group --kms-key-id "key-arn"

将 CMK 与现有日志组关联

按如下方式使用 associate-kms-key 命令:

aws logs associate-kms-key --log-group-name my-log-group --kms-key-id "key-arn"

步骤 4:解除日志组与 CMK 的关联

要解除 CMK 与日志组的关联,请使用以下 disassociate-kms-key 命令:

aws logs disassociate-kms-key --log-group-name my-log-group