將硬式編碼的資料庫認證移至 AWS Secrets Manager - AWS Secrets Manager

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

將硬式編碼的資料庫認證移至 AWS Secrets Manager

如果您的程式碼中有純文字資料庫憑證,我們建議您將憑證移動到機密管理員,然後立即輪換它們。將憑證移動到機密管理員可解決憑證顯示問題,讓任何看到程式碼的人無法看見,因為再下一步,您的程式碼就能直接從機密管理員擷取憑證。輪換機密會更新密碼,然後撤銷目前的已寫死密碼,使其不再有效。

如需 Amazon RDS、Amazon Redshift 和 Amazon DocumentDB 資料庫,請使用此頁面中的步驟將寫死憑證移動到機密管理員。如需其他類型的憑證和其他機密,請參閱 將硬式編碼秘密移至 AWS Secrets Manager

在開始之前,您需要決定需要存取該機密的人。我們建議使用兩個 IAM 角色來管理您的機密權限:

  • 管理組織中機密的角色。如需相關資訊,請參閱 Secrets Manager 管理員許可。您將使用此角色建立並輪換機密。

  • RoleToRetrieveSecretAtRuntime在本教學課程中,可以在執行時間使用認證的角色。您的程式碼擔任此角色以擷取機密。

步驟 1:建立機密

第一步是將現有的寫死憑證複製到機密管理員中的機密中。如需實現最低延遲,請將機密儲存在與資料庫相同的區域中。

若要建立機密
  1. 請開啟位於 https://console.aws.amazon.com/secretsmanager/ 的機密管理員控制台。

  2. 選擇 Store a new secret (存放新機密)。

  3. Choose secret type (選擇秘密類型) 頁面上,執行下列動作:

    1. 針對 Secret type (機密類型),選擇要存放的資料庫憑證的類型:

      • Amazon RDS 資料庫

      • Amazon DocumentDB 資料庫

      • Amazon Redshift 數據倉庫

      • 如需其他類型的機密,請參閱《替換已寫死機密》。

    2. 如需憑證,請輸入資料庫的現有寫死憑證。

    3. 如需 Encryption key (加密金鑰),請選擇 aws/secretsmanager 使用用於機密管理員的 AWS 受管金鑰 。使用此金鑰無需任何成本。您也可以使用自己的顧客託管金鑰,例如從另一個 AWS 帳戶存取機密。如需有關使用客戶受管金鑰的成本的資訊,請參閱 定價

    4. 如需資料庫,請選擇您的資料庫。

    5. 選擇 Next (下一步)。

  4. Configure secret (設定秘密) 頁面上,執行下列動作:

    1. 輸入描述性的 Secret name (機密名稱) 和 Description (描述)。

    2. Resource permissions (資源許可) 中,選擇 Edit permissions (編輯許可)。貼上下列可擷取密碼RoleToRetrieveSecretAtRuntime的原則,然後選擇 [儲存]。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountId:role/RoleToRetrieveSecretAtRuntime" }, "Action": "secretsmanager:GetSecretValue", "Resource": "*" } ] }
    3. 請選擇頁面最下方的 Next (下一頁)。

  5. Configure rotation (設定輪換) 頁面上,暫時將輪換關閉。您稍後再打開。選擇 Next (下一步)。

  6. Review (檢閱) 頁面上,檢閱機密詳細資訊,然後選擇 Store (存放)。

步驟 2:更新您的程式碼

您的程式碼必須擔任 IAM 角色 RoleToRetrieveSecretAtRuntime,才能擷取密碼。如需詳細資訊,請參閱切換至 IAM 角色 (AWS API)

接下來,您可以使用機密管理員提供的範本程式碼更新您的程式碼,以便從機密管理員中擷取機密。

若要尋找範本程式碼
  1. 前往以下位置開啟機密管理員控制台:https://console.aws.amazon.com/secretsmanager/

  2. Secrets (機密) 頁面中,選擇機密。

  3. 向下捲動至 Sample code (範本程式碼)。選擇您的語言,然後複製程式碼片段。

在您的應用程式中,刪除寫死憑證並貼上程式碼片段。根據您的程式碼語言,您可能需要向程式碼片段中的函數或方法新增調用。

測試您的應用程式是否按預期運作,並使用機密代替寫死憑證。

步驟 3:輪換機密

最後一步是透過輪換機密撤消寫死憑證。輪換是定期更新機密的過程。當您輪換機密時,會更新機密和資料庫中的憑證。機密管理員可以在您設定的時程上自動為您輪換機密。

設定輪換的一部分是確保 Lambda 輪換函數可以存取機密管理員和您的資料庫。在您開啟自動輪換後,機密管理員將在與資料庫相同的 VPC 中建立 Lambda 輪換函數,好讓它有網路可以存取資料庫。Lambda 輪換函數還必須能夠調用機密管理員來更新機密。我們建議您在 VPC 中建立 Secrets Manager 端點,以便從 Lambda 呼叫至機 Secrets Manager 時不會離開 AWS 基礎結構。如需說明,請參閱使用 AWS Secrets Manager VPC端點

若要打開輪換功能
  1. 請開啟位於 https://console.aws.amazon.com/secretsmanager/ 的機密管理員控制台。

  2. Secrets (機密) 頁面中,選擇機密。

  3. Secret details (機密詳細資訊) 頁面的 Rotation configuration (輪換組態) 區段中,選擇 Edit rotation (編輯輪換)

  4. Edit rotation configuration (編輯輪換組態) 對話方塊中,執行以下動作:

    1. 開啟 Automatic rotation (自動輪換)。

    2. Rotation schedule (輪換排程) 下,請以 UTC 時區輸入您的排程。

    3. 選擇 Rotate immediately when the secret is stored (儲存機密時立即輪換) 以在儲存變更時輪換您的機密。

    4. Rotation function (輪換函數) 下,選擇 Create a new Lambda function (建立 Lambda 函數) 並輸入您的新函數名稱。機密管理員會將「SecretsManager」新增到函數名稱的開頭。

    5. 對於輪換策略,選擇單一使用者

    6. 選擇儲存

若要檢查機密是否輪換
  1. 請開啟位於 https://console.aws.amazon.com/secretsmanager/ 的機密管理員控制台。

  2. 選擇 Secrets (機密),然後選擇該機密。

  3. Secret details (機密詳細資訊) 頁面,向下捲動並選擇 Retrieve secret value (擷取機密值)。

    如果機密值更改好了,則輪換成功。如果秘密值沒有更改,則需要輪換疑難排解查看旋轉功能的 CloudWatch 日誌。

測試您的應用程式在輪換的機密下是否能按預期運作。

後續步驟

從程式碼中刪除已寫死機密後,接下來需要思考一些構想: