Amazon SES に対する E メール受信に関するアクセス許可の付与
Amazon Simple Storage Service (Amazon S3) バケットへの E メールの送信や AWS Lambda 関数の呼び出しなど、SES で E メールを受信する際に実行できるタスクには、特別なアクセス許可が必要となります。このセクションには、いくつかの一般的なユースケースのサンプルポリシーを含みます。
このセクションのトピック:
S3 バケットへの配信アクションの IAM ロールのアクセス許可の設定
この IAM ロールには、以下の点が適用されます。
-
これは、S3 バケットアクションへの配信 用にのみ使用可能です。
-
SES E メールの受信 が利用できないリージョンに配置されている S3 バケットに書き込む場合は、これを使用する必要があります。
S3 バケットに書き込みを行う場合は、S3 バケットアクションへの配信 の関連リソースにアクセスするアクセス許可を IAM ロールに付与できます。また、次のセクションで説明するとおり、IAM 信頼ポリシーを介してアクションを実行するには、そのロールを引き受けるアクセス許可も SES に付与する必要があります。
このアクセス許可ポリシーは、IAM ロールのインラインポリシーエディタに貼り付ける必要があります。「S3 バケットアクションへの配信」を参照して、IAM role 項目に記載されているステップに従ってください。(次の例には、SNS トピック通知や S3 アクションのカスタマーマネージドキーを使用する場合のオプションのアクセス許可も含まれています)。
注記
-
「S3 バケットへの書き込みアクセス許可を SES に付与する」に示すように、S3 バケットポリシーで SES サービスのみを許可することで、IAM ロールを指定せずに S3 アクションを設定するオプションがあります。これは、クロスアカウントシナリオでも機能します。
-
S3 アクションに IAM ロールを指定すると、SES はそのロールを PutObject オペレーションに対して引き受けます。ここで指定した IAM アクセス許可は、同じアカウントの使用に十分なものです。ただし、クロスアカウントを使用する場合は、バケット内の PutObject に対して IAM ロールを許可する追加のバケットポリシーが必要です。これは、「バケット所有者がクロスアカウントバケットのアクセス許可を付与する」で説明されているように、クロスアカウントバケットのアクセス許可を付与するバケット所有者によって指定されます。
上のポリシー例に、以下の変更を加えます。
-
amzn-s3-demo-bucketは、書き込み先の S3 バケット名に置き換えます。 -
regionは、受信ルールを作成した AWS リージョンに置き換えます。 -
111122223333を自分の AWS アカウント ID に置き換えます。 -
my-topicは、通知の発行先の SNS トピック名に置き換えます。 -
key-idは、KMS キーの ID に置き換えます。
S3 アクションの IAM ロールの信頼ポリシー
このロールを SES が引き受けることができるように、次の信頼ポリシーを IAM ロールの信頼関係に追加する必要があります。
注記
この信頼ポリシーを手動で追加する必要があるのは、S3 バケットアクションへの配信 ワークフローの IAM role 項目で指定されたステップを使用して SES コンソールから IAM ロールを作成しなかった場合のみです。コンソールから IAM ロールを作成する場合、この信頼ポリシーは自動的に生成されてロールに適用されるため、このステップは不要になります。
上のポリシー例に、以下の変更を加えます。
-
regionは、受信ルールを作成した AWS リージョンに置き換えます。 -
111122223333を自分の AWS アカウント ID に置き換えます。 -
Amazon S3 バケットアクションへの配信を含むレシピルールを含むルールセットの名前で
rule_set_nameの部分を置き換えます。 -
Amazon S3 バケットアクションへの配信を含むレシピルールの名前で
receipt_rule_nameの部分を置き換えます。
S3 バケットへの書き込みアクセス許可を SES に付与する
次のポリシーを S3 バケットに適用すると、SES E メール受信が利用可能なリージョンに存在する限り、このバケットへの書き込みアクセス許可が SES に付与されます。E メール受信リージョン外のバケットに書き込む場合は、「S3 バケットへの配信アクションの IAM ロールのアクセス許可の設定」を参照してください。入力メールを Amazon S3 に転送する受信ルールを作成することに関する詳細については、「S3 バケットアクションへの配信」を参照してください。
S3 バケットの添付ポリシーの詳細については、Amazon Simple Storage Service ユーザーガイド の「バケットポリシーとユーザーポリシーの使用 」を参照してください。
上のポリシー例に、以下の変更を加えます。
-
amzn-s3-demo-bucketは、書き込み先の S3 バケット名に置き換えます。 -
regionは、受信ルールを作成した AWS リージョンに置き換えます。 -
111122223333を自分の AWS アカウント ID に置き換えます。 -
Amazon S3 バケットアクションへの配信を含むレシピルールを含むルールセットの名前で
rule_set_nameの部分を置き換えます。 -
Amazon S3 バケットアクションへの配信を含むレシピルールの名前で
receipt_rule_nameの部分を置き換えます。
AWS KMS キーを使用するアクセス許可を SES に付与する
SES で E メールを暗号化するためには、受信ルールの設定時に指定した AWS KMS キーを使用するためのアクセス許可を SES に付与する必要があります。ご使用のアカウントのデフォルトKMSキー (aws/ses ) を使用するか、ご自身で作成するカスタマー管理のキーを使用することができます。デフォルトの KMS キーを使用する場合、キーの使用についての SES へのアクセス許可の付与に関する追加のステップを実行する必要はありません。カスタマーマネージドキーを使用する場合は、キーのポリシーにステートメントを追加して、キー使用のアクセス許可を SES に付与する必要があります。
SES がドメインで E メールを受信する際にカスタマーマネージドキーを使用できるように、次のポリシーステートメントをキーポリシーとして使用します。
{ "Sid": "AllowSESToEncryptMessagesBelongingToThisAccount", "Effect": "Allow", "Principal": { "Service":"ses.amazonaws.com" }, "Action": [ "kms:GenerateDataKey*" ], "Resource": "*", "Condition":{ "StringEquals":{ "AWS:SourceAccount":"111122223333", "AWS:SourceArn": "arn:aws:ses:region:111122223333:receipt-rule-set/rule_set_name:receipt-rule/receipt_rule_name" } } }
上のポリシー例に、以下の変更を加えます。
-
regionは、受信ルールを作成した AWS リージョンに置き換えます。 -
111122223333を自分の AWS アカウント ID に置き換えます。 -
E メール受信に関連付けたレシピルールを含むルールセットの名前で
rule_set_nameの部分を置き換えます。 -
E メール受信に関連付けたレシピルールの名前で
rule_set_nameの部分を置き換えます。
AWS KMS を使用して、サーバー側の暗号化が有効になっている状態で暗号化されたメッセージを S3 バケットに送信するには、ポリシーアクション "kms:Decrypt" を追加する必要があります。前の例を使用してこのアクションをポリシーに追加すると、次のように表示されます。
{ "Sid": "AllowSESToEncryptMessagesBelongingToThisAccount", "Effect": "Allow", "Principal": { "Service":"ses.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey*" ], "Resource": "*", "Condition":{ "StringEquals":{ "AWS:SourceAccount":"111122223333", "AWS:SourceArn": "arn:aws:ses:region:111122223333:receipt-rule-set/rule_set_name:receipt-rule/receipt_rule_name" } } }
AWS KMS キーの添付ポリシーの詳細については、 AWS KMSデベロッパーガイドの「AWS Key Management Service のキーポリシーの使用」を参照してください。
AWS Lambda 関数を呼び出すアクセス許可を SES に付与する
SES が AWS Lambda 関数を呼び出せるようにするには、SES コンソールで受信ルールを作成する際に、該当する関数を選択します。これにより、SES は自動的に必要なアクセス許可を関数に追加します。
または、AddPermission API の AWS Lambda オペレーションを使用して、関数へのポリシーをアタッチします。次の AddPermission API コールでは、Lambda 関数を呼び出すアクセス許可を SES に付与しています。Lambda 関数へのポリシーの添付に関する詳細については、AWS Lambda デベロッパーガイドの「AWS Lambda のアクセス許可」を参照ください。
{ "Action": "lambda:InvokeFunction", "Principal": "ses.amazonaws.com", "SourceAccount": "111122223333", "SourceArn": "arn:aws:ses:region:111122223333:receipt-rule-set/rule_set_name:receipt-rule/receipt_rule_name", "StatementId": "GiveSESPermissionToInvokeFunction" }
上のポリシー例に、以下の変更を加えます。
-
regionは、受信ルールを作成した AWS リージョンに置き換えます。 -
111122223333を自分の AWS アカウント ID に置き換えます。 -
rule_set_nameは、Lambda 関数を作成した受信ルールを含むルールセットの名前に置き換えます。 -
receipt_rule_nameは、Lambda 関数を含む受信ルールの名前に置き換えます。
さまざまな AWS アカウントに属する Amazon SNS トピックに発行するためのアクセス許可を SES に付与する
別の AWS アカウントのトピックに通知を公開する場合は、Amazon SNS のトピックにポリシーをアタッチする必要があります。SNS トピックは、ドメインおよび受信ルールセットと、同じリージョンに存在する必要があります。
次のポリシーは、さまざまな AWS アカウントの Amazon SNS トピックに発行するためのアクセス許可を SES に付与します。
上のポリシー例に、以下の変更を加えます。
-
topic_regionは、とAmazon SNS トピックが作成された AWS リージョン に置き換えます。 -
sns_topic_account_idは、Amazon SNS トピックを所有する AWS アカウント の ID に置き換えます。 -
topic_nameは、通知の発行先となる Amazon SNS トピックの名前に置き換えます。 -
aws_account_idは、E メールを受信するように設定した AWS アカウント のID に置き換えます。 -
receipt_regionは、受信ルールを作成した AWS リージョン に置き換えます。 -
rule_set_nameは、Amazon SNS トピックへの発行アクションを作成した受信ルールを含む、ルールセットの名前に置き換えます。 -
receipt_rule_nameは、Amazon SNS トピックへの発行アクションを含む受信ルールの名前に置き換えます。
Amazon SNS トピックでサーバー側の暗号化に AWS KMS を使用する場合は、AWS KMS キーポリシーに許可を追加する必要があります。アクセス権限を追加するには、次のポリシーをAWS KMSキーポリシーにアタッチします。