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

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

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

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

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

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

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

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

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

要下载源代码,请参阅 GitHub 上的 Secrets Manager Rust-based caching client component

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

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 ```