年三日坊主のKKです。
二段階認証や本人確認の手段として携帯電話にSMS(ショートメール)で送った認証コードを入力させる手法はすっかり定着しましたね。
このSMSをAWSのEC2から電子メールのようにサクッと送信する方法についてご紹介します。
なお、いきなりSMS送信設定をすることはできません。
まずはサンドボックス環境を設定して送信テストを行います。
1.サンドボックスの送信先電話番号(テスト用携帯電話番号)登録
Amazon SNS > テキストメッセージング (SMS)
「サンドボックスの送信先電話番号」で「電話番号を追加」ボタンをクリック。

電話番号:E.164形式で指定
例えば日本国内の電話番号090-1234-5678に送信したい場合は
最初の0を日本の国際電話コード+81に置き換えた +81 90 1234 5678 を指定します。

右下の「電話番号を追加」ボタンをクリックすると、検証コードの入力画面に遷移する。

先ほど指定した電話番号に検証メッセージのSMSが通知されるのでこれを入力する。
複数のテスト用携帯電話番号を登録したい場合は上記手順を繰り返し実施する。
(最大10個まで登録できるっぽい)
2.発信元IDを作成(任意)
発信元IDを登録しないとSMSの受信者からは送信元が「NOTICE」と表示されます。
(先の「サンドボックスの送信先電話番号」登録で検証メッセージの送信元がNOTICEになっていましたよね)
SMSの受信者から見た送信者情報の表記として、日本では
- 送信者ID(Sender IDs):送信者を識別する英数字名(英数字とハイフンで最長11文字)
- ロングコード:受取人が居住する国または地域の番号形式を使用する11桁の電話番号
- ショートコード:5~6桁の通常の電話番号よりも短い数字列
等を選択できますが、わかりやすい送信者ID(Sender IDs)を設定しておくことをおすすめします。
2-1. 送信者 ID登録画面に遷移
Amazon SNS > テキストメッセージング (SMS)
「モバイルテキストメッセージング (SMS)」で「発信元 ID」ボタンをクリックすると
AWS End User Messaging > SMS > 電話番号 に遷移します。
AWS End User Messaging > SMS > 設定 > 送信者 ID に移動。
2-2.送信者 IDを登録
「リクエスト発信者」ボタンをクリック。
ステップ1:国を選択
「メッセージ送信先の国」で「Japan」を入力して「Japan (JP)」を選択
ステップ2:ユースケースを定義
・電話番号:テキストメッセージ(SMS)
・1 か月あたりの推定メッセージ量 - オプション:5000件未満
・会社の本社:ローカル
・双方向SMSメッセージング:いいえ
ステップ3:発信者タイプを選択
・発信者タイプ:送信者ID
・送信者ID:<任意の送信者IDを指定>
上記以外はデフォルトのまま
ステップ4:確認とリクエスト
内容を確認し問題無ければ、右下の「リクエスト」ボタンをクリック
複数の送信者IDを登録したい場合は上記手順を繰り返し実施する。
3.IAMロールの設定
EC2インスタンス上から認証無しでAWS CLIからSMSを送信するため、EC2用IAMロールを作成またはポリシー追加する。
IAMロール名:(任意)
→ロールが無い場合はユースケースでEC2を選び、許可ポリシー無しで一旦ロールを作成します。
EC2にIAM ロールが適用されている場合はそのロールに、作成した場合は作成したロールに以下のインラインポリシーを追加する。
ポリシー:EC2SnsPublish インラインポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "sns:Publish",
"Resource": "*"
}
]
}
EC2インスタンスに上記のロールをIAMロールに設定する。
4.AWS CLI のインストール
以下のAWS公式ドキュメントに従ってAWS CLIをインストールします。
・AWS CLI の最新バージョンのインストールまたは更新
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html
5.AWS CLIからSMSテキストメッセージを送信
これでEC2上のAWS CLIからSMSを送信できるようになりました。
コマンド(発信者IDの有無で引数が変わります)
aws sns publish --phone-number +81-90-0000-0000 --message "メッセージ本文"
aws sns publish --phone-number +81-90-0000-0000 --message "メッセージ本文" --message-attributes '{"AWS.SNS.SMS.SenderID":{"DataType":"String","StringValue":"発信者ID"}}'
SMSを送信するAWS CLIのコマンドリファレンスは以下を参照してください。
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/publish.html
以上でサンドボックス環境から事前に登録した「サンドボックスの送信先電話番号」に対してSMS送信テストが行えるようになりました。
このままでは任意の電話番号に対してSMSを送ることはできませんが、最低限のテストは可能です。
SMS送信を行うアプリケーションが形になったら、サンドボックスを終了して実運用に移行しましょう。
6.SMS サンドボックス終了申請
以下のAWS公式ドキュメントに従って申請し、サンドボックスの終了が認められれば、任意の電話番号に対してSMSを送信可能となります。
・Amazon SNS SMS サンドボックス外への移動
https://docs.aws.amazon.com/ja_jp/sns/latest/dg/sns-sms-sandbox-moving-to-production.html
※SESなどと同様、審査があるため申請内容によっては許可されないこともある点についてはご留意下さい。
なお、表示される内容は利用状況やAWSの仕様変更ににより変化しますのでご注意ください。