從 Amazon 發布 Amazon SNS 消息 VPC - Amazon Simple Notification Service

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

從 Amazon 發布 Amazon SNS 消息 VPC

本節說明如何發佈到 Amazon SNS 主題,同時在私有網路中保持訊息安全。您可以從 Amazon 虛擬私有雲(EC2AmazonVPC)託管的亞馬遜實例發布消息。該消息保留在 AWS 網絡中,而無需通過公共互聯網。透過從 a 私下發佈訊息VPC,您可以提高應用程式和 Amazon 之間流量的安全性SNS。當您發布有關客戶的個人身份信息(PII)或當您的應用程序受到市場法規的約束時,此安全性非常重要。例如,如果您擁有必須遵守《Health 保險可攜性與責任法案》(HIPAA) 的醫療保健系統,或者必須符合支付卡產業資料安全標準 (PCIDSS) 的金融系統,則私下發佈會很有幫助。

一般步驟如下:

  • 使用 AWS CloudFormation 範本在您的 AWS 帳戶.

  • 創建一個VPC與 Amazon 連接的VPC端點SNS。

  • 登入 Amazon EC2 執行個體,並將訊息私下發佈到 Amazon SNS 主題。

  • 確認該訊息已成功傳遞。

  • 刪除您在此過程中創建的資源,以便它們不會保留在您的 AWS 帳戶.

下圖說明您在完成這些步驟時在 AWS 帳戶中建立的私人網路:

您在這些步驟中建立的私有網路架構。

此網路由包含 Amazon EC2 執行個體的網路組成。VPC執行個體SNS透過界面VPC端點連線到 Amazon。這種類型的端點會連線至由提供支援的服務 AWS PrivateLink。建立此連線後,即使網路與公用網際網路中斷連線,您也可以登入 Amazon EC2 執行個體並將訊息發佈到 Amazon SNS 主題。該主題將收到的消息風扇為兩個訂閱 AWS Lambda 功能。這些功能會記錄他們在 Amazon CloudWatch 日誌中接收的訊息。

完成這些步驟需約 20 分鐘。

開始之前

開始之前,您需要 Amazon Web Services (AWS) 帳戶。當您註冊時,您的帳戶將自動註冊為中的所有服務 AWS,包括 Amazon SNS 和 Amazon VPC。如果您尚未建立帳戶,請前往 https://aws.amazon.com/,然後選擇 Create a Free Account (建立免費帳戶)。

步驟 1:創建一個 Amazon EC2 key pair

key pair 可用來登入 Amazon EC2 執行個體。它包含用於加密您登入資訊的公有金鑰,以及用來解密的私有金鑰。當您建立金鑰對時,您會下載一份私有金鑰複本。稍後,您可以使用 key pair 登入 Amazon EC2 執行個體。若要登入,您需指定金鑰對名稱,並提供私有金鑰。

建立一組金鑰對
  1. 登錄 AWS Management Console 並在打開 Amazon EC2 控制台https://console.aws.amazon.com/ec2/

  2. 在左側導覽功能表,找到 Network & Security (網路和安全) 部分。然後,選擇 Key Pairs (金鑰對)。

  3. 選擇 Create Key Pair (建立金鑰對)。

  4. Create Key Pair (建立金鑰對) 視窗中,對於 Key pair name (金鑰對名稱),輸入 VPCE-Tutorial-KeyPair。然後,選擇 Create (建立)。

    「建立金鑰配對」視窗,其中「金鑰配對名稱」欄位中的文字為 KeyPair「VPCE-教學課程-」。
  5. 您的瀏覽器會自動下載私有金鑰檔案。將它存放在安全的地方。Amazon EC2 給該文件的擴展名.pem

  6. (選擇性) 如果您使用 Mac 或 Linux 電腦上的用SSH戶端連線至執行個體,請使用chmod指令設定私密金鑰檔案的權限,以便只有您才能讀取該檔案:

    1. 開啟終端機並導覽至包含私有金鑰的目錄:

      $ cd /filepath_to_private_key/
    2. 使用以下命令來設定許可:

      $ chmod 400 VPCE-Tutorial-KeyPair.pem

步驟 2:建立資 AWS 源

若要設定基礎結構,請使用 AWS CloudFormation 範本。範本是一個檔案,可做為建置 AWS 資源的藍圖,例如 Amazon EC2 執行個體和 Amazon SNS 主題。此程序的範本已提供 GitHub 供您下載。

您可以將範本提供給 AWS CloudFormation AWS CloudFormation ,並將您需要的資源作為堆疊在 AWS 帳戶. 堆疊是一組視為單一單位進行管理的資源。完成這些步驟後,您可 AWS CloudFormation 以使用一次刪除堆疊中的所有資源。這些資源不會留在您的 AWS 帳戶,除非您希望它們。

此過程的堆疊包含下列資源:

  • A VPC 和相關聯的網路資源,包括子網路、安全性群組、網際網路閘道和路由表。

  • 已啟動至中子網路的 Amazon EC2 執行個體VPC。

  • Amazon 的SNS話題。

  • 兩個 AWS Lambda 功能。這些函數會接收發佈到 Amazon SNS 主題的訊息,並在 CloudWatch 日誌中記錄事件。

  • Amazon CloudWatch 指標和日誌。

  • 允許 Amazon EC2 執行個IAM體使用 Amazon 的IAM角色SNS,以及允許 Lambda 函數寫入 CloudWatch 日誌的角色。

若要建立資 AWS 源
  1. 從 GitHub 網站下載模板文件

  2. 登入 AWS CloudFormation 主控台

  3. 選擇 Create Stack (建立堆疊)。

  4. Select Template (選擇範本) 頁面中,選擇 Upload a template to Amazon S3 (上傳範本到 Amazon S3)、選擇檔案,並選擇 Next (下一步)。

  5. Specify Details (指定詳細資訊) 頁面,指定堆疊和金鑰名稱:

    1. Stack Name (堆疊名稱) 中輸入 VPCE-Tutorial-Stack

    2. 對於 KeyName,選擇 VPCE-教程-KeyPair

    3. 對於 SSHLocation,請保留的預設值0.0.0.0/0

      「指定詳細資訊」頁面會顯示堆疊名稱 KeyName、和的填入值欄位SSHLocation。
    4. 選擇 Next (下一步)

  6. Options (選項) 頁面,保留所有預設值,然後選擇 Next (下一步)。

  7. 請在 Review (檢閱) 頁面上確認堆疊詳細資訊。

  8. 權能下,確認 AWS CloudFormation 可能會使用自訂名稱建立IAM資源。

  9. 選擇 Create (建立)。

    AWS CloudFormation 主控台會開啟「堆疊」頁面。該 VPCE-教程堆棧具有 _IN_ 的狀態。CREATE PROGRESS幾分鐘後,建立程序完成後,狀態會變更為 CREATE_ COMPLETE

    狀態為 CREATE _ 的 AWS CloudFormation 堆疊COMPLETE。
    提示

    選擇 Refresh (重新整理) 按鈕以查看最新的堆疊狀態。

步驟 3:確認您的 Amazon EC2 執行個體缺少網際網路存取

在上一步中啟動的 VPC Amazon EC2 實例缺少互聯網訪問。它不允許出站流量,並且無法將消息發佈到 Amazon。SNS請登入執行個體以驗證。然後,嘗試連接到公共端點,並嘗試向 Amazon 發送消息SNS。

此時您的發佈嘗試失敗。在稍後的步驟中,在您為 Amazon 建立VPC端點之後SNS,您的發佈嘗試就會成功。

連接到您的 Amazon EC2 執行個體
  1. 在打開 Amazon EC2 控制台https://console.aws.amazon.com/ec2/

  2. 在左側導覽功能表,找到 Instances (執行個體) 部分。然後,選擇 Instances (執行個體)。

  3. 在例證清單中,選取 VPCE-Tutorial-EC2Instance

  4. 複製 Pub lic DNS (IPv4) 欄中提供的主機名稱。

    有關由啟動的 Amazon EC2 執行個體的詳細資訊 AWS CloudFormation。
  5. 開啟終端機。從包含 key pair 的目錄中,使用下列命令連線至執行個體,其中 instance-hostname 是您從 Amazon 主EC2控台複製的主機名稱:

    $ ssh -i VPCE-Tutorial-KeyPair.pem ec2-user@instance-hostname
驗證該執行個體沒有網際網路連線能力
  • 在您的終端機中,嘗試連接到任何公有端點,例如 amazon.com:

    $ ping amazon.com

    由於連線嘗試失敗,您可以隨時取消 (在 Windows 上鍵入 Ctrl+C,或在 macOS 上鍵入 Command+C)。

確認執行個體缺少與 Amazon 的連線能力 SNS
  1. 登錄到 Amazon 控SNS制台

  2. 在左側的導覽功能表中,選擇 Topics (主題)。

  3. 主題頁面上,複製主題的 Amazon 資源名稱(ARN)VPCE-教程- 主題。

  4. 在您的終端機,嘗試向該主題發佈一則訊息:

    $ aws sns publish --region aws-region --topic-arn sns-topic-arn --message "Hello"

    由於發佈嘗試失敗,您可以隨時取消。

步驟 4:為 Amazon 創建一個 Amazon VPC 端點 SNS

要連接VPC到 AmazonSNS,您需要定義一個接口VPC端點。添加端點後,您可以登錄到您的 Amazon EC2 實例VPC,然後從那裡您可以使用 Amazon SNS API。您可以將訊息發佈到主題,該訊息為私下發佈。他們留在 AWS 網絡中,他們不通過公共互聯網旅行。

注意

執行個體仍然無法存取網際網路上的其他 AWS 服務和端點。

建立端點
  1. 在打開 Amazon VPC 控制台https://console.aws.amazon.com/vpc/

  2. 在左側的導覽功能表中,選擇 Endpoints (端點)。

  3. 選擇 Create Endpoint (建立端點)。

  4. Create Endpoint (建立端點) 頁面上,對於 Service category (服務類別),保留 AWS services ( 服務) 的預設選擇。

  5. 對於服務名稱,選擇 Amazon 的服務名稱SNS。

    該服務名稱取決於所選區域。例如,如果您選擇美國東部 (維吉尼亞北部),則服務名稱為 com.amazonaws。us-east-1. SNS。

  6. 對於 VPC,選擇具VPC有名稱 VPCE-教程-VPC

    [建立端點] 頁面上的VPC功能表。
  7. 若為子網路,請選擇子網路VPCE識別碼中具有-教學課程子網路的子網路

    在「建立端點」頁面上的子網路。
  8. 對於啟用私人DNS名稱,選取啟用此端點

  9. 對於安全性群組請選擇選取安全性群組,然後選擇 VPCE-教學-SecurityGroup

    在「建立端點」頁面上的安全群組。
  10. 選擇 Create endpoint (建立端點)。Amazon 主VPC控台會確認已建立VPC端點。

    在建立端點後,會顯示確認訊息。
  11. 選擇關閉

    Amazon 主VPC控台會開啟端點頁面。新的端點狀態為 pending (等待中)。在幾分鐘的時間內,狀態會在建立程序完成後變更為 available (可用)。

    狀態為可用的VPC端點。

步驟 5:將消息發佈到您的 Amazon SNS 主題

現在,您已經VPC包含了 Amazon 的端點SNS,您可以登錄到 Amazon EC2 實例並將消息發佈到該主題。

發佈訊息
  1. 如果您的終端機不再連接到 Amazon EC2 執行個體,請再次連線:

    $ ssh -i VPCE-Tutorial-KeyPair.pem ec2-user@instance-hostname
  2. 運行與之前為將消息發佈到 Amazon SNS 主題所做的相同命令。這一次,發布嘗試成功,Amazon SNS 返回一個消息 ID:

    $ aws sns publish --region aws-region --topic-arn sns-topic-arn --message "Hello" { "MessageId": "5b111270-d169-5be6-9042-410dfc9e86de" }

步驟 6:驗證您的訊息交付

當 Amazon 主SNS題收到消息時,它通過將消息發送到兩個訂閱 Lambda 函數來粉碎消息。當這些函數收到訊息時,它們會將事件 CloudWatch 記錄到記錄中。若要確認郵件傳遞成功,請檢查功能是否已呼叫,並檢查記 CloudWatch 錄檔是否已更新。

確認 Lambda 函數已呼叫
  1. 在開啟 AWS Lambda 主控台https://console.aws.amazon.com/lambda/

  2. 在 [函數] 頁面上,選擇 [VPCE教學課程-Lambda-1]。

  3. 選擇 Monitoring (監控)。

  4. 檢查 Invocation count (呼叫次數) 圖表。此圖表顯示 Lambda 函數已執行的次數。

    叫用次數符合您發佈訊息到主題的發佈次數。

    Lambda 主控台中的呼叫次數圖表。
確認 CloudWatch 記錄檔是否已更新
  1. 在開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/

  2. 在左側的導覽功能表中,選擇 Logs (日誌)。

  3. 檢查由 Lambda 函數所寫入的日誌:

    1. 選擇 /aws/羊肉/-教程-Lambda 1 /日VPCE誌組。

    2. 選擇日誌串流。

    3. 檢查該日誌包含項目 From SNS: Hello

      記 CloudWatch 錄檔包含「寄件者SNS:您好」項目。
    4. 在主控台頂端選擇 Log Groups(日誌群組),以返回 Log Groups (日誌群組) 頁面。然後,對 /aws/lambda /-教程-Lambda 2 /日誌群組重複上VPCE述步驟。

恭喜您!透過將 Amazon SNS 的端點新增到VPC,您可以將訊息發佈到由VPC. 私下發佈的訊息不會公開到公有網際網路。

步驟 7:清除

除非您想要保留建立的資源,否則您現在便可將它們刪除。刪除您不再使用的 AWS 資源,您可以避免不必要的費用 AWS 帳戶。

首先,使用 Amazon VPC 主控台刪除您的VPC端點。然後,刪除主 AWS CloudFormation 控台中的堆疊來刪除您建立的其他資源。當您刪除堆疊時, AWS CloudFormation 將堆疊的資源從 AWS 帳戶.

若要刪除您的VPC端點
  1. 在打開 Amazon VPC 控制台https://console.aws.amazon.com/vpc/

  2. 在左側的導覽功能表中,選擇 Endpoints (端點)。

  3. 選擇您建立的端點。

  4. 選擇 Actions (動作),然後選擇 Delete Endpoint (刪除端點)。

  5. Delete Endpoint (刪除端點) 視窗中,選擇 Yes, Delete (是的,刪除)。

    該端點狀態變更為 deleting (刪除)。當刪除完成後,該端點便從頁面刪除。

若要刪除您的 AWS CloudFormation 堆疊
  1. https://console.aws.amazon.com/雲形成開啟 AWS CloudFormation 主控台。

  2. 選擇堆棧 VPCE-教程- 堆棧。

  3. 選擇 Actions (動作),然後選擇 Delete Stack (刪除堆疊)。

  4. Delete Stack (刪除堆疊) 視窗中,選擇 Yes, Delete (是的,刪除)。

    堆疊狀態會變更為 DELETE_IN_ PROGRESS。當刪除完成後,該堆疊便從頁面刪除。

如需詳細資訊,請參閱下列資源。