AWS Secrets Manager 旋轉函數模板 - AWS Secrets Manager

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

AWS Secrets Manager 旋轉函數模板

若要使用範本,請參閱:

範本支援 Python 3.9。

要編寫自己的旋轉函數,請參閱編寫旋轉函數

Amazon RDS 和 Amazon Aurora

Amazon RDS Db2 單用戶

Amazon RDS Db2 交替用戶

Amazon RDS MariaDB 單一使用者

Amazon RDS MariaDB 交替使用者

Amazon RDS 和 Amazon Aurora MySQL 單一使用者

Amazon RDS 和 Amazon Aurora MySQL 交替使用者

Amazon RDS Oracle 單一使用者

Amazon RDS Oracle 交替使用者

Amazon RDS 和 Amazon Aurora PostgreSQL 單一使用者

Amazon RDS 和 Amazon Aurora PostgreSQL 交替使用者

Amazon RDS Microsoft SQLServer 單一使用者

Amazon RDS Microsoft SQLServer 交替使用者

Amazon DocumentDB (with MongoDB compatibility)

Amazon DocumentDB 單一使用者

Amazon DocumentDB 交替使用者

Amazon Redshift

Amazon Redshift 單一使用者

Amazon Redshift 交替使用者

Amazon ElastiCache

若要使用此範本,請參閱 Amazon 使用 ElastiCache 者指南中的自動輪替使用者密碼

其他類型的秘密

Secrets Manager 提供此範本做為起點,供您為任何類型的秘密建立輪換函數。

撰寫函數時,請謹慎納入偵錯或記錄陳述式。這些陳述式可能會導致函數中的資訊寫入 Amazon CloudWatch,因此您需要確保記錄檔不包含在開發期間收集的任何敏感資訊。

為了安全起見,Secrets Manager 僅允許 Lambda 輪換函數直接輪換機密。輪換函數無法呼叫第二個 Lambda 函數來輪換機密。

如需日誌陳述式的範例,請參閱AWS Secrets Manager 旋轉函數模板原始程式碼。

如果您使用外部二進位檔案和程式庫 (例如連線至資源),則需要管理修補並保留它們 up-to-date。

如需偵錯建議,請參閱 Testing and debugging serverless applications (測試與偵錯無伺服器應用程式)。

輪換秘密有四個步驟,分別對應 Lambda 輪換函數的下列四個方法。

create_secret

create_secret 中,您會先使用傳入的 ClientRequestToken 呼叫 get_secret_value,確認是否有秘密。如果沒有秘密,您可以使用 create_secret 和字符,建立新的秘密當作 VersionId。您便可使用 get_random_password,產生新的秘密值。您必須確定新的秘密值只包含對資料庫或服務有效的字元。使用 ExcludeCharacters 參數排除字元。呼叫 put_secret_value,將其與預備標籤 AWSPENDING 一起儲存。將新的秘密值儲存在 AWSPENDING 中,有助於確保等冪性。如果輪換因任何原因而失敗,您可以在後續呼叫中參考該秘密值。請參閱 How do I make my Lambda function idempotent (如何讓 Lambda 函數等冪)。

在測試函數時,請使用 AWS CLI 查看版本階段:調用describe-secret並查看VersionIdsToStages

set_secret

set_secret 中,您會變更資料庫或服務中的憑證,以符合 AWSPENDING 版本秘密中的新秘密值。

如果您將陳述式傳遞至解譯陳述式的服務 (例如資料庫),請使用查詢參數化。如需詳細資訊,請參閱 OWASP 網站上的 Query Parameterization Cheat Sheet (查詢參數化速查表)。

輪換函數是具有特殊權限的代理人,有權存取和修改 Secrets Manager 秘密和目標資源中的客戶憑證。為了防止潛在的混淆代理人攻擊,您必須確保攻擊者無法使用該函數存取其他資源。在您更新憑證之前:

  • 查看 AWSCURRENT 版本秘密中的憑證是否有效。如果 AWSCURRENT 憑證無效,請放棄輪換嘗試。

  • 查看 AWSCURRENTAWSPENDING 秘密值是否針對相同的資源。對於使用者名稱和密碼,請查看 AWSCURRENTAWSPENDING 使用者名稱是否相同。

  • 檢查目的地服務資源是否相同。對於資料庫,請查看 AWSCURRENTAWSPENDING 主機名稱是否相同。

test_secret

test_secret 中,您會使用 AWSPENDING 版本的秘密存取資料庫或服務,以進行測試。

finish_secret

finish_secret 中,您會使用 update_secret_version_stage,將預備標籤 AWSCURRENT 從先前的秘密版本移至新的秘密版本。Secrets Manager 會自動將 AWSPREVIOUS 預備標籤新增至先前版本,以便您保留上一個已知良好的秘密版本。