取得 Amazon SES SMTP 憑證 - Amazon Simple Email Service

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

取得 Amazon SES SMTP 憑證

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

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

您的 SMTP 密碼與 AWS 私密存取金鑰不同。如需憑證的詳細資訊,請參閱 Amazon SES 憑證的類型

注意

SMTP 端點目前不適用於非洲 (開普敦)、亞太區域 (雅加達)、歐洲 (米蘭)、以色列 (特拉維夫)、中東 (巴林)。

使用 SES 主控台來取得 SES SMTP 憑證

在主控台中使用以下 SES 工作流程產生 SMTP 憑證時,系統會讓您前往 IAM 主控台來建立具有適當政策的 IAM 使用者,以呼叫 SES 並提供您與該使用者相關聯的 SMTP 憑證。

需求

IAM 使用者可以建立 SES SMTP 憑證,但該使用者的政策必須提供他們使用 IAM 的許可,因為 SES SMTP 憑證是使用 IAM 建立的。您的 IAM 政策必須允許您執行下列 IAM 動作:iam:ListUsersiam:CreateUseriam:CreateAccessKeyiam:PutUserPolicy。如果您嘗試使用主控台建立 SES SMTP 認證,而您的 IAM 使用者沒有這些權限,則會看到錯誤訊息,指出您的帳戶「未授權執行 iam:」ListUsers。

若要建立 SMTP 登入資料
  1. 登入 AWS Management Console 並開啟 Amazon SES 主控台,網址為 https://console.aws.amazon.com/ses/

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

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

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

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

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

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

  8. 選擇返回 SES 主控台

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

您也可以使用 IAM 主控台來刪除現有的 SMTP 使用者。若要進一步瞭解刪除使用者,請參閱 IAM 入門指南中的管理 IAM 使用者

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

透過轉換現有認證來取得 SES SMTP AWS 認證

如果您有使用 IAM 介面設定的使用者,則可以從使用者的登入資料衍生該使用者的 SES SMTP 登 AWS 入資料。

重要

不要使用臨時 AWS 憑據來導出 SMTP 憑據。SES SMTP 界面不支援從暫時安全憑證產生的 SMTP 憑證。

若要讓 IAM 使用者使用 SES SMTP 界面傳送電子郵件,請執行以下步驟。

  • 使用本節中提供的演算法,從其 AWS 認證衍生使用者的 SMTP 認證。因為您是從 AWS 認證開始,SMTP 使用者名稱與 AWS 存取金鑰 ID 相同,因此您只需要產生 SMTP 密碼即可。

  • 將以下政策套用到 IAM 使用者:

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

    如需搭配 IAM 使用 SES 的詳細資訊,請參閱 Amazon SES 中的身分和存取管理

注意

雖然您可以為任何 IAM 使用者產生 SES SMTP 憑證,我們建議您在產生 SMTP 憑證時建立另一個 IAM 使用者。如需為何針對特定用途建立使用者是最佳實務的資訊,請前往 IAM 最佳實務

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

// Modify this variable to include your AWS secret access key key = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"; // Modify this variable to refer to the AWS Region that you want to use to send email. region = "us-west-2"; // The values of the following variables should always stay the same. date = "11111111"; service = "ses"; terminal = "aws4_request"; message = "SendRawEmail"; version = 0x04; kDate = HmacSha256(date, "AWS4" + key); kRegion = HmacSha256(region, kDate); kService = HmacSha256(service, kRegion); kTerminal = HmacSha256(terminal, kService); kMessage = HmacSha256(message, kTerminal); signatureAndVersion = Concatenate(version, kMessage); smtpPassword = Base64(signatureAndVersion);

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

注意

以下範例使用 Python 3.6 引入的 f 字串,如果使用舊版本將無法運作。

目前 Python SDK (Boto3) 官方支援 2.7 和 3.6 版 (或更新版本)。但是 2.7 版支援已被取代,且將在 2021 年 7 月 15 日棄用,因此您至少需要升級至 3.6 版。

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) ] # 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/

  • 將您想要轉換成 SMTP 密碼的私密存取金鑰取代為bPxRfi密碼。

  • us-east-1 取代為您要在其中使用 SMTP 認證的 AWS 區域。

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