🌟

Amazon SNSで携帯電話へのSMS送信だけを許可するためのIAM Policy

2022/03/14に公開

概要

通常特定の権限だけを許可したい場合

  • あるアクションを
  • あるリソース(ARN)に対してのみ

許可します。というIAM Policyを書くことで実現できます。

しかし

  • AWS SNSのSMS送信のアクションはsns:Publish
  • リソースの指定はできない(携帯電話番号に対するARNがないため)
  • sns:Publishはトピックに対する発信も行える

ため。

policy.json
 {
     "Version": "2012-10-17",
     "Statement": [
         {
             "Effect": "Allow",
             "Action": [
                 "sns:Publish"
             ],
             "Resource": "*"
         }
     ]
 }

このようなポリシーを書くと、

  • 携帯電話番号に対するSMS送信
  • トピック(メールとか諸々含む)に対する実行

のどちらも許可してしまいます。

この記事では携帯電話に対するSMS送信だけを許可する方法について解説します

結論

policy.json
 {
     "Version": "2012-10-17",
     "Statement": [
         {
             "Effect": "Allow",
             "Action": [
                 "sns:Publish"
             ],
             "NotResource": "arn:aws:sns:*:*:*"
         }
     ]
 }

参考: https://stackoverflow.com/questions/51086779/iam-policy-allowing-sms-publishing-but-not-denying-all-sns

このように「リソース名を指定していないsns:Publish」のみを許可することで実現可能です。

他の方法

policy.json
 {
     "Version": "2012-10-17",
     "Statement": [
         {
             "Effect": "Deny",
             "Action": [
                 "sns:Publish"
             ],
             "Resource": "arn:aws:sns:*:*:*"
         },
         {
             "Effect": "Allow",
             "Action": [
                 "sns:Publish"
             ],
             "Resource": "*"
         }
     ]
 }

参考: https://stackoverflow.com/questions/38871201/authorization-when-sending-a-text-message-using-amazonsnsclient

こちらの方法もありましたが、トピックに対する権限が全て拒否されてしまうので採用しませんでした。

Discussion