使用 Rust 和客户端缓存获取 Secrets Manager 密钥值 - Amazon Secrets Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用 Rust 和客户端缓存获取 Secrets Manager 密钥值

在检索密钥时,您可以使用 Secrets Manager 基于 Rust 的缓存组件来缓存密钥,以备将来使用。检索已缓存密钥比从 Secrets Manager 中检索密钥的速度要快。由于调用 Secrets Manager 需要付费 APIs,因此使用缓存可以降低成本。有关检索密钥的所有方法,请参阅 获取密钥

缓存策略是先进先出(FIFO),因此当缓存必须丢弃一个密钥时,它会丢弃最旧的密钥。原定设置下,缓存会每小时刷新一次秘密。您可以配置以下内容:

  • max_size – 在驱逐最近未访问的密钥之前要维护的最大缓存密钥数。

  • ttl – 在需要刷新密钥状态之前缓存的项目被视为有效的持续时间。

缓存实施不包括缓存失效。缓存实现侧重于缓存本身,而不是侧重加强安全性或以安全性为重点。如果需要额外安全性(例如加密缓存中的项目),请使用提供的特性来修改缓存。

要使用该组件,您必须拥有一个带有 tokio 的 Rust 2021 开发环境。有关更多信息,请参阅 Rust 编程语言网站上的入门

要下载源代码,请参阅上的 S ecrets Manager 基于 Rust 的缓存客户端组件。 GitHub

要安装缓存组件,请使用以下命令。

cargo add aws_secretsmanager_caching

所需权限:

  • secretsmanager:DescribeSecret

  • secretsmanager:GetSecretValue

有关更多信息,请参阅 权限参考

例 检索密钥

以下示例说明如何获取名为的密钥的机密值MyTest

use aws_secretsmanager_caching::SecretsManagerCachingClient; use std::num::NonZeroUsize; use std::time::Duration; let client = match SecretsManagerCachingClient::default( NonZeroUsize::new(10).unwrap(), Duration::from_secs(60), ) .await { Ok(c) => c, Err(_) => panic!("Handle this error"), }; let secret_string = match client.get_secret_value("MyTest", None, None).await { Ok(s) => s.secret_string.unwrap(), Err(_) => panic!("Handle this error"), }; // Your code here
例 使用自定义配置和自定义客户端实例化缓存

以下示例说明如何配置缓存,然后获取名为的密钥的密钥值MyTest

let config = aws_config::load_defaults(BehaviorVersion::latest()) .await .into_builder() .region(Region::from_static("us-west-2")) .build(); let asm_builder = aws_sdk_secretsmanager::config::Builder::from(&config); let client = match SecretsManagerCachingClient::from_builder( asm_builder, NonZeroUsize::new(10).unwrap(), Duration::from_secs(60), ) .await { Ok(c) => c, Err(_) => panic!("Handle this error"), }; let secret_string = client .get_secret_value("MyTest", None, None) .await { Ok(c) => c.secret_string.unwrap(), Err(_) => panic!("Handle this error"), }; // Your code here ```