检索 .NET 应用程序中的 Amazon Secrets Manager 密钥 - Amazon Secrets Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

检索 .NET 应用程序中的 Amazon Secrets Manager 密钥

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

缓存策略为“最近最少使用 (LRU)”,因此当缓存必须丢弃某个密钥时,它会丢弃最近使用最少的密钥。原定设置下,缓存会每小时刷新一次秘密。您可以配置在缓存中刷新密钥的频率,也可以挂钩到密钥检索中以添加更多功能。

一旦释放缓存引用,缓存便不会进行强制垃圾回收。缓存实施不包括缓存失效。缓存实现侧重于缓存本身,而不是侧重加强安全性或以安全性为重点。如果您需要额外的安全性(例如加密缓存中的项目),请使用提供的接口和抽象方法。

要使用该组件,您必须满足以下条件:

  • .NET Framework 4.6.2 或更高版本,或者 .NET Standard 2.0 或更高版本。请参阅 Microsoft .NET 网站上的下载 .NET

  • Amazon SDK for .NET。请参阅Amazon 软件开发工具包

要下载源代码,请参阅 GitHub 上的适用于 .NET 的缓存客户端

要使用缓存,请先对其进行实例化,然后使用 GetSecretStringGetSecretBinary 检索密钥。在连续检索时,缓存将返回密钥的已缓存副本。

获取缓存包
  • 请执行下列操作之一:

    • 在您的项目目录中运行下列 .NET CLI 命令。

      dotnet add package AWSSDK.SecretsManager.Caching --version 1.0.6
    • 将下列软件包引用添加到您的 .csproj 文件中。

      <ItemGroup> <PackageReference Include="AWSSDK.SecretsManager.Caching" Version="1.0.6" /> </ItemGroup>

所需权限:

  • secretsmanager:DescribeSecret

  • secretsmanager:GetSecretValue

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

例 检索密钥

下面的代码示例演示了检索名为 MySecret 的密钥的方法。

using Amazon.SecretsManager.Extensions.Caching; namespace LambdaExample { public class CachingExample { private const string MySecretName ="MySecret"; private SecretsManagerCache cache = new SecretsManagerCache(); public async Task<Response> FunctionHandlerAsync(string input, ILambdaContext context) { string MySecret = await cache.GetSecretString(MySecretName); // Use the secret, return success } } }
例 配置生存时间 (TTL) 缓存刷新持续时间

下列代码示例演示了检索名为 MySecret 的密钥并将 TTL 缓存刷新持续时间设置为 24 小时的方法。

using Amazon.SecretsManager.Extensions.Caching; namespace LambdaExample { public class CachingExample { private const string MySecretName = "MySecret"; private static SecretCacheConfiguration cacheConfiguration = new SecretCacheConfiguration { CacheItemTTL = 86400000 }; private SecretsManagerCache cache = new SecretsManagerCache(cacheConfiguration); public async Task<Response> FunctionHandlerAsync(string input, ILambdaContext context) { string mySecret = await cache.GetSecretString(MySecretName); // Use the secret, return success } } }