取得 Amazon SESSMTP憑證 - Amazon Simple Email Service

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

取得 Amazon SESSMTP憑證

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

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

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

注意

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

使用SES主控台取得SESSMTP憑證

需求

IAM 使用者可以建立SESSMTP憑證,但使用者的政策必須授予他們使用IAM自己的許可,因為SESSMTP憑證是透過使用 建立的IAM。您的IAM政策必須允許您執行下列IAM動作:iam:ListUsersiam:CreateAccessKeyiam:CreateUseriam:PutUserPolicy。如果您嘗試使用主控台建立SESSMTP憑證,但您的IAM使用者沒有這些許可,您會看到錯誤,指出您的帳戶「未獲授權執行 iam:」ListUsers。

建立您的SMTP憑證
  1. 登入 AWS Management Console 並在 開啟 Amazon SES主控台https://console.aws.amazon.com/ses/

  2. 在左側導覽窗格中選擇SMTP設定 - 這會開啟簡易郵件傳輸通訊協定 (SMTP) 設定頁面。

  3. 選擇右上角的建立SMTP憑證 - IAM主控台將會開啟。

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

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

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

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

  8. 選擇返回SES主控台

您可以在 存取管理 下,在IAM主控台中檢視使用此程序建立的SMTP憑證清單,然後選擇使用者,然後使用搜尋列尋找您指派SMTP憑證的所有使用者。

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

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

透過轉換現有SESSMTP憑證來取得 AWS 憑證

如果您有使用 IAM 介面設定的使用者,您可以從其SESSMTP憑證衍生使用者的 AWS 憑證。

重要

請勿使用臨時 AWS 憑證來衍生SMTP憑證。此SESSMTP介面不支援從臨時安全SMTP登入資料產生的登入資料。

IAM 讓使用者能夠使用 SES SMTP 介面傳送電子郵件
  1. 請依照這些程序,使用本節中提供的演算法,從使用者 AWS 憑證衍生使用者的SMTP憑證。

    由於您從 AWS 憑證開始,因此SMTP使用者名稱與 AWS 存取金鑰 ID 相同,因此您只需產生SMTP密碼。

  2. 登入 AWS Management Console 並在 開啟IAM主控台https://console.aws.amazon.com/iam/

  3. 存取管理 下,選擇政策,後面接著建立政策

  4. 政策編輯器 中,選取JSON並移除編輯器中的任何範例程式碼。

  5. 將下列許可政策貼至編輯器:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ses:SendRawEmail", "Resource": "*" } ] }
  6. 選取下一步,然後AmazonSesSendingAccess輸入政策名稱欄位,後面接著建立政策

  7. 存取管理 下,選擇使用者群組,後面接著建立群組

  8. AWSSESSendingGroupDoNotRename使用者群組名稱欄位中輸入 。

  9. 從將SMTP使用者新增至群組資料表中選取使用者,將使用者新增至群組

  10. 從附加許可AmazonSesSendingAccess政策資料表中選取先前建立的政策,接著選取建立使用者群組 ,以連接政策。

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

注意

雖然您可以為任何IAM使用者產生SESSMTP憑證,但我們建議您在產生SMTP憑證時建立個別IAM使用者。如需建立使用者以達特定目的之良好做法的相關資訊,請前往IAM最佳實務

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

// 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 秘密存取金鑰轉換為SESSMTP密碼。

注意

以下範例使用 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) "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

針對上述命令執行以下事項:

  • Replace (取代) path/to/ 以及您儲存 的位置路徑smtp_credentials_generate.py

  • Replace (取代) wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY 您要轉換為SMTP密碼的秘密存取金鑰。

  • Replace (取代) us-east-1 AWS 您想要使用SMTP憑證的區域。

當此指令碼成功執行時,唯一的輸出是SMTP您的密碼。

將SMTP使用者從現有的內嵌政策遷移至群組政策 (安全建議)

重要

如果您在 2024 年 9 月 6 日之前建立SESSMTP憑證,則內嵌政策和標籤已連接至您的SMTP使用者。SES 正在偏離內嵌政策,並鼓勵您採取與安全建議相同的做法。

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

從現有的內嵌政策遷移至受管群組
  1. 登入 AWS Management Console 並在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 存取管理 下,選擇政策,後面接著建立政策

  3. 政策編輯器 中,選取JSON並移除編輯器中的任何範例程式碼。

  4. 將下列許可政策貼至編輯器:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ses:SendRawEmail", "Resource": "*" } ] }
  5. 選取下一步,然後AmazonSesSendingAccess輸入政策名稱欄位,後面接著建立政策

  6. 存取管理 下,選擇使用者群組,後面接著建立群組

  7. AWSSESSendingGroupDoNotRename使用者群組名稱欄位中輸入 。

  8. 從將SMTP使用者新增至群組資料表中選取使用者,將使用者新增至群組

  9. 從附加許可AmazonSesSendingAccess政策資料表中選取先前建立的政策,接著選取建立使用者群組 ,以連接政策。

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

  10. 存取管理 下,選擇使用者,然後選擇您要遷移SMTP的使用者。

  11. 選取群組索引標籤,然後選擇將使用者新增至群組

  12. 選取AWSSESSendingGroupDoNotRename群組 (後面接著新增使用者至群組)

  13. 選取許可索引標籤,並確認政策名稱欄中有兩個列列出 AmazonSesSendingAccess ,一個列包含內嵌,另一個列包含透過連接欄中列出的群組AWSSESSendingGroupDoNotRename

  14. 僅選取AmazonSesSendingAccess政策名稱欄中包含 的資料列,以及透過資料欄連接的內嵌資料列,接著選取移除並使用移除政策 確認。

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

  15. 選取標籤索引標籤,後面接著管理標籤

  16. 選取InvokedBy金鑰欄和SESConsole欄中包含的資料列旁邊的移除,然後儲存變更

重要

AmazonSesSendingAccess 政策 (作為內嵌或群組政策或兩者) 必須保持與SMTP使用者的連接,以確保其傳送不會受到影響。只有在群組政策連接至您的使用者後,才能移除內嵌政策。