

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

# 取得 Amazon SES SMTP 憑證
<a name="smtp-credentials"></a>

您需要 Amazon SES SMTP 憑證才能存取 SES SMTP 界面。

您用來透過 SES SMTP 界面傳送電子郵件的登入資料對於每個 AWS 區域都是唯一的。如果您在多個區域中使用 SES SMTP 界面來傳送電子郵件，您必須為每個區域產生一組 SMTP 憑證。

您的 SMTP 密碼與您的 AWS 私密存取金鑰不同。如需憑證的詳細資訊，請參閱 [Amazon SES 憑證的類型](send-email-concepts-credentials.md)。

**注意**  
如需目前可用 SMTP 端點的清單，請參閱 中的 [SMTP 端點](https://docs.aws.amazon.com/general/latest/gr/ses.html#ses_smtp_endpoints)*AWS 一般參考*。

## 使用 SES 主控台來取得 SES SMTP 憑證
<a name="smtp-credentials-console"></a>

**需求**  
IAM 使用者可以建立 SES SMTP 憑證，但該使用者的政策必須提供他們使用 IAM 的許可，因為 SES SMTP 憑證是使用 IAM 建立的。您的 IAM 政策必須允許您執行下列 IAM 動作：`iam:ListUsers`、`iam:CreateUser`、`iam:CreateAccessKey` 及 `iam:PutUserPolicy`。如果您嘗試使用主控台建立 SES SMTP 登入資料，而您的 IAM 使用者沒有這些許可，您會看到錯誤，指出您的帳戶*「未獲授權執行 iam：ListUsers."*

**重要**  
上述參考的 IAM 動作具有最高 IAM 層級[的許可管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_understand-policy-summary-access-level-summaries.html#access_policies_access-level)存取層級，因為它提供在服務中授予或修改資源許可的許可。因此，為了提高 AWS 帳戶的安全性，強烈建議您限制或定期監控這些政策，包括許可管理存取層級分類。

**若要建立 SMTP 登入資料**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/ses/](https://console.aws.amazon.com/ses/) 的 Amazon SES 主控台。

1. 選擇左側導覽窗格中的 **SMTP settings** (SMTP 憑證) - 此將開啟 **Simple Mail Transfer Protocol (SMTP) settings** (簡易郵件傳輸協定 (SMTP) 設定) 頁面。

1. 選擇右上角中的 **Create SMTP Credentials** (建立 SMTP 憑證) - IAM 主控台隨即開啟。

1. (選用) 若您需要檢視、編輯或刪除已建立的 SMTP 使用者，請選擇右下角的 **Manage my existing SMTP credentials** (管理我現有的 SMTP 認證) - IAM 主控台隨即開啟。下列這些程序會提供管理 SMTP 憑證的詳細資訊。

1. 針對**為 SMTP 建立使用者**，在**使用者名稱**欄位中輸入您 SMTP 使用者的名稱。或者，您可以使用此欄位提供的預設值。當您完成時，請選擇右下角的**建立使用者**。

1. 在 *SMTP 密碼*底下選取**顯示**，您的 SMTP 憑證會顯示在畫面上。

1. 選擇**下載 .csv 檔案**來下載這些憑證，或將它們複製並存放在安全的地方，因為關閉此對話方塊之後，您就無法檢視或儲存憑證。

1. 選擇**返回 SES 主控台**。

您可以檢視您建立的 SMTP 憑證清單，方法是在 IAM 主控台的 **Access management (存取管理)** 下方使用此程序，然後選擇 **Users (使用者)**，接著使用搜尋列尋找您已指派 SMTP 憑證的所有使用者。

您也可以使用 IAM 主控台來刪除現有的 SMTP 使用者。若要進一步瞭解刪除使用者，請參閱 *IAM 入門指南*中的[管理 IAM 使用者](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_manage.html)。

若您要變更 SMTP 密碼，請刪除 IAM 主控台中您現有的 SMTP 使用者。然後完成上述程序，以產生一組新的 SMTP 憑證。

## 透過轉換現有的登入資料來取得 SES SMTP AWS 登入資料
<a name="smtp-credentials-convert"></a>

如果您有使用 IAM 界面設定的使用者，您可以從使用者的憑證衍生使用者的 SES SMTP AWS 憑證。

**重要**  
請勿使用臨時 AWS 登入資料來衍生 SMTP 登入資料。SES SMTP 界面不支援從暫時安全憑證產生的 SMTP 憑證。

**若要讓 IAM 使用者使用 SES SMTP 界面傳送電子郵件**

1. 請依照這些程序，使用本節提供的演算法，從使用者的登入資料衍生使用者的 SMTP AWS 登入資料。

   由於您從 AWS 登入資料開始，SMTP 使用者名稱與 AWS 存取金鑰 ID 相同，因此您只需要產生 SMTP 密碼。

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 的 IAM 主控台。

1. 在**存取管理**下，選擇**政策**後面接著**建立政策**。

1. 在**政策編輯器**中，選取 **JSON**，並在編輯器中移除任何範例程式碼。

1. 將下列許可政策貼到編輯器：

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

****  

   ```
   {
   "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
   "Effect": "Allow",
               "Action": "ses:SendRawEmail",
               "Resource": "*"
           }
       ]
   }
   ```

------

1. 選取**下一步**，然後在**政策名稱**欄位中輸入 `AmazonSesSendingAccess`，後面接著**建立政策**。

1. 在**存取管理**下，選擇**使用者群組**後面接著**建立群組**。

1. `AWSSESSendingGroupDoNotRename` 在**使用者群組名稱**欄位中輸入 。

1. 從將使用者新增至群組資料表中選取 SMTP **使用者，將其新增至群組**。

1. 從連接許可`AmazonSesSendingAccess`政策資料表中選取先前建立的政策，接著選取**建立使用者群組**，以連接該政策。 ****

如需搭配 IAM 使用 SES 的詳細資訊，請參閱 [Amazon SES 中的身分和存取管理](control-user-access.md)。

**注意**  
雖然您可以為任何 IAM 使用者產生 SES SMTP 憑證，我們建議您在產生 SMTP 憑證時建立另一個 IAM 使用者。如需為何針對特定用途建立使用者是最佳實務的資訊，請前往 [IAM 最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAMBestPractices.html)。

下列虛擬程式碼顯示將 AWS 私密存取金鑰轉換為 SES SMTP 密碼的演算法。

```
 1. // Modify this variable to include your AWS secret access key
 2. key = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY";
 3.             
 4. // Modify this variable to refer to the AWS Region that you want to use to send email.
 5. region = "us-west-2";
 6.             
 7. // The values of the following variables should always stay the same.
 8. date = "11111111";
 9. service = "ses";
10. terminal = "aws4_request";
11. message = "SendRawEmail";
12. version = 0x04;
13. 
14. kDate = HmacSha256(date, "AWS4" + key);
15. kRegion = HmacSha256(region, kDate);
16. kService = HmacSha256(service, kRegion);
17. kTerminal = HmacSha256(terminal, kService);
18. kMessage = HmacSha256(message, kTerminal);
19. signatureAndVersion = Concatenate(version, kMessage);
20. smtpPassword = Base64(signatureAndVersion);
```

某些程式設計語言包含可用於將 IAM 私密存取金鑰轉換為 SMTP 密碼的程式庫。本節包含程式碼範例，您可以使用 Python 將 AWS 私密存取金鑰轉換為 SES SMTP 密碼。

**注意**  
以下範例使用 Python 3.6 引入的 **f 字串**，如果使用舊版本將無法運作。
在下列範例中，SMTP\$1REGIONS 清單只是一個範例，您的實際區域清單可能會更短或更長，具體取決於您計劃傳送電子郵件的區域，因為每個區域都需要 SMTP 登入資料 AWS 區域。

------
#### [ Python ]

```
#!/usr/bin/env python3

import hmac
import hashlib
import base64
import argparse

SMTP_REGIONS = [
    "us-east-2",  # US East (Ohio)
    "us-east-1",  # US East (N. Virginia)
    "us-west-2",  # US West (Oregon)
    "ap-south-1",  # Asia Pacific (Mumbai)
    "ap-northeast-2",  # Asia Pacific (Seoul)
    "ap-southeast-1",  # Asia Pacific (Singapore)
    "ap-southeast-2",  # Asia Pacific (Sydney)
    "ap-northeast-1",  # Asia Pacific (Tokyo)
    "ca-central-1",  # Canada (Central)
    "eu-central-1",  # Europe (Frankfurt)
    "eu-west-1",  # Europe (Ireland)
    "eu-west-2",  # Europe (London)
    "eu-south-1",  # Europe (Milan)
    "eu-north-1",  # Europe (Stockholm)
    "sa-east-1",  # South America (Sao Paulo)
    "us-gov-west-1",  # AWS GovCloud (US)
    "us-gov-east-1",  # AWS GovCloud (US)
]

# These values are required to calculate the signature. Do not change them.
DATE = "11111111"
SERVICE = "ses"
MESSAGE = "SendRawEmail"
TERMINAL = "aws4_request"
VERSION = 0x04


def sign(key, msg):
    return hmac.new(key, msg.encode("utf-8"), hashlib.sha256).digest()


def calculate_key(secret_access_key, region):
    if region not in SMTP_REGIONS:
        raise ValueError(f"The {region} Region doesn't have an SMTP endpoint.")

    signature = sign(("AWS4" + secret_access_key).encode("utf-8"), DATE)
    signature = sign(signature, region)
    signature = sign(signature, SERVICE)
    signature = sign(signature, TERMINAL)
    signature = sign(signature, MESSAGE)
    signature_and_version = bytes([VERSION]) + signature
    smtp_password = base64.b64encode(signature_and_version)
    return smtp_password.decode("utf-8")


def main():
    parser = argparse.ArgumentParser(
        description="Convert a Secret Access Key to an SMTP password."
    )
    parser.add_argument("secret", help="The Secret Access Key to convert.")
    parser.add_argument(
        "region",
        help="The AWS Region where the SMTP password will be used.",
        choices=SMTP_REGIONS,
    )
    args = parser.parse_args()
    print(calculate_key(args.secret, args.region))


if __name__ == "__main__":
    main()
```

若要使用此指令碼取得您的 SMTP 密碼，請將上述程式碼儲存為 `smtp_credentials_generate.py`。然後，在命令列中執行以下命令：

```
python path/to/smtp_credentials_generate.py wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY us-east-1
```

針對上述命令執行以下事項：
+ 以您儲存 `smtp_credentials_generate.py` 的位置路徑取代 *path/to/*。
+ *wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY* 將 取代為您要轉換為 SMTP 密碼的私密存取金鑰。
+ 將 *us-east-1* 取代為您要使用 SMTP 登入資料的 AWS 區域。

這個指令碼執行成功時，唯一的輸出便是您的 SMTP 密碼。

------

## 將 SMTP 使用者從現有的內嵌政策遷移至群組政策 （安全建議）
<a name="migrate-inline-policy-to-group"></a>

**重要**  
如果您在 2024 年 9 月 6 日之前建立 SES SMTP 登入資料，則內嵌政策和標籤已連接至您的 SMTP 使用者。SES 正在偏離內嵌政策，並鼓勵您執行與安全建議相同的動作。

將 SMTP 使用者從現有的內嵌政策遷移至群組政策之前，您必須先使用 SES 許可政策建立 IAM 使用者群組，以取代內嵌政策。如果您已建立此 IAM 使用者群組，或已針對您自 2024 年 9 月 6 日起建立的 SMTP 登入資料自動建立，您可以直接跳至下列程序中*的步驟 10*。

**從現有的內嵌政策遷移至受管群組**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 的 IAM 主控台。

1. 在**存取管理**下，選擇**政策**後面接著**建立政策**。

1. 在**政策編輯器**中，選取 **JSON**，並在編輯器中移除任何範例程式碼。

1. 將下列許可政策貼到編輯器：

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

****  

   ```
   {
   "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
   "Effect": "Allow",
               "Action": "ses:SendRawEmail",
               "Resource": "*"
           }
       ]
   }
   ```

------

1. 選取**下一步**，然後在`AmazonSesSendingAccess`**政策名稱**欄位中輸入 ，後面接著**建立政策**。

1. 在**存取管理**下，選擇**使用者群組**後面接著**建立群組**。

1. `AWSSESSendingGroupDoNotRename` 在**使用者群組名稱**欄位中輸入 。

1. 從將使用者新增至群組資料表中選取 SMTP **使用者，將其新增至群組**。

1. 從連接許可`AmazonSesSendingAccess`政策資料表中選取先前建立的政策，接著選取建立**使用者群組，以連接先前建立**的政策。 ****

   現在您已使用 SES 許可政策建立 IAM 使用者群組，您可以將 SMTP 使用者從目前的內嵌政策遷移至此群組政策，如其餘步驟所述。

1. 在**存取管理**下，選擇**使用者**，然後選擇您要遷移的 SMTP 使用者。

1. 選取**群組**索引標籤，然後選擇**將使用者新增至群組**。

1. 選取`AWSSESSendingGroupDoNotRename`群組 **（後面接著新增使用者至群組）**。

1. 選取**許可**索引標籤，並確認**政策名稱**欄中有兩個列與 `AmazonSesSendingAccess` 一起列出，一個與*內嵌*在一起，另一個與**透過連接**欄中列出的*群組`AWSSESSendingGroupDoNotRename`*一起列出。

1. 僅選取`AmazonSesSendingAccess`**政策名稱**欄中包含的資料列，以及在**透過連接**資料欄中*內嵌*的資料列，後面接著**移除**，然後使用**移除政策**進行確認。

   確認**透過連接**資料欄中具有*群組`AWSSESSendingGroupDoNotRename`*的資料列仍然存在。

1. 選取**標籤**索引標籤，後面接著**管理標籤**。

1. 在**金鑰**欄中選取包含 *InvokedBy* 的資料列旁的**移除**，並在**值**欄中選取 *SESConsole*，然後選取**儲存變更**。

**重要**  
`AmazonSesSendingAccess` 政策 （做為內嵌或群組政策或兩者） 必須保持連接到 SMTP 使用者，以確保其傳送不會受到影響。只有在群組政策連接到您的使用者之後，才能移除內嵌政策。