本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 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 ```