使用 Amazon SES 使用單一電子郵件地址註冊多個 AWS 帳戶 - AWS 方案指引

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

使用 Amazon SES 使用單一電子郵件地址註冊多個 AWS 帳戶

由喬·沃茲尼亞克(AWS)和舒邦吉維什瓦卡瑪(AWS)創建

代碼存儲庫:GitHub aws-account-factory-email

環境:PoC 或試點

技術:基礎架構、管理與治理、訊息與通訊

AWS 服務:AWS Lambda;Amazon SES;亞馬遜

Summary

此模式說明如何將真實電子郵件地址與 AWS 帳戶相關聯的電子郵件地址分離。AWS 帳戶需要在帳戶建立時提供唯一的電子郵件地址。在某些組織中,管理 AWS 帳戶的團隊必須承擔與其簡訊團隊管理許多唯一電子郵件地址的負擔。對於管理許多 AWS 帳戶的大型組織來說,這可能很困難。

此模式提供獨特的電子郵件地址自動售貨解決方案,可讓 AWS 帳戶擁有者將一個電子郵件地址與多個 AWS 帳戶建立關 然後,AWS 帳戶擁有者的真實電子郵件地址會與表格中產生的這些電子郵件地址相關聯。該解決方案處理唯一電子郵件帳戶的所有傳入電子郵件,查找每個帳戶的所有者,然後將任何收到的消息轉發給所有者。 

先決條件和限制

先決條件

  • AWS 帳戶的管理存取權。

  • 存取開發環境。我們建議您使用 AWS Cloud9,以免必須自行設定所需的工具和存取金鑰。

  • (選用) 熟悉 AWS Cloud Development Kit (AWS CDK) 工作流程和 Python 程式設計語言,可協助您對任何問題進行疑難排解或進行修改。

限制

  • 64 個字元的整體出售電子郵件地址長度。如需詳細資訊,請參閱 AWS Organizations API 參考資料CreateAccount中的。

產品版本

  • Node.js 版本 12.7.0 或更新版本

  • Python 3.9 或更高版本

  • Python 軟件包虛擬環境

  • AWS CDK 版本 2.23.0 或更新版本

  • 泊塢視窗 20.10.x 或更新版本

架構

目標技術堆疊

  • AWS CloudFormation 堆疊

  • AWS Lambda 函數

  • 亞馬遜簡單電子郵件地址 (Amazon SES) 規則和規則集

  • AWS Identity and Access Management (IAM) 角色和政策

  • Amazon Simple Storage Service (Amazon S3) 存儲桶和存儲桶政策

  • AWS Key Management Service (AWS KMS) 金鑰和金鑰政策

  • Amazon Simple Notification Service (Amazon SNS) 主題和主題政策

  • Amazon DynamoDB 資料表

目標架構

使用單一電子郵件地址註冊多個 AWS 帳戶的目標架構

此圖顯示了兩個流程:

  • 電子郵件地址自動售貨流程:在圖中,電子郵件地址自動售貨流程(下部)通常以帳戶自動售貨解決方案或外部自動化開始,或者是手動調用。在要求中,會呼叫 Lambda 函數,其中包含所需的中繼資料的承載。函數使用此資訊產生唯一的帳戶名稱和電子郵件地址、將其儲存在 DynamoDB 資料庫中,然後將值傳回給呼叫者。然後,這些值就可以用來建立新的 AWS 帳戶 (通常是使用 AWS Organizations)。

  • 電子郵件轉發流程:此流程在上圖的上部分中說明。使用電子郵件地址自動售貨流程產生的帳戶電子郵件建立 AWS 帳戶時,AWS 會將各種電子郵件 (例如帳戶註冊確認和定期通知) 傳送到該電子郵件地址。按照此模式中的步驟操作,您可以使用 Amazon SES 設定 AWS 帳戶以接收整個網域的電子郵件。此解決方案設定轉寄規則,允許 Lambda 處理所有內送電子郵件、檢查TO地址是否在 DynamoDB 表格中,然後將訊息轉寄至帳戶擁有者的電子郵件地址。使用此程序可讓帳戶擁有者將多個帳戶與一個電子郵件地址建立關聯。

自動化和規模

此模式使用 AWS CDK 完全自動化部署。該解決方案使用 AWS 受管服務,這些服務可以自動 (或可以設定) 擴展以滿足您的需求。Lambda 函數可能需要額外的組態來滿足您的擴展需求。如需詳細資訊,請參閱 Lambda 文件中的 Lambda 函數擴展

工具

AWS 服務

  • AWS Cloud9 是整合式開發環境 (IDE),可協助您撰寫程式碼、建置、執行、測試和偵錯軟體。它也可協助您將軟體發行到 AWS 雲端。

  • AWS 可 CloudFormation協助您設定 AWS 資源、快速且一致地佈建 AWS 資源,並在 AWS 帳戶和區域的整個生命週期中進行管理。

  • AWS Command Line Interface (AWS CLI) (AWS CLI) 是一種開放原始碼工具,可協助您透過命令列殼層中的命令與 AWS 服務互動。

  • Amazon DynamoDB 是一項全受管 NoSQL 資料庫服務,可提供快速、可預期且可擴展的效能。

  • AWS Identity and Access Management (IAM) 可透過控制誰經過身份驗證和授權使用 AWS 資源,協助您安全地管理對 AWS 資源的存取。

  • AWS Key Management Service (AWS KMS) 可協助您建立和控制加密金鑰,以協助保護資料。

  • AWS Lambda 是一種運算服務,可協助您執行程式碼,而不需要佈建或管理伺服器。它只會在需要時執行程式碼並自動調整規模,因此您只需為使用的運算時間付費。

  • Amazon Simple Email Service (Amazon SES) 可協助您使用自己的電子郵件地址和網域來傳送和接收電子郵件。

  • Amazon Simple Notification Service (Amazon SNS) 可協助您協調和管理發佈者和客戶之間的訊息交換,包括 Web 伺服器和電子郵件地址。

  • Amazon Simple Storage Service (Amazon S3) 是一種雲端型物件儲存服務,可協助您儲存、保護和擷取任何數量的資料。

部署所需的工具

  • 透過 AWS CLI 和 IAM 存取您的 AWS 帳戶進行開發環境。 如需詳細資訊,請參閱「相關資源」區段中的連結。我們建議您使用 AWS Cloud9 來簡化設定程序。 

  • 如果您使用 AWS Cloud9,系統會為您設定下列項目。 如果您選擇不使用 AWS Cloud9,則需要安裝下列項目:

    • 用於設定 AWS CDK 存取登入資料的 AWS CLI。如需詳細資訊,請參閱 AWS CLI 文件

    • 版 Python 3.9 或更高版本

    • Python 軟件包虛擬環境

    • Node.js 版本 12.7.0 或更新版本

    • AWS CDK 版本 2.23.0 或更新版本

    • 泊塢視窗 20.10.x 版或更新版本

Code

此模式的程式碼可在 GitHub AWS 帳戶工廠電子郵件存放庫中取得。

史诗

任務描述所需技能

識別或建立 AWS 帳戶。

識別您擁有完整管理存取權限的現有或新 AWS 帳戶,以部署電子郵件解決方案。  

AWS 管理員、雲端管理員

設定部署環境。

依照下列步驟設定易於使用的部署環境並設定相依性:

  1. 將 AWS Cloud9 的執行個體部署為專用部署環境。如需相關指示,請參閱開始使用 AWS Cloud9

  2. 使用以下命令將 GitHub AWS 帳戶工廠電子郵件存放庫程式碼庫複製到 AWS Cloud9 執行個體:

    git clone https://github.com/aws-samples/aws-account-factory-email
  3. requirements.txt檔案中 (位於存放庫的根目錄) 中,更新開頭aws-cdk-lib==為的行,以符合您環境中執行的 AWS CDK 版本。若要識別版本,請使用cdk --version指令。

AWS 應用程 DevOps式開發人員
任務描述所需技能

識別和配置網域。

電子郵件轉寄功能需要專用網域。識別並分配您可以透過 Amazon SES 驗證的網域或子網域。在部署電子郵件轉寄解決方案的 AWS 帳戶內,應該可以使用此網域接收傳入的電子郵件。

網域要求:

  • 網域應該是標準網域或子網域。

  • 該域應該是外部 DNS 解析,因為它將用於接收來自組織外部的電子郵件。

雲端管理員、網路管理員、DNS 管理員

驗證網域。

確認識別的網域可用於接受內送電子郵件。

請完成 Amazon SES 文件中的驗證您的網域以接收 Amazon SES 電子郵件中的指示。這需要與負責網域 DNS 記錄的人員或團隊進行協調。

AWS 應用程式開發人員 DevOps

設定 MX 記錄。

使用指向 AWS 帳戶和區域中 Amazon SES 端點的 MX 記錄來設定您的網域。如需詳細資訊,請參閱 Amazon SES 文件中的發佈接收 Amazon SES 電子郵件的 MX 記錄

雲端管理員、網路管理員、DNS 管理員
任務描述所需技能

修改預設值。

編輯cdk.json檔案中的某些預設值 (位於存放庫的根目錄中),以便解決方案在部署後正確運作。

  1. 修改SES_DOMAIN_NAME值以符合您先前驗證的網域名稱。

  2. 修改ADDRESS_FROM值以包含中的相同網域SES_DOMAIN_NAME。地址的本機部分應由您的雲端團隊決定。此地址會成為透過解決方案轉寄之每封電子郵件的FROM地址。

  3. 修改ADDRESS_ADMIN值以符合任何不相符之內送郵件將轉寄至的電子郵件地址。此值必須是有效且可操作的電子郵件地址。

AWS 應用程式開發人員 DevOps

部署電子郵件自動販賣和轉寄解決方案

  1. 創建一 Python 虛擬環境:

    python -m venv .venv
  2. 啟動虛 Python 環境:

    source .venv/bin/activate

    或者,在視窗平台上,使用:

    % .venv\Scripts\activate.bat
  3. 安裝所有 Python 的要求,沒有錯誤:

    pip install -r requirements.txt
  4. 合成 CloudFormation 模板:

    cdk synth

    確認沒有錯誤,且完整 CloudFormation 範本包含預期的輸出。

  5. (選擇性) 如果您是第一次將 AWS CDK 程式碼部署到目前的 AWS 帳戶或區域,請啟動環境。如需詳細資訊,請參閱 AWS CDK 文件中的啟動安裝

    cdk bootstrap aws://AWS-ACCOUNT-NUMBER/REGION

    替換AWS-ACCOUNT-NUMBERREGION和實際值。

  6. 部署解決方案:

    cdk bootstrap cdk deploy

    這些命令應該沒有錯誤地完成。

AWS 應用程式開發人員 DevOps

確認已部署解決方案。

在開始測試之前,請先確認解決方案已成功部署:

  1. 開啟 AWS CloudFormation 主控台並尋找包含該名稱的 CloudFormation 堆疊AwsMailFwdStack

  2. 確認此AwsMailFwdStack堆疊具有下列資源:

    • Lambda 函數

    • Amazon SES 規則和規則集

    • (IAM) 角色和政策

    • Amazon S3 存儲桶和存儲桶政策

    • AWS KMS 金鑰和金鑰政策

    • Amazon SNS 主題和主題政策

    • DynamoDB 表

AWS 應用程式開發人員 DevOps
任務描述所需技能

驗證 API 是否正常運作。

在此步驟中,您將測試資料提交至解決方案的 API,並確認解決方案產生預期的輸出,並確認後端作業已如預期般執行。

使用測試輸入以手動方式執行銷售電子郵件 Lambda 函數。如需範例,請參閱範例檔案。) 對於OwnerAddress,請使用有效的電子郵件地址。API 應傳回帳戶名稱和帳戶電子郵件,其值會如預期般。

AWS 應用程式開發人員 DevOps

確認電子郵件正在轉寄。

在此步驟中,您會透過系統傳送測試電子郵件,並驗證電子郵件是否已轉寄給預期的收件者。

  1. 從最後一步獲取帳戶電子郵件。

  2. 將包含測試主題和正文文本的電子郵件發送到此地址。

  3. 確認您已透過帳戶擁有者的電子郵件地址收到電子郵件。

  4. 請確認您收到的電子郵件FROM地址與中的ADDRESS_FROM設定相符cdk.json

  5. 確認收到的電子郵件的主旨和內文與原始傳送的郵件相同。

AWS 應用程式開發人員 DevOps

故障診斷

問題解決方案

系統未如預期轉寄電子郵件。

確認您的設定是否正確:

  1. 您應該已經完成網域的 Amazon SES 驗證程序

  2. 您的網域應該使用指向 AWS 帳戶和區域中 Amazon SES 端點的 MX 記錄進行正確設定。如需詳細資訊,請參閱 Amazon SES 文件中的發佈接收 Amazon SES 電子郵件的 MX 記錄

驗證網域設定後,請依照下列步驟執行:

  1. 針對您部署解決方案的帳戶和區域開啟 AWS CloudWatch 主控台,然後在導覽窗格中導覽至 CloudWatch 日誌群組。

  2. 搜尋記錄群組清單SesMailForwardLogGroup

  3. 調查此群組中的記錄檔,以查看電子郵件自動販賣和轉寄程序期間是否產生任何錯誤。

當您嘗試部署 AWS CDK 堆疊時,您會收到類似下列內容的錯誤:

「模板格式錯誤:無法識別的資源類型」

在大多數情況下,此錯誤訊息表示您目標的區域沒有所有可用的 AWS 服務。如果您使用 AWS Cloud9 部署解決方案,則可能會鎖定與執行 AWS Cloud9 執行個體的區域不同的區域。

注意:根據預設,AWS CDK 會部署到您在 AWS CLI 中設定的區域和帳戶。

可能的解決方案:

  1. 透過按區域檢閱 AWS 服務,調查此解決方案所需的所有服務 (請參閱此模式稍早的 Target 技術堆疊部分) 是否位於您目標的 AWS 區域中。

  2. 如果您使用 AWS Cloud9 且鎖定與執行 AWS Cloud9 執行個體所在區域不同的區域,請務必在部署解決方案之前設定AWS_DEFAULT_REGION環境變數或使用 AWS CLI 設定區域。如需詳細資訊,請參閱 AWS CLI 文件中用來設定 AWS CLI 的環境變數。或者,您可以按照 AWS CDK 文件中的環境說明修改儲存庫根目錄中的app.py檔案,以包含硬式編碼的帳戶 ID 和區域。

當您部署解決方案時,您會收到錯誤訊息:

「部署失敗:錯誤: AwsMailFwdStack: SSM 參數 /cdk 引導程序 /hnb659f/ 版本未找到。環境是否已被引導? 請運行 'cdk 引導程序 '」

如果您從未將任何 AWS CDK 資源部署到目標的 AWS 帳戶和區域,則必須先按照錯誤指示執行cdk bootstrap命令。如果您在執行啟動載入命令後繼續收到此錯誤,您可能會嘗試將解決方案部署到與執行 AWS Cloud9 執行個體所在區域不同的區域。

若要解決此問題,請先設定AWS_DEFAULT_REGION環境變數或使用 AWS CLI 設定區域,然後再部署解決方案。或者,您可以按照 AWS CDK 文件中的環境說明修改儲存庫根目錄中的app.py檔案,以包含硬式編碼的帳戶 ID 和區域。

相關資源

其他資訊

成本

部署此解決方案時,AWS 帳戶持有人可能會產生與使用下列服務相關的費用。 了解這些服務的計費方式對您而言非常重要,以便您了解任何潛在的費用。如需定價資訊,請參閱下列頁面: