Amazon SES で特定のドメインまたは E メールアドレスからの E メールをブロックする方法を教えてください。

最終更新日: 2019 年 9 月 4 日

Amazon Simple Email Service (Amazon SES) の ID が特定のドメインまたは E メールアドレスからの E メールを受信することを望みません。これらの E メールをブロックするにはどうすればよいですか? 

簡単な説明

特定のドメインまたは E メールアドレスが Amazon SES の ID に 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.    [Environment variables] の [Key] に「blockingList」と入力します。

注意: セットの合計サイズが 4 KB を超えない限り、作成できる環境変数の数に制限はありません。詳細については、環境変数の命名規則を参照してください。

12.    「blockingList」の Value に、ブロックする E メールアドレスとドメインのカンマ区切りリストを入力します。たとえば、「example.com, JohnDoe@example.com」と入力します。

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

13.    [Save] を選択します。

Amazon SES 受信ルールの作成

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

2.    ナビゲーションペインの [E メール受信] で、 [ルールセット] を選択します。

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

注意 : 新しいルールセットを作成する場合は、必ずルールセットを選択し、 アクティブなルールセットの表示を選択します。

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] で、以下のフィールドに入力します。
[Rule name] に、ルールの名前を入力します。
[Enabled] で、ルールがアクティブルールとして作成されるように、このチェックボックスがオンになっていることを確認します。
(オプション)ユースケースで必要な場合は、[Require 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.    ナビゲーション ペインで、[Logs] を選択します。

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

この記事は役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合