加密上下文 - Amazon Key Management Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

加密上下文

注意

您不能在使用非对称 KMS 密钥HMAC KMS 密钥的加密操作中指定加密上下文。非对称算法和 MAC 算法不支持加密上下文。

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

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

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

例如,当加密使用 Amazon E lastic Block Store (Amazon EBS) CreateSnapshot操作创建的卷和快照时,Amazon EBS 使用卷 ID 作为加密上下文值。

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

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

要了解如何使用加密上下文保护加密数据完整性,请参阅 Amazon 安全博客中的如何使用保护您的加密数据完整 Amazon Key Management Service 性 EncryptionContext

加密上下文规则

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

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

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

策略中的加密上下文

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

kmsEncryptionContext: 和 k ms: EncryptionContextKeys 条件键仅在请求包括特定加密上下文密钥或键值对时允许(或拒绝)权限。

例如,以下密钥策略语句允许 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" } } }

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

授权中的加密上下文

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

例如,您可以将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

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

记录加密上下文

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

重要

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

存储加密上下文

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

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