如何使用 AWS Secrets Manager 中通过密钥轮换创建的新密钥

Apu*_*ngh 5 amazon-web-services aws-secrets-manager

我有一个使用 MongoDB 的 Java 应用程序(或者它可以是任何类似的服务)。启动时,应用程序会创建与数据库的单例连接。为了进行连接,我从 AWS Secrets Manager 获取 MongoDB...因此应用程序在与 MongoDB 通信后可以愉快地运行。

我的问题是:AWS Secrets Manager 轮换密钥时会发生什么?

  • 我的应用程序如何“知道”秘密已被轮换。
  • 我是否必须同步 Secrets Manager 和我的应用程序之间的时间?

例如,轮换设置为 7 天。所以我在我的应用程序中编写代码,每 7 天刷新一次……这不好,因为很难精确计时。

另一种方法可能是,如果我的应用程序面临身份验证异常,只需刷新密码并建立新连接并重试应用程序逻辑。

行业标准是什么?

com*_*der 5

我的应用程序如何“知道”秘密已被轮换?

-AWS Secrets Manager 在轮换成功时发布 CloudTrail 事件“RotationSucceeded”,在轮换失败时发布 cloudtrail 事件“RotationFailed”。您可以在此 cloudtrail 事件上设置 cloudwatch 规则 - https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/Create-CloudWatch-Events-CloudTrail-Rule.html

并将 SNS 或 Lambda 设置作为规则的目标,并在轮换成功后执行您想要的任何逻辑


Joe*_*oeB 4

这通常使用两种策略之一来处理,或者用Secrets Manager 来说,通过使用单用户轮换或多用户轮换来处理。Secrets Manager 为MongoDB 的单用户多用户轮换提供 lambda 实现。

在单用户轮换中,存在一对数据库用户/密码。在轮换期间,可以使用原始用户/密码或通过获取主用户信用并使用这些信用来更新密码来更新密码。在这种情况下,使用旧信用建立的任何连接在轮换后都会失败。为了处理这个问题,应用程序将使用连接管理器来检测身份验证错误(或必要时检测到所有错误)并在重试之前刷新密钥。这是Secrets Manager 提供的 JDBC 包装器使用的策略。

另一种选择(多用户轮换)是从原始密码中读取用户名,然后在第一次轮换时,使用主用户密码创建该用户的克隆,并使用新密码。之后,轮换包括在原始和克隆之间交替秘密用户/密码对并更新密码。在这种情况下,应用程序只需在轮换间隔内刷新秘密一次。如果它使用旧的用户/密码对,它将在两个轮换间隔内保持有效。

如果您在 AWS 上使用 MongoDB(与具有 Mongo 兼容性的 DocumentDB 不同),最简单的方法是启动临时 DocumentDB 并使用 Secrets Manager 控制台在其上设置轮换。然后,在拆除 DocumentDB 实例之前,复制 Mongo 应用程序使用的 Lambda、角色和策略以及机密。如果您已经在使用 DocumentDB,那么如上所述,只需使用 SecretsManager 控制台进行设置。