米国向けサービスで多要素認証しようとしたら、申請作業が大変だった

# はじめに

米国向けサービスを構築中に多要素認証を設定しようとしたら、想像もしていなかった手続きがいくつかあったので、それらの手続の概要とざっくりかかる日数をまとめました。

この記事を見ることで、これから新規で海外向けにサービス展開するぜ、多要素認証は必須だよね！って方が少しでも助かればいいなと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19911/047b8eb5-1882-f1c1-78a1-3b9c15e8dbe0.png)


# 対象読者
- 米国向けに多要素認証を行うサービスを展開しようとしており、AWSでリソースを構築しようとしている方
    - Cognitoという認証・認可機能を提供するサービスを知っている方
- 検証していない技術に対して、見積もりの甘さに対する教訓を知りたい方

## 前提

- 新規サービス
- 利用者の属する国：米国
- 利用するPaaS：AWS
- 利用する認証・認可機能を提供するサービス：Cognito
- 利用するRegion：us-east-2

## リソース構築前の見通し

- Cognitoはこれまで数回構築した実績がある
- us-east-2　regionに立てるのは初めてだけど、特に大きな違いはない**だろう**
- 多要素認証を設定するのも初めてだけど、Cognitoを利用するのだし技術的難易度は高くない**だろう**
- Cognitoは枯れてきた技術、公式ドキュメントも豊富にあり、検証記事も世に溢れているので大きく躓きはしない**だろう**

結論だけ先に述べると、この考えは甘すぎました。セブンイレブンでうっかりブラックサンダーのアイスを名前が懐かしくて買ったけど、予想以上の甘さに驚いた時以上に甘かったです。

## リソース構築中に判明した事実

CognitoのUserPoolを作成し、いざ多要素認証でSMS認証を設定しようとしたら、コンソールで以下の注意書きが....
![スクリーンショット 2022-06-17 7.00.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19911/1c9affbb-1efe-e341-10df-fe8e4b0a7920.png)
コンソールに表示された[リンク先](https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/user-pool-sms-settings.html
)では、いくつかのAWSに対する申請が必要とありましたが、AWSのコンソール作業で完結するものばかりで、問題なく作業ができそうと思っていたところ、気になる文字列が...

> ステップ 2: 米国の電話番号に SMS メッセージを送信するための発信元 ID を取得する
> 米国の電話番号に SMS テキストメッセージを送信する場合は、SMS サンドボックステスト環境または本番環境を構築するかどうかにかかわらず、発信元 ID を取得する必要があります。
> 米国の通信事業者は 2021 年 6 月 1 日付けで、米国の電話番号へのメッセージの送信に発信元 ID を義務付けました。発信元 ID をまだ取得していない場合は、取得する必要があります。

日本向けのサービスなら読み飛ばす部分ですが、今回はがっつり当てはまる部分だったので、**発信元IDの取得が必要**ということが判明しました。

### 発信元IDを取得する、の前に

発信元IDを調査するにあたり、AWSの公式ドキュメントを日本語で読むと、**発信元ID**と**送信元アイデンティティ**の表記が混在している状態でした。
英文でみると、*origination identity* / *origination identities*のどちらかで表記されているので、同じ意味のものだと理解し、以下からは公式ドキュメントで出現頻度が高かった**送信元アイデンティティ**に表記を統一します。

## 送信元アイデンティティの取得にむけて

送信元アイデンティティの取得が必要とわかったものの、送信元アイデンティティに対する知識がない状態だったので、まずは調査をするところからスタートしました。

### Q. 送信元アイデンティティって？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19911/ce77d5fa-ca48-091c-2cef-e14cb2fcfd92.png)

**A. SMSのメッセージを受け取る側が、送信者を識別するID**
https://docs.aws.amazon.com/ja_jp/sns/latest/dg/channels-sms-originating-identities.html

米国では、SMSメッセージを送る際には、昨年から送信元アイデンティティが必須となったようです。

### Q. 送信元アイデンティティには色々種類がある？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19911/6dc5459e-7615-a085-3cf3-982b9bec68bb.png)

**A. 送信元アイデンティティには複数の種類があり、利用する地域やユースケースに合わせて適切なものを選ぶ必要がある**
https://docs.aws.amazon.com/ja_jp/sns/latest/dg/channels-sms-originating-identities.html

送信元アイデンティティと言っても、気軽に取得できる種類もあれば、そうでない種類もあります。
今回自分たちが利用したい送信元アイデンティティは、後者でした。

送信元アイデンティティには送信者IDと送信元番号の2種類があり、米国では送信者IDはサポートされていないので、必然的に送信元番号を使うことになりました。

この送信元番号についても、いくつか種類がありますが、結論として、送信元番号のうち、以下の3種類の中から選ぶことがわかりました。
- ショートコード
- フリーダイヤル番号
- 10DLC

    - それぞれの送信元番号の比較
![スクリーンショット 2022-06-16 7.17.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19911/232568f8-8a73-74e9-46fb-b2b7e861c313.png)
今回は、送信数が多くない(秒間数百のメッセージを送る要求はない)が、メッセージのカスタマイズを行う為、**10DLC**を利用することにしました。
ざっくり書きましたが、それぞれ細かい制約があるので、詳しく知りたい方は以下のAWSの公式ドキュメントから送信元番号の解説をご確認下さい。
https://docs.aws.amazon.com/ja_jp/sns/latest/dg/channels-sms-originating-identities-origination-numbers.html

### Q. 10DLCの取得には、会社登録と審査が必要？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19911/2308a4f8-0998-583e-30df-ad4784aa801d.png)

**A. 会社登録は必須、送信数が一定件数以上必要なら審査も必要**

10DLCを取得する際にあたり、まず求められるのは会社登録ですが、それと同時に送信数の上限についても注意が必要です。
https://docs.aws.amazon.com/ja_jp/sns/latest/dg/channels-sms-originating-identities-10dlc.html#sns-10dlc-capabilitie

送信数の上限に対するフローチャートは以下の通りですが、会社の審査状態により、送信数の上限が大きく変化します。多要素認証を利用するサービスで利用者が3桁に到達しないケースは稀だと思うので、審査はほぼ必須になると思います。
![スクリーンショット 2022-06-16 7.40.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19911/8a7a772e-329e-e1bd-b81d-f7a1ccd1c160.png)

今回は会社登録も審査も必要ということになったので、コンソールから利用する会社情報の登録と、登録完了後に審査のリクエストを出す必要があります。
詳しい手順は、公式ドキュメントに委ねますが、実際にかかった日数で言うと登録は1営業日で終わり、審査も2営業日で終わりました。
審査状況によって変わるかもしれないので、あくまで一例となります。
https://docs.aws.amazon.com/ja_jp/sns/latest/dg/sns-settings-register-company.html

また、会社登録に必要な情報は以下になります。法人情報などに関する部分は、会社の法務部に確認することになり、開発チームだけでは作業が完結しないケースが多いので、注意が必要です。

#### 会社登録に必要な情報一覧
- 正式な会社名
- 納税者番号
- 組織の法的形式（営利団体 / 公共営利団体 / 非営利団体 / 米国政府のいずれか）
- 登録国
- 住所
- 商号 (DBA) またはブランド名
- 業種
- 会社のウェブサイト
- サポート E メール
- サポート電話番号

審査が完了するとスコアが掲示されます。このスコアによってメッセージを送れる数の上限が変化するので、注意が必要です。
なお、審査基準は非公開とされており、スコアを上げるための作業などについては今回深掘りして調べなかったです。

### 10DLCの取得には、10DLCキャンペーンも必要

会社登録と審査も終わり、いざ10DLCの取得！となりそうですが、まだ準備が完了していません。
10DLCの取得には、10DLCキャンペーンも必要でした。

**会社登録と10DLCキャンペーン作成が完了しないと10DLCはリクエストできない**
![スクリーンショット 2022-06-16 9.43.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19911/f8152550-ad1c-ecc5-be91-b0b74d9ec055.png)

会社登録さえ終わっていれば10DLCキャンペーンは作成できますが、上記の通り送信数に制限がかるので、結局のところ会社に対する審査完了後に作成をした方が送信できる数も明確になっているので、良いのかなと思いました。

10DLCキャンペーンの作成ですが、ここでも審査が入ります。審査には1週間ほどかかると公式で書かれていましたが、実際に行ったところ当日に審査が完了し、キャンペーンの作成が完了しました。
https://docs.aws.amazon.com/ja_jp/sns/latest/dg/sns-settings-register-campaign-10dlc.html

会社とキャンペーンの登録が終わると無事、10DLCがリクエスト可能となります。
![スクリーンショット 2022-06-16 9.42.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19911/925b7f4d-6286-57c7-2432-3b664bcb400c.png)

最初にCognitoコンソール見てから、ここに辿り着くまで、右往左往して1ヶ月くらい経過していました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19911/e34e6dbb-330b-0f2b-911a-4aad2fe076d5.png)
正直ここまで時間がかかると思っていなかったので、驚きました。
長い道のりでしたが、ここでリクエストを出すと、10DLCの払い出しが行われ、**10DLCの取得が完了**となります！！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19911/14df10a9-a573-3cd3-cc62-b74c8c1e2f38.png)


## 振り返り

記事を書き始めた当初は、あくまで小ネタとして書くつもりでしたが、意外と長くなりました。
この記事が実際に必要となる方は少数かと思いますが、作業の複雑性や必要な日数に対して、根拠となる事実が少ない中での見積りは精度が甘くなりがちなので、小さく先に検証する（今回のケースだと会社情報の登録や審査があるので、難しい部分もあったかもしれませんが)事を心がけようと思いました。

## まとめ

米国で多要素認証を行う場合は、**送信元番号**が必要で、商用利用を前提とした場合、公式ドキュメントに記載されている情報だと、10DLCの場合は、取得には**14-21日の期間が必要**、大規模なサービスだとショートコードが必要になり、**3-4ヶ月の期間が必要**ということが分かりました。
今回は、いくつか公式情報よりも短い日数で審査が完了した部分がありましたが、ケースバイケースだと思うので、これから取得を考えている方は公式ドキュメントに記載のある最長日数がかかる前提で計算するのが安全だと思います。
それ以外の注意点としては、**複数AWSアカウントで同じ会社情報を登録することができず、10DLCは会社で１つしか取得できない**という点です。
開発・検証・本番でAWSアカウントを分離しているところで、商用で利用する10DLCを取得する場合は、本番アカウントで作業を行うよう注意しましょう。


## 参照記事

https://docs.aws.amazon.com/ja_jp/sns/latest/dg/sns-mobile-phone-number-as-subscriber.html
https://docs.aws.amazon.com/ja_jp/sns/latest/dg/channels-sms-us-requirements.html