ども、@kimihom です。
今回は Twilio ネタ。地味だけどこういうのって調べようと思わないと知らない内容だと思うので記事にしてみた。
AuthToken と API Key の違い
まず Twilio には API アクセスするために、AccountSID と AuthToken の2つが出てくる。これは Twilio をコードで使ったことがある方なら誰でも見たことのある項目のはずだ。基本的に、AccountSID と AuthToken の2つを使えば、どんな API リクエストでも実行が可能だ。
それゆえに、AccountSID と AuthToken のペアはマスターキー的な感じになっているので、できる限りあまり使いたくはないと思うだろう。AuthToken は特に大切に扱うべきだ。なぜなら AccountSID は割と公開された情報なので AuthToken がバレた瞬間に誰もが全ての API を実行できるような感じになってしまうからである。 Twilio の API 呼び出しは無料じゃないので、これは痛いところである。
きっと読者の皆さんも、AWS のアカウント管理で IAM をうまく使って管理をされているはずだ。Twilio ではどうすれば良いのか。
そこで Twilio には API Key という概念を提供して API 利用に応じてうまく分けようとしている。API Key には 2つの役割(Standard と Master) が用意されている。基本的には Standard の API Key を使うことで深刻な API(アカウントの作成/削除など) の利用を禁止することができる。てことで API Key を利用するなら Standard で作ることになるだろう。
Twilio は何でも API Key でできるのか?
うまく API Key を活用すれば、 AccountSID, API Key SID, API Key Secret の3つを保存するだけで Twilio REST API のアクセスが可能になる。つまり、データベースにサブアカウントごとの AuthToken を保存する必要がなくなる!
ここで Twilio の落とし穴にご注意を。Twilio の AccountSID と AuthToken でしかできない行動ってのがいくつかある。
- Twilio Client の ケイパビリティトークンの生成 (なんでやねん)
- API Key の作成
私がハマったのはこの2つ。もしかしたら他にもあるかもしれないので、 API Key で API アクセスを運用する際にはご注意を。 Twilio Client のケイパビリティトークンがなぜ AuthToken でしか生成できないのか、全くもって意味不明。これ Twilio の設計がイケてないんじゃないかと思ったほどだが、何か理由があるのだろう。ちなみに他の Chat, Video, Sync などのトークン生成は API Key と AccountSID で作れる。
終わりに
今回は Twilio の小ネタをご紹介した。Twiliio Client のケイパビリティトークン以外の API アクセスは、基本的に API Key ベースの API アクセスにした方が安全に Twilio を利用できると思う。
Admin の AccountSID と AuthToken だけ環境変数で持つようにして、サブアカウントの個々のリソースアクセスは API Key ベースでアクセスするって感じがいいんじゃないだろうか。
さて、いよいよ再来週になったが Twilio Developer Meetup、まだ空きがあるみたいなので参加検討いただけると幸いだ。ちなみに私も LT する予定なのでお楽しみに。