Amazon からの Amazon SNSメッセージの発行 VPC - Amazon Simple Notification Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon からの Amazon SNSメッセージの発行 VPC

このセクションでは、メッセージをプライベートネットワークで安全に保ちながら Amazon SNSトピックに発行する方法について説明します。Amazon Virtual Private Cloud (Amazon ) でホストされている Amazon EC2インスタンスからメッセージを発行しますVPC。メッセージは、パブリックインターネットを経由せずに AWS ネットワーク内に留まります。からメッセージをプライベートに発行することでVPC、アプリケーションと Amazon 間のトラフィックのセキュリティを向上させることができますSNS。このセキュリティは、顧客に関する個人を特定できる情報 (PII) を公開する場合、またはアプリケーションが市場規制の対象である場合に重要です。例えば、プライベートに公開することは、医療保険の相互運用性と説明責任に関する法律 (HIPAA) に準拠する必要がある医療システムや、Payment Card Industry Data Security Standard (PCI) に準拠する必要がある金融システムがある場合に役立ちますDSS。

一般的なステップは次のとおりです。

  • AWS CloudFormation テンプレートを使用して、 に一時的なプライベートネットワークを自動的に作成します AWS アカウント。

  • を VPC Amazon に接続するVPCエンドポイントを作成しますSNS。

  • Amazon EC2インスタンスにログインし、メッセージを Amazon SNSトピックにプライベートに発行します。

  • メッセージが正常に配信されたことを確認します。

  • このプロセス中に作成したリソースを削除して、 に残らないようにします AWS アカウント。

次の図は、これらのステップを完了する際に AWS アカウントで作成するプライベートネットワークを示しています。

このステップで作成するプライベートネットワークのアーキテクチャ。

このネットワークは、Amazon EC2インスタンスVPCを含む で構成されます。インスタンスは、インターフェイスエンドポイント SNSを介して Amazon に接続します。 VPC このタイプのエンドポイントは、 を使用するサービスに接続します AWS PrivateLink。この接続が確立されると、ネットワークがパブリックインターネットから切断されていても、Amazon EC2インスタンスにログインし、Amazon SNSトピックにメッセージを発行できます。トピックは、受信したメッセージを 2 つのサブスクライブ AWS Lambda 関数にファンアウトします。これらの関数は、Amazon CloudWatch Logs で受信したメッセージをログに記録します。

このステップの完了には 20 分ほどかかります。

開始する前に

開始する前に、Amazon Web Services (AWS) アカウントが必要です。サインアップすると、Amazon SNSや Amazon を含む AWSのすべてのサービスにアカウントが自動的にサインアップされますVPC。アカウントをまだ作成していない場合は、https://aws.amazon.com/ に移動し、[まずは無料で始める] を選択します。

ステップ 1: Amazon EC2キーペアを作成する

キーペアは、Amazon EC2インスタンスにログインするために使用されます。これは、ログイン情報の暗号化に使用されるパブリックキーと、その復号に使用されるプライベートキーで構成されます。キーペアを作成するときは、プライベートキーのコピーをダウンロードします。後で、キーペアを使用して Amazon EC2インスタンスにログインします。ログインするには、キーペアの名前を指定し、プライベートキーを指定します。

キーペアを作成するには
  1. にサインイン AWS Management Console し、 で Amazon EC2コンソールを開きますhttps://console.aws.amazon.com/ec2/

  2. 左のナビゲーションメニューで、[ネットワーク & セキュリティ] セクションを見つけます。次に、[キーペア] を選択します。

  3. [キーペアの作成] を選択します。

  4. [キーペアの作成] ウィンドウで、[キーペア名] に「VPCE-Tutorial-KeyPair」と入力します。続いて、[作成] を選択します。

    キーペア名フィールドのVPCE「-Tutorial-KeyPair」というテキストを含むキーペアの作成ウィンドウ。
  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 テンプレート を使用します。テンプレートは、Amazon EC2インスタンスや Amazon SNSトピックなどの AWS リソースを構築するための設計図として機能するファイルです。このプロセスのテンプレートは、 で GitHub ダウンロードできます。

テンプレートを に提供し AWS CloudFormation、 でスタックとして必要なリソースを AWS CloudFormation プロビジョニングします AWS アカウント。スタックは、単一のユニットとして管理できるリソースのコレクションです。これらのステップを完了すると、 AWS CloudFormation を使用してスタック内のすべてのリソースを一度に削除できます。これらのリソースは、必要な場合を除き AWS アカウント、 に残りません。

このプロセスのスタックには、次のリソースが含まれます。

  • サブネット、セキュリティグループ、インターネットゲートウェイ、ルートテーブルなど、 およびVPC関連するネットワークリソース。

  • のサブネットに起動される Amazon EC2インスタンスVPC。

  • Amazon SNSトピック。

  • 2 つの AWS Lambda 関数。これらの関数は、Amazon SNSトピックに発行されたメッセージを受信し、イベントを CloudWatch ログに記録します。

  • Amazon CloudWatch メトリクスとログ。

  • Amazon EC2インスタンスが Amazon を使用できるようにするIAMロールSNS、および Lambda 関数が CloudWatch ログに書き込むことを許可するIAMロール。

AWS リソースを作成するには
  1. GitHub ウェブサイトからテンプレートファイルをダウンロードします。

  2. AWS CloudFormation コンソール にサインインします。

  3. [スタックの作成] を選択します。

  4. [テンプレートの選択] ページで、[テンプレートを Amazon S3 にアップロード] を選択してから、ファイルを選択して [次へ] をクリックします。

  5. [詳細の指定] ページで、スタック名とキー名を指定します。

    1. [スタックの名前] に VPCE-Tutorial-Stack を入力します。

    2. にはKeyNameVPCE-Tutorial-KeyPair を選択します。

    3. の場合SSHLocation、デフォルト値は のままにします0.0.0.0/0

      スタック名、、および の入力値フィールドを表示する KeyName詳細の指定ページSSHLocation。
    4. [Next (次へ)] を選択します。

  6. [オプション] ページで、すべてのデフォルト値を受け入れ、[次へ] を選択します。

  7. [確認] ページで、スタックの詳細を確認します。

  8. 「機能」で、 がカスタム名でIAMリソースを作成する AWS CloudFormation 可能性があることを確認します。

  9. [Create] (作成) を選択します。

    AWS CloudFormation コンソールで スタック ページが開きます。VPCE-Tutorial-Stack のステータスは CREATE_IN_PROGRESS です。作成プロセスが完了すると、数分後にステータスが CREATE_COMPLETE に変わります。

    ステータスが CREATE_ の AWS CloudFormation スタックCOMPLETE。
    ヒント

    [更新] ボタンを選択して、スタックの最新のステータスを表示します。

ステップ 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. 左のナビゲーションメニューで、[インスタンス] セクションを見つけます。続いて、[インスタンス] を選択します。

  3. インスタンスのリストで、 VPCE-Tutorial-EC2Instance を選択します。

  4. パブリック DNS (IPv4) 列で指定されたホスト名をコピーします。

    によって起動される Amazon EC2インスタンスの詳細 AWS CloudFormation。
  5. ターミナルを開きます。キーペアを含むディレクトリから、次のコマンドを使用してインスタンスに接続します。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. 左側のナビゲーションメニューで、[トピック] を選択します。

  3. トピックページで、トピック VPCE-Tutorial-Topic の Amazon リソースネーム (ARN) をコピーします。

  4. ターミナルで、トピックへのメッセージを発行を試みます。

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

    発行の試みが失敗するため、いつでもキャンセルできます。

ステップ 4: Amazon 用の Amazon VPCエンドポイントを作成する SNS

VPC を Amazon に接続するにはSNS、インターフェイスVPCエンドポイントを定義します。エンドポイントを追加したら、 の Amazon EC2インスタンスにログインしVPC、そこから Amazon SNS を使用できますAPI。トピックにメッセージを発行でき、メッセージはプライベートに発行されます。 AWS ネットワーク内にとどまり、パブリックインターネットは移動しません。

注記

インスタンスは、インターネット上の他の AWS サービスとエンドポイントにアクセスできません。

エンドポイントを作成するには
  1. で Amazon VPCコンソールを開きますhttps://console.aws.amazon.com/vpc/

  2. 左側のナビゲーションメニューで、[エンドポイント] を選択します。

  3. [エンドポイントの作成] を選択します。

  4. [エンドポイントの作成] ページの [サービスカテゴリ] で、デフォルトの選択である [AWS サービス] をそのままにします。

  5. サービス名 で、Amazon のサービス名を選択しますSNS。

    このサービス名は、選択したリージョンによって異なります。例えば、米国東部 (バージニア北部) を選択した場合、サービス名は com.amazonaws です。us-east-1.sns

  6. にはVPC、-VPCETutorial-VPC VPCという名前の を選択します。

    エンドポイントの作成ページのVPCメニュー。
  7. サブネット で、サブネット ID に VPCE-Tutorial-Subnet があるサブネットを選択します。

    [エンドポイントの作成] ページのサブネット。
  8. プライベートDNS名 を有効にする でこのエンドポイント の有効化 を選択します。

  9. セキュリティグループ で、セキュリティグループ の選択 を選択し、VPCE-Tutorial-SecurityGroup を選択します。

    [エンドポイントの作成] ページの [セキュリティグループ] メニュー。
  10. [エンドポイントの作成] を選択します。Amazon VPCコンソールは、VPCエンドポイントが作成されたことを確認します。

    エンドポイントの作成後に表示される確認メッセージ。
  11. [閉じる] を選択します。

    Amazon VPCコンソールでエンドポイントページが開きます。新しいエンドポイントのステータスは [保留中] です。数分で、作成プロセスが完了すると、ステータスが [利用可能] に変わります。

    利用可能なステータスのVPCエンドポイント。

ステップ 5: Amazon SNSトピックにメッセージを発行する

に Amazon のエンドポイントVPCが含まれているのでSNS、Amazon EC2インスタンスにログインし、 トピックにメッセージを発行できます。

メッセージを発行するには
  1. ターミナルが Amazon EC2インスタンスに接続されなくなった場合は、再度接続します。

    $ ssh -i VPCE-Tutorial-KeyPair.pem ec2-user@instance-hostname
  2. Amazon SNSトピックにメッセージを発行するために以前に行ったのと同じコマンドを実行します。今回は、発行の試行は成功し、Amazon はメッセージ ID SNSを返します。

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

ステップ 6: メッセージの配信を確認する

Amazon SNSトピックは、メッセージを受信すると、2 つのサブスクライブしている Lambda 関数に送信することでメッセージをファンアウトします。これらの関数は、メッセージを受信すると、イベントをログに記録します CloudWatch 。メッセージ配信が成功したことを確認するには、関数が呼び出されたことを確認し、 CloudWatch ログが更新されたことを確認します。

Lambda 関数が呼び出されたことを確認するには
  1. で AWS Lambda コンソールを開きますhttps://console.aws.amazon.com/lambda/

  2. 関数ページで、VPCE-Tutorial-Lambda-1」を選択します。

  3. [モニタリング] を選択します。

  4. [呼び出しカウント] グラフを確認します。このグラフには、Lambda 関数が実行された回数が表示されます。

    呼び出しカウントは、トピックにメッセージを発行した回数に一致します。

    Lambda コンソールの呼び出しカウントのグラフ。
CloudWatch ログが更新されたことを確認するには
  1. で CloudWatch コンソールを開きますhttps://console.aws.amazon.com/cloudwatch/

  2. 左側のナビゲーションメニューで [ログ] を選択します。

  3. Lambda 関数によって書き込まれたログを確認します。

    1. /aws/lambda/VPCE-Tutorial-Lambda-1/ ロググループを選択します。

    2. ログストリームを選択します。

    3. ログにエントリ From SNS: Hello が含まれていることを確認します。

      CloudWatch ログには「From SNS: Hello」というエントリが含まれます。
    4. コンソール上部の [ロググループ] を選択して、[ロググループ] ページを表示します。次に、/aws/lambda/VPCE-Tutorial-Lambda-2/ ロググループに対して前述のステップを繰り返します。

お疲れ様でした。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. 左側のナビゲーションメニューで、[エンドポイント] を選択します。

  3. 作成したエンドポイントを選択します。

  4. [アクション] を選択してから、[エンドポイントの削除] を選択します。

  5. [エンドポイントの削除] ウィンドウで、[はい、削除します] を選択します。

    エンドポイントのステータスが [削除中] に変わります。削除が完了すると、エンドポイントがページから削除されます。

AWS CloudFormation スタックを削除するには
  1. https://console.aws.amazon.com/cloudformation AWS CloudFormation でコンソールを開きます。

  2. スタック VPCE-Tutorial-Stack を選択します。

  3. [アクション] を選択してから、[スタックの削除] を選択します。

  4. [スタックの削除] ウィンドウで、[はい、削除します] を選択します。

    スタックのステータスが DELETE_IN_PROGRESS に変わります。削除が完了すると、スタックがページから削除されます。

詳細については、以下のリソースを参照してください。