加密上下文 - AWS Key Management Service

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

加密上下文

所有 AWS KMS 使用对称加密KMS密钥的加密操作都接受加密上下文,这是一组可选的非秘密密钥值对,可以包含有关数据的其他上下文信息。您可以在中的Encrypt操作中插入加密上下文 AWS KMS ,以增强 AWS KMS API解密调用的授权和可审计性。 AWS KMS 使用加密上下文作为其他经过身份验证的数据 (AAD) 来支持经过身份验证的加密。加密上下文以加密方式绑定到加密文字,以便需要使用相同的加密上下文解密数据。

加密上下文不是密钥,且没有加密。它以明文显示在 AWS CloudTrail 日志中,以便您可以使用它来标识和分类加密操作。您的加密上下文不应包含敏感信息。我们建议您的加密上下文描述正在加密或解密的数据。例如,在加密文件时,您可以将文件路径的一部分用作加密上下文。

"encryptionContext": { "department": "10103.0" }

例如,在加密使用亚马逊弹性区块存储 (AmazonEBS) CreateSnapshot操作创建的卷和快照时,亚马逊EBS使用卷 ID 作为加密上下文值。

"encryptionContext": { "aws:ebs:id": "vol-abcde12345abc1234" }

您还可以使用加密上下文来优化或限制对您账户 AWS KMS keys 的访问权限。您可以使用加密上下文作为授权中的约束,以及作为策略语句中的条件

要了解如何使用加密上下文来保护加密数据的完整性,请参阅 AWS 安全博客 EncryptionContext上的 “如何通过使用 AWS Key Management Service 来保护加密数据的完整性” 一文。

有关加密上下文的更多信息。

加密上下文规则

AWS KMS 对加密上下文密钥和值强制执行以下规则。

  • 加密上下文对中的键和值必须是简单的文本字符串。如果您使用其他类型(例如整数或浮点),则 AWS KMS 会将它解释为字符串。

  • 加密上下文中的密钥和值可以包括 Unicode 字符。如果加密上下文包含密钥策略或IAM策略中不允许的字符,则您将无法在策略条件密钥(例如kms:EncryptionContext:context-key和)中指定加密上下文kms:EncryptionContextKeys。有关密钥策略文档规则的详细信息,请参阅 密钥策略格式。有关IAM策略文档规则的详细信息,请参阅《IAM用户指南》中的IAM名称要求

策略中的加密上下文

加密上下文主要用于验证完整性和真实性。但是,您也可以使用加密上下文来控制对密钥策略和IAM策略 AWS KMS keys 中对称加密的访问权限。

仅当请求包含特定的加密上下文密或密钥值对时,k ms:: 和 kms: EncryptionContextKeys 条件密钥才允许(或拒绝)权限。EncryptionContext

例如,以下密钥策略声明允许RoleForExampleApp角色在Decrypt操作中使用该KMS密钥。它使用 kms:EncryptionContext:context-key 条件键以仅在请求中的加密上下文包含 AppName:ExampleApp 加密上下文对时允许此权限。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:AppName": "ExampleApp" } } }

有关这些加密上下文条件键的更多信息,请参阅 的条件密钥 AWS KMS

授权中的加密上下文

创建授权时,可以包括为授予权限设定条件的授予约束。 AWS KMS 支持两个授予限制EncryptionContextSubsetEncryptionContextEquals和,这两个限制都涉及加密操作请求中的加密上下文。在使用这些授权约束时,授权中的权限仅在加密操作请求中的加密上下文满足授权约束的要求时有效。

例如,您可以向EncryptionContextEquals授权添加允许该GenerateDataKey操作的授予约束。使用此约束时,授权仅在请求中的加密上下文与授权约束中的加密上下文大小写完全匹配时,允许操作。

$ aws kms create-grant \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --grantee-principal arn:aws:iam::111122223333:user/exampleUser \ --retiring-principal arn:aws:iam::111122223333:role/adminRole \ --operations GenerateDataKey \ --constraints EncryptionContextEquals={Purpose=Test}

来自被授予者委托人的以下请求将满足 EncryptionContextEquals 约束。

$ aws kms generate-data-key \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --key-spec AES_256 \ --encryption-context Purpose=Test

有关授权约束的详细信息,请参阅 使用授权约束。有关授权的详细信息,请参阅 补助金 AWS KMS

记录加密上下文

AWS KMS 用于 AWS CloudTrail 记录加密上下文,以便您可以确定哪些KMS密钥和数据已被访问。日志条目准确显示了使用哪些KMS密钥来加密或解密日志条目中加密上下文引用的特定数据。

重要

由于加密上下文会被记录,它不得包含敏感信息。

存储加密上下文

为了简化在调用 DecryptReEncrypt 操作时任何加密上下文的使用,可以将加密上下文与加密数据存储在一起。我们建议您仅存储足够的加密上下文,以帮助您在需要用于加密或解密时创建完整的加密上下文。

例如,如果加密上下文是文件的完全限定路径,仅将该路径部分与加密文件内容存储在一起。然后,当您需要完整的加密上下文时,可以从存储的片段重建它。如果有人擅自改动文件,例如重命名或将其移动到其他位置,加密上下文值更改,解密请求将失败。