

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

# 设置缓存安全阈值
<a name="thresholds"></a>

在实施数据密钥缓存时，您需要配置[缓存 CMM](data-caching-details.md#caching-cmm) 强制执行的安全阈值。

安全阈值有助于限制每个缓存的数据密钥的使用时间长度，以及每个数据密钥保护的数据量。只有在缓存条目符合所有安全阈值时，缓存 CMM 才会返回缓存的数据密钥。如果缓存条目超过任何阈值，则不会在当前操作中使用该条目，并会尽快将其从缓存中逐出。每个数据密钥的第一次使用（在缓存之前）都不计入这些阈值内。

一般来说，请使用满足您的成本和性能目标所需的最低缓存量。

 AWS Encryption SDK 仅缓存使用密钥[派生函数加密的数据密钥](https://en.wikipedia.org/wiki/Key_derivation_function)。此外，它还为某些阈值设置了上限。这些限制确保数据密钥的重用次数不会超过其加密限制。不过，由于缓存的是明文数据密钥（默认在内存中），请尽量缩短保存这些密钥的时间。此外，还要尽量限制在密钥泄露时可能会泄露的数据。

有关设置缓存安全阈值的示例，请参[AWS Encryption SDK阅 “ AWS 安全博客” 中的 “如何确定数据密钥缓存是否适合您的应用程序](https://aws.amazon.com/blogs/security/aws-encryption-sdk-how-to-decide-if-data-key-caching-is-right-for-your-application/)”。

**注意**  
缓存 CMM 实施所有以下阈值。如果未指定可选的值，则缓存 CMM 使用默认值。  
要临时禁用数据密钥缓存， AWS Encryption SDK 的 Java 和 Python 实现提供一个*空加密材料缓存*（空缓存）。空缓存为每个 `GET` 请求返回未命中，并且不响应 `PUT` 请求。建议您使用空缓存，而不是将[缓存容量](data-caching-details.md#simplecache)或安全阈值设置为 0。有关更多信息，请参阅 [Java](https://aws.github.io/aws-encryption-sdk-java/com/amazonaws/encryptionsdk/caching/NullCryptoMaterialsCache.html) 和 [Python](https://aws-encryption-sdk-python.readthedocs.io/en/latest/generated/aws_encryption_sdk.caches.null.html) 中的空缓存。

**最长使用期限（必需）**  
确定缓存的条目的使用时长，从添加该条目时算起。该值为必填项。请输入一个大于 0 的值。 AWS Encryption SDK 不限制最大年龄值。  
的所有语言实现都 AWS Encryption SDK 定义了以秒为单位的最大年龄，但使用毫秒的 AWS Encryption SDK for JavaScript除外。  
请尽可能使用最短的时间间隔，但前提是您的应用程序仍能从缓存中受益。您可以像密钥轮换策略一样使用最长使用期限阈值。可以使用该值限制数据密钥重用次数，最大限度减少加密材料泄露，以及逐出在缓存期间策略可能已发生变化的数据密钥。

**加密的最大消息数（可选）**  
指定缓存的数据密钥可以加密的最大消息数。该值为可选项。请输入 1 到 2^32 之间的值。默认值为 2^32 个消息。  
将每个缓存的密钥保护的消息数设置得足够大可以从重用中受益，但设置得足够小则可以限制在密钥泄露时可能会泄露的消息数。

**加密的最大字节数（可选）**  
指定缓存的数据密钥可以加密的最大字节数。该值为可选项。请输入 0 到 2^63 - 1 之间的值。默认值为 2^63 - 1。在使用值 0 时，您只能在加密空消息字符串时使用数据密钥缓存。  
在评估该阈值时，将包括当前请求中的字节数。如果已处理的字节数加上当前的字节数超过该阈值，即便是可能用于较小的请求，缓存的数据密钥也会从缓存中被逐出。