AWS Lambda を使用して Amazon WorkMail でメールフローを制御する

Amazon WorkMailは、Eメールのフロールールを使用するときに AWS Lambda 関数を使用して組織のメールフローを制御できるようになりました。

*Amazon WorkMailはまだ東京リージョンではサポートされていません
以下のリージョンのみでサポートされています。
米国東部 (バージニア北部)
欧州 (アイルランド)
米国西部 (オレゴン)

メリット

  • 完全にカスタマイズ可能な条件で強力なメールフロー制御システムを構築できる
  • Lambdaを簡単に作成し特定の種類の受信または送信メールをブロックできる
  • 送受信メールに受信者を追加、削除が可能になる

Amazon WorkMailでのLambdaアクションの構成

  • 同期実行Lambda構成
    フロールールに一致するメールメッセージは、送信または配信される前に処理のためにLambda関数に渡される
    機密メールの配信のブロックなどのユースケースの受信または送信メールフローを制御する

  • 非同期実行Lambda構成
    フロールールに一致するメールメッセージは、送信または配信されている間に処理のためにLambda関数に渡される
    メール配信に影響を与えず、受信または送信メールメッセージのメトリックの収集に使用される

Lambda関数の作成

AWS Lambdaコンソールを使用して、Lambda関数を作成し、Eメールフローを制御します。

サンプルのLambda関数をAWSサーバーレスアプリケーションリポジトリからアカウントにデプロイします。

Amazon WorkMailで使用する独自のLambda関数を作成する場合は、AWS CLIを使用してアクセス許可を設定する必要があります。

aws --region REGION lambda add-permission --function-name MY_FUNCTION_NAME --statement-id AllowWorkMail --action "lambda:InvokeFunction" --principal workmail.REGION.amazonaws.com

MY_FUNCTION_NAMEをLambda関数の名前に置き換え、REGIONをAmazon WorkMailリージョンに置き換えます。

ラムダイベントデータ

Lambda関数は、次のイベントデータを使用してトリガーされます。

    "summaryVersion": "2018-10-10",
    "envelope": {
        "mailFrom" : {
            "address" : "from@example.com"
        },
        "recipients" : [
           { "address" : "recipient1@example.com" },
           { "address" : "recipient2@example.com" }
        ]
    },
    "sender" : {
        "address" :  "sender@example.com"
    },
    "subject" : "Hello From Amazon WorkMail!",
    "messageId": "00000000-0000-0000-0000-000000000000",
    "invocationId": "00000000000000000000000000000000",
    "flowDirection": "INBOUND",
    "truncated": false
}


同期実行Lambda応答スキーマ

同期のLambda実行アクションを含むEメールフロールールがEメールメッセージと一致する場合、Amazon WorkMailは設定されたLambda関数を呼び出し、応答を待ってからEメールメッセージでアクションを実行します。
Lambda関数は、アクション、アクションタイプ、適用可能なパラメーター、およびアクションが適用される受信者を,事前定義されたスキーマに従って応答を返します。

以下はメールメッセージから受信者を削除する例です

{
    'actions': [{
      'action' : {'type': 'DEFAULT'},
      'allRecipients': True
    },
    {
      'action' : {'type': 'DROP'},
      'recipients' : ['drop-recipient@example.com']
    }]
}

Lambda関数を作成するときに使用するその他のコード例はAmazon WorkMail Lambdaテンプレートにあります。

参考  Configuring AWS Lambda for Amazon WorkMail