Help us understand the problem. What is going on with this article?

Amazon SESで送信元と宛先の制限をかけてみたメモ

More than 1 year has passed since last update.

調べたり試したりしてみたので、メモ的な。

制限するには

 もともとSESにはサンドボックスモードと言って制限がかかった状態でサービスが利用可能になる。
  参照:http://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/limits.html
 その制限をわざわざ解除申請を出して自由に利用できるようにする。

 けど、自由すぎても困って、という話。

 SESを利用する際には、SES用のIAMユーザーを払い出して利用します。
 そのIAMユーザーのポリシーを利用して幾つかの制限ができるようです。
  参照:http://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/control-user-access.html

設定

送信元制限

 特に問題なくできてしまったので、その時のポリシー例を。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1507889923000",
            "Effect": "Allow",
            "Action": [
                "ses:SendEmail",
                "ses:SendRawEmail"
            ],
            "Condition": {
                "StringLike": {
                    "ses:FromAddress": [
                        "*@example.com"
                    ]
                }
            },
            "Resource": [
                "*"
            ]
        }
    ]
}

 これで「なんちゃら@example.com」が送信元の場合に限り、IAMはSESの認証をできるようにしてくれます。
 例えば「なんちゃら@jp.xxxx.com」とかが送信元になった場合に、554 Access deniedしちゃいます。
 これが送信元制限の簡単なやり方。

送信先(宛先)制限

 送信元制限のノリで作業したらはまったので、このメモを残すことになった。
 先に参照として出したドキュメントに、「ses:Recipients」使ったらできるで、と書いてあったので、間に受けて設定してたんですが
 それが間違いでした。
 とりあえず、うまくいった例

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ses:SendEmail",
                "ses:SendRawEmail"
            ],
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringLike": {
                    "ses:Recipients": [
                        "*@example.com"
                    ]
                }
            }
        }
    ]
}

 この設定で、「*@example.com」以外にメールが送信できなくなり、先ほどの送信元制限と同様に554エラーが発行されます。
 何にはまったかというと、"ForAnyValue:StringLike" この項目。

 送信元制限の際は、「"StringLike"」でいけるんですが、サポートにお聞きしたところ、ses:Recipientsは複数の項目にまたがり値があるので
 "ForAllValues:StringLike"
 を使ってな、と。
 ドキュメントにも例でのせてるで、ってなことなので、やったんですがダメでした。
 曰く

注記
キーに複数の値が含まれる場合、設定演算子(ForAllValues:StringLike および ForAnyValue:StringLike)を使用して StringLike を修飾できます。

 なので、ダメ元で ForAnyValue:StringLike を使ったらいけたという。
 実はAllとAnyの利用の違いについては調べ切れてないんですが、やりたいことができたということなので、これにて。

両方制限したい欲張りなあなたへ

 以下の設定で実現できてます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ses:SendEmail",
                "ses:SendRawEmail"
            ],
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringLike": {
                    "ses:Recipients": [
                        "宛先アドレス"
                    ],
                    "ses:FromAddress": [
                        "送信元アドレス"
                    ]
                }
            }
        }
    ]
}

 アドレスを指定する場合はLikeじゃなくてEqualesでもいいかもしれませんね。

kumeneko
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした