本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
您需要 Amazon SES SMTP 憑證才能存取 SES SMTP 界面。
您用來透過 SES SMTP 介面傳送電子郵件的登入資料,對於每個 AWS 區域都是唯一的。如果您在多個區域中使用 SES SMTP 界面來傳送電子郵件,您必須為每個區域產生一組 SMTP 憑證。
您的 SMTP 密碼與您的 AWS 私密存取金鑰不同。如需憑證的詳細資訊,請參閱 Amazon SES 憑證的類型。
注意
SMTP 端點目前不適用於非洲 (開普敦)、亞太區域 (雅加達)、歐洲 (米蘭)、以色列 (特拉維夫) 和中東 (巴林)。
使用 SES 主控台來取得 SES SMTP 憑證
需求
IAM 使用者可以建立 SES SMTP 憑證,但該使用者的政策必須提供他們使用 IAM 的許可,因為 SES SMTP 憑證是使用 IAM 建立的。您的 IAM 政策必須允許您執行下列 IAM 動作:iam:ListUsers
、iam:CreateUser
、iam:CreateAccessKey
及 iam:PutUserPolicy
。如果您嘗試使用主控台建立 SES SMTP 登入資料,而您的 IAM 使用者沒有這些許可,您會看到錯誤,指出您的帳戶「未獲授權執行 iam:ListUsers."
重要
上述參考的 IAM 動作具有許可管理存取層級,這是最高的 IAM 層級,因為它授予許可以授予或修改服務中的資源許可。因此,為了提高 AWS 帳戶的安全性,強烈建議您限制或定期監控這些政策,包括許可管理存取層級分類。
若要建立 SMTP 登入資料
-
登入 AWS Management Console ,並在 https://console.aws.amazon.com/ses/
:// 開啟 Amazon SES 主控台。 -
選擇左側導覽窗格中的 SMTP settings (SMTP 憑證) - 此將開啟 Simple Mail Transfer Protocol (SMTP) settings (簡易郵件傳輸協定 (SMTP) 設定) 頁面。
-
選擇右上角中的 Create SMTP Credentials (建立 SMTP 憑證) - IAM 主控台隨即開啟。
-
(選用) 若您需要檢視、編輯或刪除已建立的 SMTP 使用者,請選擇右下角的 Manage my existing SMTP credentials (管理我現有的 SMTP 認證) - IAM 主控台隨即開啟。下列這些程序會提供管理 SMTP 憑證的詳細資訊。
-
針對為 SMTP 建立使用者,在使用者名稱欄位中輸入您 SMTP 使用者的名稱。或者,您可以使用此欄位提供的預設值。當您完成時,請選擇右下角的建立使用者。
-
在 SMTP 密碼底下選取顯示,您的 SMTP 憑證會顯示在畫面上。
-
選擇下載 .csv 檔案來下載這些憑證,或將它們複製並存放在安全的地方,因為關閉此對話方塊之後,您就無法檢視或儲存憑證。
-
選擇返回 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 密碼。
登入 AWS Management Console ,並在 https://https://console.aws.amazon.com/iam/
開啟 IAM 主控台。 -
在存取管理下,選擇政策後面接著建立政策。
-
在政策編輯器中,選取 JSON 並在編輯器中移除任何範例程式碼。
-
將下列許可政策貼到編輯器:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ses:SendRawEmail", "Resource": "*" } ] }
-
選取下一步,
AmazonSesSendingAccess
然後在政策名稱欄位中輸入 ,後面接著建立政策。 -
在存取管理下,選擇使用者群組後面接著建立群組。
-
AWSSESSendingGroupDoNotRename
在使用者群組名稱欄位中輸入 。 -
從將使用者新增至群組資料表中選取 SMTP 使用者,將使用者新增至群組。
-
從連接許可
AmazonSesSendingAccess
政策資料表中選取先前建立的政策,接著選取建立使用者群組,以連接政策。
如需搭配 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 版。
#!/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.pywJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
us-east-1
針對上述命令執行以下事項:
-
以您儲存
smtp_credentials_generate.py
的位置路徑取代path/to/
。 -
wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
將 取代為您要轉換為 SMTP 密碼的秘密存取金鑰。 -
將
us-east-1
取代為您要使用 SMTP 登入資料 AWS 的區域。
這個指令碼執行成功時,唯一的輸出便是您的 SMTP 密碼。
將 SMTP 使用者從現有的內嵌政策遷移至群組政策 (安全建議)
重要
如果您在 2024 年 9 月 6 日之前建立 SES SMTP 登入資料,則內嵌政策和標籤已連接至您的 SMTP 使用者。SES 正在偏離內嵌政策,並鼓勵您執行與安全建議相同的動作。
在將現有內嵌政策的 SMTP 使用者遷移至群組政策之前,您必須先使用 SES 許可政策建立 IAM 使用者群組,以取代內嵌政策。如果您已建立此 IAM 使用者群組,或已針對您自 2024 年 9 月 6 日起建立的 SMTP 登入資料自動建立,則可以直接跳至下列程序的步驟 10。
從現有的內嵌政策遷移到受管群組
登入 AWS Management Console ,並在 https://https://console.aws.amazon.com/iam/
開啟 IAM 主控台。 -
在存取管理下,選擇政策後面接著建立政策。
-
在政策編輯器中,選取 JSON,並在編輯器中移除任何範例程式碼。
-
將下列許可政策貼到編輯器:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ses:SendRawEmail", "Resource": "*" } ] }
-
選取下一步,
AmazonSesSendingAccess
然後在政策名稱欄位中輸入 ,後面接著建立政策。 -
在存取管理下,選擇使用者群組後面接著建立群組。
-
AWSSESSendingGroupDoNotRename
在使用者群組名稱欄位中輸入 。 -
從將使用者新增至群組資料表中選取 SMTP 使用者,將使用者新增至群組。
-
從連接許可
AmazonSesSendingAccess
政策資料表中選取先前建立的政策,接著選取建立使用者群組,以連接政策。現在您已使用 SES 許可政策建立 IAM 使用者群組,您可以將 SMTP 使用者從目前的內嵌政策遷移至此群組政策,如其餘步驟所述。
-
在存取管理下,選擇使用者,然後選擇您要遷移的 SMTP 使用者。
-
選取群組索引標籤,然後選擇將使用者新增至群組。
-
選取
AWSSESSendingGroupDoNotRename
群組,接著選取將使用者新增至 group(s)。 -
選取許可索引標籤,並確認
AmazonSesSendingAccess
政策名稱欄中列出兩個列,一個列包含內嵌,另一個列包含透過連接欄中列出的群組AWSSESSendingGroupDoNotRename
。 -
僅選取
AmazonSesSendingAccess
政策名稱欄中包含 的資料列,並在透過連接資料欄中選取內嵌,接著選取移除,然後使用移除政策確認。確認透過資料欄中具有群組
AWSSESSendingGroupDoNotRename
的資料列仍然存在。 -
選取標籤索引標籤,後面接著管理標籤。
-
在索引鍵資料欄中,選取包含 InvokedBy 的資料列旁的移除,並在值資料欄中選取 SESConsole,接著選取儲存變更。
重要
AmazonSesSendingAccess
政策 (內嵌或群組政策或兩者) 必須保持連接至 SMTP 使用者,以確保其傳送不會受到影響。只有在群組政策連接到您的使用者之後,才能移除內嵌政策。