Amazon SES で特定のドメインまたは E メールアドレスからの E メールをブロックするにはどうすればよいですか?

所要時間3分
0

Amazon Simple Email Service (Amazon SES) の ID で特定のドメインまたは E メールアドレスからメールを受信しないようにしたいと考えています。

簡単な説明

特定のドメインまたは E メールアドレスから Amazon SES の ID に E メールが送信されないようにするには、以下の手順を実行します:

  1. AWS Lambda 関数を作成します。受信メールを処理し、送信者を評価し、送信者が特定のドメインまたは E メールアドレスに一致する場合にメッセージをドロップする関数を構成します。
  2. すべての受信メールを Lambda 関数にルーティングする Amazon SES 受信ルールを作成します。
  3. 関数の Amazon CloudWatch Logs で、E メールがブロックされていることを確認します。

注: Amazon SES 受信ルールに Lambda アクションを追加すると、Amazon SES と Lambda の料金が発生します。

解決策

Lambda 関数を作成する

1.    AWS Lambda コンソールを開きます。Amazon SES に使用する AWS リージョンを選択します。Lambda 関数は Amazon SES で使用するのと同じ AWS リージョンにある必要があります。詳細については、「Lambda 関数アクションを呼び出す」を参照してください。

2.    [関数の作成] を選択します。

3.    [最初から作成] を選択します。

4.    [関数名] に、関数の名前を入力します。例えば、「SESReceiptRule」と入力します。

5.    [ランタイム] で、関数の言語を選択します。この例では [Node.js 14.x] が選択されています。

6.    [アーキテクチャ] で、関数コードのアーキテクチャを選択します。

7.    [アクセス許可] で、[デフォルトの実行ロールの変更] を展開します。

8.    [実行ロール] で、[基本的な Lambda アクセス許可で新しいロールを作成] を選択します。

9.    [関数の作成] を選択します。

10.    [コードソース] セクションの [index.js] タブで、次のコードを入力します:

// Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.// SPDX-License-Identifier: MIT-0
'use strict';

const AWS = require('aws-sdk');

exports.handler = (event, context, callback) => {
    console.log('Blocking email filter starting');
    const sesNotification = event.Records[0].ses;
    const messageId = sesNotification.mail.messageId;
    const receipt = sesNotification.receipt;
    const mail = sesNotification.mail;

    // Convert the environment variable into array. Clean spaces from it.
    var blockingListString = process.env.blockingList;
    blockingListString = blockingListString.replace(/\s/g,'');
    var blockingListArray = blockingListString.split(",");

    // Check if the mail source matches with any of the email addresses or domains defined in the environment variable
    function isListed() {
        var length = blockingListArray.length;
        for(var i = 0; i < length; i++) {
            if (mail.source.endsWith(blockingListArray[i]))
                return true;
        }
        return false;
    }
    console.log('Processing message:', messageId);

        // Processing the message
    if (isListed()) {
            callback(null, {'disposition':'STOP_RULE_SET'});
            console.log('Rejecting messageId: ', messageId, ' - Source: ', mail.source, ' - Recipients: ',receipt.recipients,' - Subject: ', mail.commonHeaders['subject']);
    }
    else {
        console.log('Accepting messageId:', messageId, ' - Source: ', mail.source, ' - Recipients: ',receipt.recipients,' - Subject: ', mail.commonHeaders['subject']);
        callback();
    }
};

11.    [環境変数][キー] に「blockingList」と入力します。
注: 作成できる環境変数の数に制限はありません。セットの合計サイズは 4 KB を超えることはできません。詳細については、「AWS Lambda 環境変数の使用」を参照してください。

12.    「blockingList」の [値] に、ブロックする E メールアドレスとドメインのカンマ区切りのリストを入力します。例えば、「example.com, JohnDoe@example.com」と入力します。
注: E メールアドレスとドメインのリストを編集するために Lambda 関数コードを変更する必要はありません。

13.    [ファイル] を選択し、[保存] を選択します。

Amazon SES 受信ルールを作成する

  1. Amazon SES コンソールを開きます。
  2. ナビゲーションペインで、[E メール受信] を選択します。
  3. 既存のアクティブなルールセットにルールを追加する場合は、ステップ 4 に進んでください。新しいルールセットを作成するには、[ルールセットの作成] を選択し、ルールセット名を入力して [ルールセットの作成] を選択します。
    注: 新しいルールセットを作成する場合は、ルールセットを選択してから [アクティブなルールセットとして設定] を選択してください。
  4. [アクティブなルールセットを表示] を選択します。
  5. [ルールの作成] を選択します。
    注: 既存のルールを、以下に説明する手順と同じ値で更新することもできます。
  6. [ルール設定の定義] に、次の情報を入力します:
    [ルール名] に、ルールの名前を入力します。
    [ステータス] で、[有効] ボックスをオンにして、ルールをアクティブなルールとして作成します。その後、[次へ] を選択します。
  7. [受信者の条件] で、[受信者の新しい条件の追加] を選択します。
  8. [受信者の条件] に、Amazon SES の ID に関連付けられている E メールアドレスまたはドメインを入力します。その後、[次へ] を選択します。
    重要: 特定の送信者からの E メールを受信しないようにする E メールアドレスまたはドメインを入力します。ブロックする E メールアドレスやドメインは入力しないでください。例えば、Amazon SES の ID で「JaneRoe@example.net」という E メールアドレスを使用していて、「example.com」からの E メールをブロックする場合は、「JaneRoe@example.net」と入力します。
  9. [アクションの追加] 画面の [新しいアクションを追加] で、[AWS Lambda 関数の呼び出し] を選択します。次の情報を入力します:
    [Lambda 関数] で、作成した関数を選択します。
    [呼び出しタイプ] で、[RequestResponse の呼び出し] を選択します。
    (オプション) ユースケースで必要な場合は、[SNS トピック] を設定します。このフィールドは空白のままにすることもできます。このフィールドの詳細については、「Lambda 関数アクションを呼び出す」を参照してください。その後、[次へ] を選択します。
  10. [ルールの作成] を選択します。
    注: [アクセス許可がありません] ダイアログボックスに、「SES was unable to access the resource [your Lambda function].」というメッセージが表示される場合があります。 このエラーは、Amazon SES で関数に対するアクセス許可が必要であることを意味しています。[アクセス許可を追加] を選択して、必要なアクセス許可を設定します。

関数の CloudWatch Logs を確認する

Lambda 関数と Amazon SES ルールを設定したら、次の手順に従って E メールがブロックされていることを確認します:

1.    CloudWatch コンソールを開きます。

2.    ナビゲーションペインの [ログ] で、[ロググループ] を選択します。

3.    ロググループのリストから、該当する Lambda 関数のロググループを選択します。例えば、[/aws/lambda/name_of_your_function] を選択します。

4.    [ログストリーム] で、確認するログストリームを選択します。ログストリームには、Lambda 関数が処理している E メールのメッセージとドメインが表示されます。次のような出力が表示されます:

14:08:25 START RequestId: aa939984-1b9b-11e7-83d2-efc6877bdc9b Version: $LATEST14:08:25 2017-04-07T14:08:25.957Z aa939984-1b9b-11e7-83d2-efc6877bdc9b Blocking email filter starting
14:08:25 2017-04-07T14:08:25.958Z aa939984-1b9b-11e7-83d2-efc6877bdc9b Processing message: jc0iurgrtkrsrs7f5pk0rsmf4r3q0poikdjfdi01
14:08:25 2017-04-07T14:08:25.959Z aa939984-1b9b-11e7-83d2-efc6877bdc9b Rejecting messageId: jc0iurgrtkrsrs7f5pk0rsmf4r3q0poikdjfdi01 - Source:
user@example.com - Recipients: [ 'user@domain.com' ] - Subject: This is an unwanted message
14:08:25 END RequestId: aa939984-1b9b-11e7-83d2-efc6877bdc9b

関連情報

Lambda の開始方法

受信ルールを使用した受信者ベースの制御

AWS公式
AWS公式更新しました 6ヶ月前
コメントはありません