AWSのSNSを使用してスマートフォンにSMSメッセージを送信しようとしたところ、SenderID(送信者ID)が電話番号になる場合がありました。
なお、SenderID(送信者ID)とは以下のようにSMSが誰から送信されたものかを示しているものです。
今回、SenderID(送信者ID)にTest1とかTest2を指定しているにもかかわらず、まれに謎の電話番号(+81 50 5526 1813)から届いています。
事象の再現のしかたと対策を書いていきます。
前提 SNSサンドボックス解除済みであること
SNS(Simple Notification Service)のSMS送信に関するサンドボックスは解除していました。最初はサンドボックスになっています。
解除しない場合、SMS送信先であるスマホの電話番号をサンドボックスの送信先電話番号に登録しておきましょう。
事象 SMSを送る際SenderIDが機能しないことがある
SenderIDを指定しているにもかかわらず、たまに謎の電話番号(+81 50 5526 1813)から送信されました。
以下のpythonコードで10回連続で送信するプログラムを組んで実行してみたところ、10回中7回程度がTest1で届き、3回程度が電話番号(+81 50 5526 1813)から届きました。
事象の再現に使用したプログラムは以下の通りです。
import boto3
for i in range(1, 11):
client = boto3.client('sns')
response = client.publish(
PhoneNumber='+818092088519',
Message='test message' + str(i),
MessageAttributes={
'AWS.SNS.SMS.SenderID': {
'DataType': 'String',
'StringValue': 'Test1',
},
},
)
print(response)
SMSメッセージの送信にはboto3のSNS.Client.publishを使用しています。
なお、SenderIDは以下の公式ドキュメントに記載があるものを指定しました。
対策
まず、SMSメッセージ送信についてはAWSの管理範囲外のため、完全な対策は不可能であるようです。そのため、AWS内での根本的な対策は難しいようです。
対策1(回避策) 連続送信を避ける
根本的な回避策ではありませんが、送信の間隔をあけた場合、SenderID(送信者ID)が表示されることが多いように感じました。
SMSを利用してワンタイムパスワードなどを送信するAPI等を作成する場合、連打されないような制御を入れておくと良いかと思います。
対策2(代替策) ショートコードを利用する
SenderID(送信者ID)を利用することはできませんが、SMSショートコードの利用を検討する価値があるかもしれません。
SMSのショートコードとは、通常5桁から6桁の短い番号のことを指し、テキストメッセージを通じて企業やサービスと簡単にコミュニケーションを取るために使用されます。メッセージの受信も可能です。
ショートコードはSenderID(送信者ID)とは違い、厳密に審査されてから払い出されるため、信頼性が高いです。AWS SNSでショートコードを利用するにはサポートケースから申請することができます。
ただし、ショートコード発行を行う場合は追加料金がかかります。日本だとセットアップ料金 (1 回限りの料金)1,750 USD、月額料金1,150 USDがかかります。安くない料金です。
国 | セットアップ料金 (1 回限りの料金) | 月額料金 | 推定プロビジョニング時間 ** |
米国 | 650 USD | 995 USD | 12 週間 |
カナダ | 3,000 USD | 995 USD | 16 週間 |
英国 | 0 USD | 1,500 USD | 16 週間 |
日本 | 1,750 USD | 1,150 USD | 12 週間 |
インド * | 150 USD | 300 USD | 3 週間 |
中国 | 15 USD | 15 USD | 3 週間 |
ブラジル | 330ドル | 330ドル | 4 週間 |
また、ショートコードの払い出しには8〜12 週間のリードタイムがかかるとのことです。
すべての通信事業者ネットワークで、ショートコードを有効にするには、8〜12 週間かかります。別の国やリージョンの料金とプロビジョニング時間を確認するには、「Amazon SNS による SMS メッセージングの専用ショートコードをリクエストする」で説明されている手順を実行します。
https://docs.aws.amazon.com/ja_jp/sns/latest/dg/channels-sms-originating-identities-short-codes.html
まとめ
- 問題点: AWS SNSを使用してSMSを送信する際、指定したSenderIDが正しく表示されず、代わりに電話番号が表示されることがある。
- 再現方法: 10回連続でSMSを送信すると、7回は正しいSenderIDが表示され、3回は電話番号が表示される。
-
対策:
- 対策1(回避策): 連続送信を避けることでSenderIDが正しく表示される可能性が高まる。特にワンタイムパスワード送信APIなどでは、連打防止の制御を取り入れることが有効。
- 対策2(代替策): ショートコードを利用する。ショートコードは信頼性が高く、SenderIDの問題を回避できる。ただし、セットアップ料金や月額料金が発生し、発行には8〜12週間のリードタイムが必要。
完全な解決は難しいものの、連続送信を避けることである程度の回避が可能です。また、コストやリードタイムを考慮した上で、ショートコードの利用も検討すると良いでしょう。
システムエンジニア
AWSを中心としたクラウド案件に携わっています。
IoTシステムのバックエンド開発、Datadogを用いた監視開発など経験があります。
IT資格マニアでいろいろ取得しています。
AWS認定:SAP, DOP, SAA, DVA, SOA, CLF
Azure認定:AZ-104, AZ-300
ITIL Foundation
Oracle Master Bronze (DBA)
Oracle Master Silver (SQL)
Oracle Java Silver SE
■略歴
理系の大学院を卒業
IT企業に就職
AWSのシステム導入のプロジェクトを担当