簡體   English   中英

如何使用 AWS Secrets Manager 中的密鑰輪換創建的新密鑰

[英]How to use new secret created by key rotation from AWS Secrets Manager

我有一個使用 MongoDB 的 Java 應用程序(或者它可以是任何類似的服務)。 啟動時,應用程序會創建一個到數據庫的 singleton 連接。 為了連接,我從 AWS Secrets Manager 獲得了 MongoDB……因此,在與 MongoDB 通信后,應用程序運行得非常愉快。

我的問題是:當 AWS Secrets Manager 輪換密鑰時會發生什么?

  • 我的應用程序如何“知道”該秘密已被輪換。
  • 我是否必須在 Secrets Manager 和我的應用程序之間同步時間?

例如,輪換設置為 7 天。 所以我在我的應用程序中編寫代碼以每 7 天刷新一次……不好,因為很難精確計時。

另一種方法可能是,如果我的應用程序面臨身份驗證異常,只需刷新密碼並建立新連接並重試應用程序邏輯。

行業標准是什么?

我的應用程序如何“知道”秘密已被輪換?

-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 設置為規則的目標,並在旋轉成功后執行您想要的任何邏輯

這通常使用兩種策略之一來處理,或者在Secrets Manager中,通過使用單用戶輪換或多用戶輪換來處理。 Secrets Manager 為 MongoDB 的用戶和多用戶輪換提供 lambda 實現。

在單用戶輪換中,有一個 DB 用戶/密碼對。 在輪換期間,使用原始用戶/密碼或通過獲取主用戶憑據並使用這些憑據來更新密碼來更新密碼。 在這種情況下,使用舊憑據建立的任何連接在輪換后都會失敗。 為了解決這個問題,應用程序將使用檢測到身份驗證錯誤(或所有錯誤,如果需要)的連接管理器,並在重試之前刷新密鑰。 這是Secrets Manager 使用的策略,提供 JDBC 包裝器

另一種選擇(多用戶輪換)是從原始密鑰中讀取用戶名,然后在第一次輪換時,使用主用戶密鑰創建具有新密碼的該用戶的克隆。 之后輪換包括在原始和克隆之間交替使用秘密用戶/密碼對並更新密碼。 在這種情況下,應用程序只需要在輪換間隔內刷新一次密鑰。 如果它使用舊的用戶/密碼對,它將在兩個輪換間隔內保持有效。

如果您在 AWS 上使用 MongoDB(與具有 Mongo 兼容性的 DocumentDB 相對),最簡單的方法是啟動一個臨時 DocumentDB 並使用 Secrets Manager 控制台設置輪換。 然后復制用於 Mongo 應用程序的 Lambda、角色和策略以及機密,然后再拆除 DocumentDB 實例。 如果您已經在使用 DocumentDB,那么如上所述只需使用 SecretsManager 控制台進行設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM