AWS re:Postを使用することにより、以下に同意したことになります 利用規約

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

所要時間3分
0

使用している Amazon Simple Email Service (Amazon SES) アイデンティティで特定のドメインまたは E メールアドレスからの E メールを受信したくありません。これらの E メールをブロックする方法を教えてください。

簡単な説明

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

1.    AWS Lambda 関数を作成して、受信メールを処理し、送信者を評価し、送信者が特定のドメインまたは E メールアドレスと一致した場合にメッセージをドロップします。

2.    受信するすべての E メールを Lambda 関数にルーティングする Amazon SES の受信ルールを作成します。

3.    関数の Amazon CloudWatch Logs をチェックして、ブロックされている E メールを確認します。

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

解決方法

AWS Lambda 関数を作成する

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

2.    ナビゲーションバーのリージョンセレクターで、Amazon SES で使用している AWS リージョンを選択します。Lambda 関数は、Amazon SES で使用しているのと同じリージョンに存在する必要があります。詳細については、「Lambda 関数アクションの呼び出し」を参照してください。

3.    [Create function] を選択します。

4.    [Author from scratch] を選択します。

5.    [Function Name] に関数の名前を入力します。たとえば、「SESReceiptRule」と入力できます。

6.    [Runtime] で、「Node.js 10.x」を選択します。

7.    [Permissions] で、[Choose or create an execution role] を展開します。

8.    [Execution Role] で、[Create a new role with basic Lambda permissions] を選択します。

9.    [Create function] を選択します。

10.    [Function code] で、以下のコードを入力します。

// 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」と入力します。

注意: Lambda 関数コードを変更することなく、E メールアドレスとドメインのリストを編集できます。

13.    [Save] (保存) を選択します。

Amazon SES 受信ルールの作成

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

2.    ナビゲーションペインで、[Email Receiving]、[Rule Sets] の順に選択します。

3.    既存のアクティブなルールセットにルールを追加する場合は、ステップ 4 に進みます。新しいルールセットを作成するには、[Create a Rule Set (ルールセットの作成)] を選択し、ルールセットの名前を入力して、[Create a Rule Set (ルールセットの作成)] を選択します。

注意: 新しいルールセットを作成する場合は、ルールセットを選択し、次に [Set as Active Rule Set (アクティブなルールセットとして設定する)] を選択します。

4.    [アクティブなルールセットを表示する] を選択します。

5.    [Create Rule] (ルールの作成) を選択します。

注意: 次の手順で説明されている同じ値で既存のルールの更新を選択することもできます。

6.    Recipients に、Amazon SES ID に関連付けられた E メールアドレスまたはドメインを入力します。

重要: 特定の送信者からの E メールの受信を回避したい E メールアドレスまたはドメインを入力します。E メールをブロックしたい E メールアドレスまたはドメインを入力しないでください。例えば、Amazon SES ID が E メールアドレス「JaneRoe@example.net」を使用して、「example.com」からの E メールをブロックする場合は、「JaneRoe@example.net」と入力します。

7.    [Next Step] を選択します。

8.    [Actions] の [Add action] で、Lambda を選択します。次に、以下のフィールドに入力します。
[Lambda function] で、作成した関数を選択します。
[Invocation type] で、RequestResponse を選択します。
(オプション)ユースケースの必要に応じて SNS トピックを設定します。または、このフィールドを空白のままにすることもできます。このフィールドの詳細については、Lambda アクションを参照してください。

9.    [Next Step] を選択します。

10.    [Rule Details] で、以下のフィールドに入力します。
[ルール名] に、ルールの名前を入力します。
[Enabled (有効)] で、ルールがアクティブなルールとして作成されるように、このチェックボックスが選択されていることを確認してください。
(オプション) ユースケースの必要性に応じて、[Require TLS (TLS が必要)] または [Enable spam and virus scanning (スパムとウイルスのスキャンを実行する)] を選択します。
[Rule set (ルールセット)] で、アクティブなルールセットが選択されていることを確認します。アクティブなルールセットは、名前に (Active) が含まれています。
[Insert after rule (次のルールの後に挿入)] リストで、ルールセット内でルールに使用する位置を選択します。

11.    [Next Step] を選択します。

12.    [Create Rule] (ルールの作成) を選択します。

注意: [Missing Permissions] ダイアログボックスに「 SES was unable to access the resource [your Lambda function]」というメッセージが表示された場合、Amazon SES にはその関数に対するアクセス許可が必要です。[Add permissions] を選択して、必要なアクセス許可を設定できます。

関数の Amazon 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: $LATEST
14: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 の開始方法

受信ルールを使用した受信者ベースのコントロール