缓存从 Secrets Manager 检索到的机密

Caching secrets retrieved from Secrets Manager

我想使用 AWS Secrets Manager 在 Web 应用程序中存储 RDS 的机密。 AWS 提供 AWSSDK.SecretsManager.Caching 库来提高性能并降低成本。我正在考虑这件事。在完美的世界里,秘密只有在我需要的时候才会存在于记忆中。另一方面,有了缓存,它们就永远存在。缓存 (AWSSDK.SecretsManager.Caching) 中的数据是否加密?缓存实际上会降低安全性吗?是否手动实施 System.Security.SecureString 更好的解决方案?感谢您的任何反馈。

您可以向缓存添加自定义扩展,此扩展可以 encrypt/decrypt 内存中的数据。为此,您必须实现 ISecretCacheHook 接口:

public class SecretCacheHook : ISecretCacheHook
{
  private readonly IEncryptionProvider _encryptionProvider;

  public SecretCacheHook(IEncryptionProvider encryptionProvider)
  {
    _encryptionProvider = encryptionProvider;
  }

  public object Get(object obj)
  {
    return _encryptionProvider.Decrypt(obj);
  }

  public object Put(object obj)
  {
    return _encryptionProvider.Encrypt(obj);
  }
}

并将对象传递给缓存配置:

var secretsManagerCache = new SecretsManagerCache(
  new AmazonSecretsManagerClient(RegionEndpoint.GetBySystemName(region)),
  new SecretCacheConfiguration
  {
    CacheHook = new SecretCacheHook(new EncryptionProvider())
  });

您可以阅读有关 AWS 的更多信息 blog