

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

# 將硬式編碼秘密移至 AWS Secrets Manager
<a name="hardcoded"></a>

如果您的程式碼中有純文字機密，我們建議您輪換它們並將它們儲存在機密管理員中。將機密移動到機密管理員可解決機密顯示問題，讓任何看到程式碼的人無法看見，因為再下一步，您的程式碼就能直接從機密管理員擷取機密。輪換機密將撤消目前已寫死機密，使其不再有效。

如需資料庫憑證機密，請參閱 [將硬式編碼資料庫登入資料移至 AWS Secrets Manager](hardcoded-db-creds.md)。

在開始之前，您需要決定需要存取該機密的人。我們建議使用兩個 IAM 角色來管理您的機密權限：
+ 管理組織中機密的角色。如需相關資訊，請參閱 [Secrets Manager 管理員許可](auth-and-access.md#auth-and-access_admin)。您將使用此角色建立並輪換機密。
+ 可在執行階段使用機密的角色，例如在本教學中使用 *RoleToRetrieveSecretAtRuntime*。您的程式碼擔任此角色以擷取機密。在本教學中，您僅授予該角色擷取一個機密值的權限，並透過使用機密的資源策略授予權限。如需其他替代方案，請參閱 [後續步驟](#hardcoded_step-next)。

**Topics**
+ [步驟 1：建立機密](#hardcoded_step-1)
+ [步驟 2：更新您的程式碼](#hardcoded_step-2)
+ [步驟 3：更新機密](#hardcoded_step-3)
+ [後續步驟](#hardcoded_step-next)

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

第一步是將現有的已寫死機密複製到機密管理員中。如果秘密與 AWS 資源相關，請將秘密存放在與資源相同的區域中。否則，請將其存放在對您的使用案例具有最低延遲的區域。

**若要建立機密 (控制台)**

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** (機密類型)，選擇 **Other type of secret** (其他機密類型)。

   1. 將您的機密輸入為 **Key/value pairs** (金鑰/值對) 或 **Plaintext** (純文字)。一些範例：

------
#### [ API key ]

      輸入 做為鍵/值對：

      **ClientID**：*my\$1client\$1id*

      **ClientSecret** : *wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY*

------
#### [ OAuth token ]

      以純文字輸入：

      *AKIAI44QH8DHBEXAMPLE*

------
#### [ Digital certificate ]

      以純文字輸入：

      ```
      -----BEGIN CERTIFICATE-----
      EXAMPLE
      -----END CERTIFICATE-----
      ```

------
#### [ Private key ]

      以純文字輸入：

      ```
      –--- BEGIN PRIVATE KEY ----
      EXAMPLE
      ––-- END PRIVATE KEY –---
      ```

------

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

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

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

   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** (設定輪換) 頁面上，保持輪換關閉。選擇**下一步**。

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

## 步驟 2：更新您的程式碼
<a name="hardcoded_step-2"></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_step-3"></a>

最後一個步驟是撤消並更新已寫死機密。請參閱機密的來源以尋找撤消和更新機密的指示。例如，您可能需要停用目前機密並產生新機密。

**使用新值更新機密**

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

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

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

1. 更新機密，然後選擇 **Save** (儲存)。

接下來，測試您的應用程式在新機密下是否能按預期運作。

## 後續步驟
<a name="hardcoded_step-next"></a>

從程式碼中刪除已寫死機密後，接下來需要思考一些構想：
+ 若要在 Java 和 Python 應用程式中尋找已寫死機密，我們推薦《[Amazon CodeGuru Reviewer](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/welcome.html)》。
+ 您可以透過快取機密來提高效能並降低成本。如需詳細資訊，請參閱[從 取得秘密 AWS Secrets Manager](retrieving-secrets.md)。
+ 如須從多個區域存取的機密，請考慮複製您的機密以改善延遲。如需詳細資訊，請參閱[跨區域複寫 AWS Secrets Manager 秘密](replicate-secrets.md)。
+ 在此教學中，您授予 *RoleToRetrieveSecretAtRuntime* 僅擷取機密值的權限。若要向角色授予更多許可 (例如獲取有關機密的中繼資料或檢視機密清單)，請參閱 [資源型政策](auth-and-access_resource-policies.md)。
+ 在此教學中，您透過使用機密的資源策略授予 *RoleToRetrieveSecretAtRuntime* 權限。如需授予權限的其他方式，請參閱 [身分型政策](auth-and-access_iam-policies.md)。