本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用加密 CloudWatch 日志中的查找表 AWS Key Management Service
Logs 中始终对查找表数据进行 CloudWatch 加密。默认情况下, CloudWatch Logs 使用具有 256 位高级加密标准 Galois/Counter 模式 (AES-GCM) 的服务器端加密来加密查询表的静态数据。此外,您也可以使用 AWS Key Management Service 进行这一加密。如果这样做,则使用密 AWS KMS 钥进行加密。在查找表级别启用加密,方法 AWS KMS 是在创建查找表时或更新查找表时将 KMS 密钥与查找表关联。
重要
CloudWatch 日志仅支持对称 KMS 密钥。请勿使用非对称密钥来加密查找表中的数据。有关更多信息,请参阅使用对称和非对称密钥。
将 KMS 密钥与查找表关联后,存储在查找表中的所有数据都将使用此密钥进行加密。 CloudWatch 每当有人请求这些数据时,日志都会对其进行解密。 CloudWatch 每当请求加密数据时,日志都必须具有 KMS 密钥的权限。
如果您稍后解除 KMS 密钥与查找表的关联,Logs 将使用 CloudWatch CloudWatch 日志默认加密方法对数据进行加密。但是,如果在解除关联之前密钥被禁用或删除,则 CloudWatch Logs 将无法读取使用该密钥加密的数据。
有关 L CloudWatch ogs AWS KMS 如何使用加密日志数据的一般信息,请参阅使用加密日志中的 CloudWatch 日志数据 AWS Key Management Service。
CloudWatch 日志如何 AWS KMS 用于查找表
CloudWatch 日志使用 AWS KMS 信封加密来保护查找表数据。当您将 KMS 密钥与查找表关联时,L CloudWatch ogs 会向发送GenerateDataKey请求 AWS KMS。 AWS KMS 生成唯一的数据加密密钥 (DEK) 并返回 DEK 的纯文本副本和加密副本。 CloudWatch 日志使用纯文本 DEK 对查找表数据进行加密,然后将加密的 DEK 与加密数据一起存储。纯文本 DEK 不存储,使用后会从内存中丢弃。
当 CloudWatch Logs 需要读取查找表数据时,它会 AWS KMS 使用加密的 DEK 向发送Decrypt请求。 AWS KMS 解密 DEK 并将纯文本 DEK 返回到 Logs,然后 CloudWatch 日志使用它来解密查找表数据。
CloudWatch 在向日志发出请求时,日志使用以下加密上下文 AWS KMS:
{
"aws:logs:arn": "arn:aws:logs:region:account-id:lookup-table:lookup-table-name"
}
您可以在 IAM 策略和密 AWS KMS 钥策略中使用此加密上下文来控制对 KMS 密钥的访问。有关更多信息,请参阅 AWS KMS 密钥和加密上下文。
所需的权限
要对查找表使用 AWS KMS 加密,IAM 委托人必须对 KMS 密钥 AWS KMS 具有以下权限:
kms:Decryptkms:GenerateDataKey
调用GetLookupTable使用 KMS 密钥加密的查找表时需要该kms:Decrypt权限,这样 L CloudWatch ogs 才能代表您解密数据。当使用对加密的查找表使用lookup命令的查询进行调StartQuery用时,还需要对密钥(用于加密查找表的 KMS 密钥)拥有kms:Decrypt权限。调UpdateLookupTable用CreateLookupTable或使用 KMS 密钥时需要该kms:GenerateDataKey权限,这样 L CloudWatch ogs 才能生成数据加密密钥来加密查找表数据。
此外, CloudWatch 日志服务必须有权使用 KMS 密钥。您可以通过向 KMS 密钥策略添加策略声明来授予这些权限,如下一节所述。
步骤 1:创建 AWS KMS 密钥
要创建对称 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"
]
}
}
记录密钥 ARN。你需要在以下步骤中使用它。
步骤 2:设置 KMS 密钥的权限
默认情况下,所有 AWS KMS 密钥都是私有的。只有资源所有者可以使用它来加密和解密数据。您必须向 CloudWatch 日志服务主体授予使用密钥的权限,还必须向调用角色授予使用密钥的权限。
首先,policy.json使用以下get-key-policy命令保存 KMS 密钥的默认策略:
aws kms get-key-policy --key-idkey-id--policy-name default --output text > ./policy.json
在文本编辑器中打开policy.json文件并添加以下语句以授予 CloudWatch 日志服务主体使用密钥的权限。此示例使用与加密上下文匹配的Condition部分将密钥限制在特定的查找表中。
{ "Effect": "Allow", "Principal": { "Service": "logs.region.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:region:account-id:lookup-table:lookup-table-name", "aws:SourceAccount": "account-id", "aws:SourceArn": "arn:aws:logs:region:account-id:lookup-table:lookup-table-name" } } }
接下来,为将调用 CloudWatch 日志的角色添加权限CreateLookupTable或UpdateLookupTable APIs。 CloudWatch 记录kms:ViaService用户 AWS KMS 代表客户拨打电话。有关更多信息,请参阅 kms: ViaService。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account-id:role/role-name" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": [ "logs.region.amazonaws.com" ] } } }
最后,使用以下put-key-policy命令添加更新的策略:
aws kms put-key-policy --key-idkey-id--policy-name default --policy file://policy.json
步骤 3:将 KMS 密钥与查找表关联
在使用 CreateLookupTable API 创建 KMS 密钥时,您可以将其与查找表关联,也可以使用 UpdateLookupTable API 更新现有的查找表。两者 APIs 都是 AWSLogsConfigService.
在创建 KMS 密钥时将其与查找表关联
使用 CreateLookupTable API 并使用您的 KMS 密钥的 ARN 指定kmsKeyArn参数:
aws logs create-lookup-table \ --lookup-table-namemy-lookup-table\ --kms-key-arn "arn:aws:kms:region:account-id:key/key-id"
将 KMS 密钥与现有查找表关联
使用 UpdateLookupTable API 并使用您的 KMS 密钥的 ARN 指定kmsKeyArn参数:
aws logs update-lookup-table \ --lookup-table-namemy-lookup-table\ --kms-key-arn "arn:aws:kms:region:account-id:key/key-id"
注意事项
-
将 KMS 密钥与查找表关联或取消关联后,该操作最多可能需要五分钟才能生效。
-
如果您撤消 CloudWatch 日志对关联密钥的访问权限或删除关联的 KMS 密钥,则无法再检索 CloudWatch 日志中的加密查找表数据。
-
要执行本主题中的步骤,您必须具有以下权限:
kms:CreateKey、kms:GetKeyPolicykms:PutKeyPolicy、以及相应的 CloudWatch Logs 权限才能调用CreateLookupTable或UpdateLookupTable。