

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

# 將硬式編碼資料庫登入資料移至 AWS Secrets Manager
<a name="hardcoded-db-creds"></a>

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

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

在開始之前，您需要決定需要存取該機密的人。我們建議使用兩個 IAM 角色來管理您的機密權限：
+ 管理組織中機密的角色。如需相關資訊，請參閱 [Secrets Manager 管理員許可](auth-and-access.md#auth-and-access_admin)。您將使用此角色建立並輪換機密。
+ 可在執行階段使用機密的角色，本教學中的 *RoleToRetrieveSecretAtRuntime*。您的程式碼擔任此角色以擷取機密。

**Topics**
+ [步驟 1：建立機密](#hardcoded-db-creds_step2)
+ [步驟 2：更新您的程式碼](#hardcoded-db-creds_step3)
+ [步驟 3：輪換機密](#hardcoded-db-creds_step5)
+ [後續步驟](#hardcoded-db-creds_nextsteps)

## 步驟 1：建立機密
<a name="hardcoded-db-creds_step2"></a>

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

**若要建立機密**

1. 請開啟位於 [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/) 的機密管理員控制台。

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

1. 在 **Choose secret type** (選擇秘密類型) 頁面上，執行下列動作：

   1. 針對 **Secret type** (機密類型)，選擇要存放的資料庫憑證的類型：
      + **Amazon RDS 資料庫**
      + **Amazon DocumentDB 資料庫**
      + **Amazon Redshift 資料倉儲**。
      + 如需其他類型的機密，請參閱《[替換已寫死機密](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html)》。

   1. 如需**憑證**，請輸入資料庫的現有寫死憑證。

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

   1. 如需**資料庫**，請選擇您的資料庫。

   1. 選擇**下一步**。

1. 在 **Configure secret** (設定秘密) 頁面上，執行下列動作：

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

   1. 在 **Resource permissions** (資源許可) 中，選擇 **Edit permissions** (編輯許可)。貼上以下政策，此政策允許 *RoleToRetrieveSecretAtRuntime* 擷取機密，然後選擇 **Save** (儲存)。

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:role/RoleToRetrieveSecretAtRuntime"
                  },
                  "Action": "secretsmanager:GetSecretValue",
                  "Resource": "*"
              }
          ]
      }
      ```

------

   1. 請選擇頁面最下方的 **Next** (下一頁)。

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

1. 在 **Review** (檢閱) 頁面上，檢閱機密詳細資訊，然後選擇 **Store** (存放)。

## 步驟 2：更新您的程式碼
<a name="hardcoded-db-creds_step3"></a>

您的程式碼必須擔任 IAM 角色 *RoleToRetrieveSecretAtRuntime* 以便能夠擷取到機密。如需詳細資訊，請參閱[切換到 IAM 角色 (AWS API)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-api.html)。

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

**若要尋找範本程式碼**

1. 前往以下位置開啟機密管理員控制台：[https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)。

1. 在 **Secrets** (機密) 頁面中，選擇機密。

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

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

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

## 步驟 3：輪換機密
<a name="hardcoded-db-creds_step5"></a>

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

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

**若要打開輪換功能**

1. 請開啟位於 [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/) 的機密管理員控制台。

1. 在 **Secrets** (機密) 頁面中，選擇機密。

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

1. 在 **Edit rotation configuration** (編輯輪換組態) 對話方塊中，執行以下動作：

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

   1. 在 **Rotation schedule** (輪換排程) 下，請以 UTC 時區輸入您的排程。

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

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

   1. 對於**輪換策略**，選擇**單一使用者**。

   1. 選擇**儲存**。

**若要檢查機密是否輪換**

1. 請開啟位於 [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/) 的機密管理員控制台。

1. 選擇 **Secrets** (機密)，然後選擇該機密。

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

   如果機密值更改好了，則輪換成功。如果機密值沒有更改，您則需要透過 CloudWatch Logs 查看輪換函數來 [輪換疑難排解](troubleshoot_rotation.md)。

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

## 後續步驟
<a name="hardcoded-db-creds_nextsteps"></a>

從程式碼中刪除已寫死機密後，接下來需要思考一些構想：
+ 您可以透過快取機密來提高效能並降低成本。如需詳細資訊，請參閱[從 取得秘密 AWS Secrets Manager](retrieving-secrets.md)。
+ 您可以選擇不同的輪換計畫。如需詳細資訊，請參閱[輪換排程](rotate-secrets_schedule.md)。
+ 若要在 Java 和 Python 應用程式中尋找已寫死機密，我們推薦《[Amazon CodeGuru Reviewer](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/welcome.html)》。