本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將硬式編碼的資料庫認證移至 AWS Secrets Manager
如果您的程式碼中有純文字資料庫憑證,我們建議您將憑證移動到機密管理員,然後立即輪換它們。將憑證移動到機密管理員可解決憑證顯示問題,讓任何看到程式碼的人無法看見,因為再下一步,您的程式碼就能直接從機密管理員擷取憑證。輪換機密會更新密碼,然後撤銷目前的已寫死密碼,使其不再有效。
如需 Amazon RDS、Amazon Redshift 和 Amazon DocumentDB 資料庫,請使用此頁面中的步驟將寫死憑證移動到機密管理員。如需其他類型的憑證和其他機密,請參閱 將硬式編碼秘密移至 AWS Secrets Manager。
在開始之前,您需要決定需要存取該機密的人。我們建議使用兩個 IAM 角色來管理您的機密權限:
-
管理組織中機密的角色。如需相關資訊,請參閱 Secrets Manager 管理員許可。您將使用此角色建立並輪換機密。
-
RoleToRetrieveSecretAtRuntime
在本教學課程中,可以在執行時間使用認證的角色。您的程式碼擔任此角色以擷取機密。
步驟 1:建立機密
第一步是將現有的寫死憑證複製到機密管理員中的機密中。如需實現最低延遲,請將機密儲存在與資料庫相同的區域中。
若要建立機密
-
請開啟位於 https://console.aws.amazon.com/secretsmanager/
的機密管理員控制台。 -
選擇 Store a new secret (存放新機密)。
-
在 Choose secret type (選擇秘密類型) 頁面上,執行下列動作:
-
針對 Secret type (機密類型),選擇要存放的資料庫憑證的類型:
-
Amazon RDS 資料庫
-
Amazon DocumentDB 資料庫
-
Amazon Redshift 數據倉庫。
-
如需其他類型的機密,請參閱《替換已寫死機密》。
-
-
如需憑證,請輸入資料庫的現有寫死憑證。
-
如需 Encryption key (加密金鑰),請選擇 aws/secretsmanager 使用用於機密管理員的 AWS 受管金鑰 。使用此金鑰無需任何成本。您也可以使用自己的顧客託管金鑰,例如從另一個 AWS 帳戶存取機密。如需有關使用客戶受管金鑰的成本的資訊,請參閱 定價。
-
如需資料庫,請選擇您的資料庫。
-
選擇 Next (下一步)。
-
-
在 Configure secret (設定秘密) 頁面上,執行下列動作:
-
輸入描述性的 Secret name (機密名稱) 和 Description (描述)。
-
在 Resource permissions (資源許可) 中,選擇 Edit permissions (編輯許可)。貼上下列可擷取密碼
RoleToRetrieveSecretAtRuntime
的原則,然後選擇 [儲存]。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
AccountId
:role/
" }, "Action": "secretsmanager:GetSecretValue", "Resource": "*" } ] }RoleToRetrieveSecretAtRuntime
-
請選擇頁面最下方的 Next (下一頁)。
-
-
在 Configure rotation (設定輪換) 頁面上,暫時將輪換關閉。您稍後再打開。選擇 Next (下一步)。
-
在 Review (檢閱) 頁面上,檢閱機密詳細資訊,然後選擇 Store (存放)。
步驟 2:更新您的程式碼
您的程式碼必須擔任 IAM 角色 RoleToRetrieveSecretAtRuntime
,才能擷取密碼。如需詳細資訊,請參閱切換至 IAM 角色 (AWS API)。
接下來,您可以使用機密管理員提供的範本程式碼更新您的程式碼,以便從機密管理員中擷取機密。
若要尋找範本程式碼
前往以下位置開啟機密管理員控制台:https://console.aws.amazon.com/secretsmanager/
。 -
在 Secrets (機密) 頁面中,選擇機密。
-
向下捲動至 Sample code (範本程式碼)。選擇您的語言,然後複製程式碼片段。
在您的應用程式中,刪除寫死憑證並貼上程式碼片段。根據您的程式碼語言,您可能需要向程式碼片段中的函數或方法新增調用。
測試您的應用程式是否按預期運作,並使用機密代替寫死憑證。
步驟 3:輪換機密
最後一步是透過輪換機密撤消寫死憑證。輪換是定期更新機密的過程。當您輪換機密時,會更新機密和資料庫中的憑證。機密管理員可以在您設定的時程上自動為您輪換機密。
設定輪換的一部分是確保 Lambda 輪換函數可以存取機密管理員和您的資料庫。在您開啟自動輪換後,機密管理員將在與資料庫相同的 VPC 中建立 Lambda 輪換函數,好讓它有網路可以存取資料庫。Lambda 輪換函數還必須能夠調用機密管理員來更新機密。我們建議您在 VPC 中建立 Secrets Manager 端點,以便從 Lambda 呼叫至機 Secrets Manager 時不會離開 AWS 基礎結構。如需說明,請參閱使用 AWS Secrets Manager VPC端點。
若要打開輪換功能
請開啟位於 https://console.aws.amazon.com/secretsmanager/
的機密管理員控制台。 -
在 Secrets (機密) 頁面中,選擇機密。
-
在 Secret details (機密詳細資訊) 頁面的 Rotation configuration (輪換組態) 區段中,選擇 Edit rotation (編輯輪換)。
-
在 Edit rotation configuration (編輯輪換組態) 對話方塊中,執行以下動作:
-
開啟 Automatic rotation (自動輪換)。
-
在 Rotation schedule (輪換排程) 下,請以 UTC 時區輸入您的排程。
-
選擇 Rotate immediately when the secret is stored (儲存機密時立即輪換) 以在儲存變更時輪換您的機密。
-
在 Rotation function (輪換函數) 下,選擇 Create a new Lambda function (建立 Lambda 函數) 並輸入您的新函數名稱。機密管理員會將「SecretsManager」新增到函數名稱的開頭。
-
對於輪換策略,選擇單一使用者。
-
選擇儲存。
-
若要檢查機密是否輪換
請開啟位於 https://console.aws.amazon.com/secretsmanager/
的機密管理員控制台。 -
選擇 Secrets (機密),然後選擇該機密。
在 Secret details (機密詳細資訊) 頁面,向下捲動並選擇 Retrieve secret value (擷取機密值)。
如果機密值更改好了,則輪換成功。如果秘密值沒有更改,則需要輪換疑難排解查看旋轉功能的 CloudWatch 日誌。
測試您的應用程式在輪換的機密下是否能按預期運作。
後續步驟
從程式碼中刪除已寫死機密後,接下來需要思考一些構想:
-
您可以透過快取機密來提高效能並降低成本。如需詳細資訊,請參閱 從 取得秘密 AWS Secrets Manager。
-
您可以選擇不同的輪換計畫。如需詳細資訊,請參閱 旋轉明細表。
-
若要在 Java 和 Python 應用程式中尋找硬式編碼的秘密,我們建議您使用 Amazon CodeGuru 審核者。