Encryptlogdata 在 CloudWatch Logs using Amazon Key Management Service - Amazon CloudWatch Logs
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

Encryptlogdata 在 CloudWatch Logs using Amazon Key Management Service

日志组数据始终在 CloudWatch Logs 中加密。您可以选择使用Amazon Key Management Service进行此加密进行存储。如果这样做,则使用Amazon KMS客户主密钥 (CMK)。在创建日志组时或者在日志组已存在的情况下,通过将 CMK 与日志组相关联,在日志组级别启用使用 Amazon KMS 加密。

重要

CloudWatch Logs 现在支持加密上下文,使用kms:EncryptionContext:aws:logs:arn作为密钥,并将日志组的 ARN 作为该密钥的值。如果您的日志组已使用 CMK 加密,并且您希望将 CMK 限制在单个账户和日志组中使用,则应分配一个新的 CMK,该 CMK 在 IAM 策略中包含一个条件。有关更多信息,请参阅Amazon KMS keys 和encryptioncontext

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

解除 CMK 与日志组的关联后,CloudWatch Logs 使用 CloudWatch Logs 默认加密方法加密新接收的数据。所有以前使用 CMK 加密的数据都会使用 CMK 进行加密。

重要

CloudWatch Logs 只支持对称 CMK。请勿使用非对称 CMK 对日志组中的数据进行加密。有关更多信息,请参阅使用对称和非对称密钥

Limits

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

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

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

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

第 1 步:创建Amazon KMSCMK

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

aws kms create-key

输出包含 CMK 的密钥 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 步:Setpermissions 在 CMK

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

作为最佳做法,我们建议您将密钥的使用限制为仅限于您指定的 Amazon 账户或日志组。

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

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

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

本示例中的 Condition 部分将密钥限制为单个日志组 ARN。

{ "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::Your_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": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:region:account-id:log-group:log-group-name" } } } ] }

这些区域有:Condition部分限制了Amazon KMS键添加到指定帐户,但它可用于任何日志组。

{ "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::Your_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": { "ArnLike": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:region:account-id:*" } } } ] }

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

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

第 3 步:关联 aloggroup 与 CMK

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

使用以下 describe-log-groups 命令,可以确定日志组是否已经关联了 CMK:

aws logs describe-log-groups --log-group-name-prefix "log-group-name-prefix"

如果输出包含 kmsKeyId 字段,则日志组将与该字段值所对应的键相关联。

在创建日志组时将 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 步:取消关联loggroup 从一个 CMK

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

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

Amazon KMS keys 和encryptioncontext

为了增强您的Amazon Key Management Service密钥和加密日志组的加密日志组,CloudWatch Logs 现在将日志组 ARN 作为加密上下文用于加密日志数据。加密上下文是一组用作附加的经身份验证的数据的键值对。使用加密上下文,您可以使用 IAM 策略条件限制对您的Amazon KMS键由Amazon帐户和日志组。有关更多信息,请参阅 。加密上下文IAM JSON 策略元素:Condition

我们建议您为每个加密的日志组使用不同的 CMK 密钥。

如果您有以前加密的日志组,现在希望将日志组更改为使用仅适用于该日志组的新 CMK,请按照下列步骤操作。

将加密的日志组转换为使用某个 CMK,而某个策略将此 CMK 限制到该日志组

  1. 输入以下命令以查找该日志组的当前 CMK 的 ARN:

    aws logs describe-log-groups

    输出包括以下行。记录 ARN。您需要在步骤 7 中使用它。

    ... "kmsKeyId": "arn:aws:kms:us-west-2:123456789012:key/01234567-89ab-cdef-0123-456789abcdef" ...
  2. 输入以下命令以创建新的 CMK:

    aws kms create-key
  3. 输入以下命令以将新密钥的策略保存到 policy.json 文件中:

    aws kms get-key-policy --key-id new-key-id --policy-name default --output text > ./policy.json
  4. 使用文本编辑器打开 policy.json 并向策略添加 Condition 表达式:

    { "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": { "ArnLike": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:REGION:ACCOUNT-ID:log- group:LOG-GROUP-NAME" } } } ] }
  5. 输入以下命令以将更新的策略添加到新的 CMK:

    aws kms put-key-policy --key-id new-key-ARN --policy-name default --policy file://policy.json
  6. 输入以下命令以将策略与日志组关联:

    aws logs associate-kms-key --log-group-name my-log-group --kms-key-id new-key-ARN

    CloudWatch Logs 现在使用新的 CMK 加密所有新数据。

  7. 接下来,从旧 CMK 撤销除 Decrypt 之外的所有其他权限。首先,输入以下命令以检索旧策略:

    aws kms get-key-policy --key-id old-key-ARN --policy-name default --output text > ./policy.json
  8. 使用文本编辑器打开 policy.json 并从 Action 列表中删除所有值,但 kms:Decrypt* 除外

    { "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::REGION:root" }, "Action": "kms:*", "Resource": "*" }, { "Effect": "Allow", "Principal": { "Service": "logs.region.amazonaws.com" }, "Action": [ "kms:Decrypt*" ], "Resource": "*" } ] }
  9. 输入以下命令以将更新的策略添加到旧的 CMK:

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