OCI(Oracle Cloud Infrastructure)のEmail Delivery Serviceはメール配信サービスであり、メールを受信することはありません。
ただ、メール配信依頼はSMTPプロトコルで受け取ることができるため、この受け取り窓口がパブリック・ネットワーク(以下「インターネット」)に開いていることを制限できないかという相談を受けました。
仕組み的には、ネットワーク・ソースを利用すればできそうだったので、試してみた内容を記載します。
1.検証環境
Email Delivery Serviceの構築は、OCIチュートリアルにしたがって構築しています。
OCI上にメール配信依頼を行うComputeを2種類立てました。
1つはPublic Subnetに配置し、メール配信依頼はインターネットを経由します。
Public Subnetのルート表は以下のとおり、Internet Gatewayを向いています。
もう1つはPrivate Subnetに配置し、メール配信依頼はクラウド内部ネットワークを利用します。
Private Subnetのルート表は以下のとおり、Service Gatewayを向いています。
この状態(ネットワーク限定なし)で、OCIチュートリアルにしたがって、メール配信依頼を出すと、Public SubnetおよびPrivate Subnetに配置したどちらのComputeからもメールを配信することができます。
Public Subnetに配置したComputeからのメール配信
[opc@developer ~]$ echo "Test Mail from public network" | mailx -s "Public NW" xxxxxxxx@yyyyyy.com
Private Subnetに配置したComputeからのメール配信
[opc@developer-private ~]$ echo "Test Mail from private network" | mailx -s "Private NW" xxxxxxxx@yyyyyy.com
2.メール配信依頼をクラウド内部ネットワークに限定
ネットワーク・ソースを利用して、Email Delivery Serviceへのメール配信依頼をVCN(のPrivate IP)からの依頼に限定します。
2-1.ネットワーク・ソースの作成
左上三本線メニューより、「アイデンティティとセキュリティ」を選択し、「ネットワーク。ソース」を選びます。
[ネットワーク・ソースの作成]ボタンを押し、以下の設定を行います。
名前:任意(今回は「Email_delivery_limitation」とします)
説明:任意
ネットワーク:仮想クラウド・ネットワーク
VCNの選択:メール配信依頼を許可するVCN
2-2.ポリシーの設定
SMTP資格証明を取得したユーザーの所属するグループに対して、上記のネットワーク・ソースからのリクエストのみを受け付けるように、ポリシー構文に以下の条件句を設定します。
where request.networkSource.name='Email_delivery_limitation'
今回の場合は、ユーザーの所属するグループ(email_sender)に対して、「use email-family」権限を条件付きで付与します。
allow group email_sender to use email-family in tenancy where request.networkSource.name='Email_delivery_limitation'
※スコープ「in tenancy」は必要に応じて「in compartment コンパートメント名」などに変更してください)
2-3.Public Subnetに配置したComputeからのメール配信
前回と同じmailxコマンドを投げると、以下のとおりエラーが返ります。
[opc@developer ~]$ echo "Test Mail from public network" | mailx -s "Public NW" xxxxxxxx@yyyyyy.com
[opc@developer ~]$ smtp-server: 535 Authorization failed: Envelope From address <xxxxxxxx@yyyyyy.com> not authorized
"/home/opc/dead.letter" 11/342
. . . message not sent.
当然ながら、メールは届きません。
2-4.Private Subnetに配置したComputeからのメール配信
同様にmailxコマンドを投げます。
[opc@developer-private ~]$ echo "Test Mail from private network" | mailx -s "Private NW" xxxxxxxx@yyyyyy.com
こちらはエラーもなく、正常にメールが届きました。