
SendGridのAPIキーは「フルアクセス」を使わない!権限の絞り方とよく使う設定をまとめてみた
こんにちは、昴です。
今回はSendGridのセキュリティ設定の基本である「APIキーの権限管理(Restricted Access)」についてご紹介します。
はじめに
WebアプリケーションなどのシステムからSendGridのAPIを利用してメールを送信するには「APIキー」の作成が必要です。
APIキーを作成する際、デフォルトではすべての操作が可能な「Full Access(全権限)」が選択されがちですが、本番環境でFull Accessのキーを使用することは推奨されません。万が一APIキーが漏洩した場合、Full Accessだと「勝手にスパムメールを大量送信される」だけでなく、「アカウントの設定を書き換えられる」「顧客のメールアドレスリストを抜き取られる」といった甚大な被害につながる恐れがあるためです。
今回は、被害を最小限に抑えるために必要最小限の権限のみを付与する「Custom Access」の設定手順と、開発・運用においてよく使われる権限の種類についてまとめました。
前提・検証環境
本記事の手順を進めるにあたり、以下の環境および権限が必要です。
- SendGridアカウントが開設済みであること
- アカウントの管理者権限を持っていること
実践
それでは実際に権限を絞ったAPIキーを作成し、各設定項目を見ていきます。
API キーの作成画面へ
SendGridのコンソール左側のメニューから、Settings > API Keys へ移動し、画面右上の「Create API Key」ボタンをクリックします。

Custom Accessの選択
API Key Nameに分かりやすい名前(例:send-only)を入力します。
次に、API Key Permissionsの項目で、デフォルトの「Full Access」から 「Custom Access」 にチェックを変更します。

すると、SendGridの様々な機能に対するアクセス権(No Access / Read Access / Full Access)を個別に設定できる権限メニューが一覧で表示されます。
Webアプリケーションなどのシステムから「メールを送るためだけ」のキーを作る場合、下の方にある Mail Send のメニューを「Full Access」にします。他のメニューはすべてOFFのままで構いません。

この状態(Mail SendだけがON)が、メール送信専用APIキーとして最も安全で一般的なベストプラクティスです。画面一番下の「Create & View」をクリックして、APIキーを生成・保存します。
キーが生成されると、画面に以下のような警告メッセージが表示されます。

メッセージの通り、このAPIキーはセキュリティ上の理由から一度しか表示されません。画面を閉じると二度と確認できなくなってしまうため、必ずここでコピーし、安全な場所に保存してから「Done」をクリックしてください。
その他のよく使う権限について
今回はメール送信のみに絞りましたが、SendGridをシステムに組み込んで高度な運用をする際、「そのシステムが何をするのか」に合わせて以下の権限を付与することがよくあります。
Suppressions(バウンス・配信停止管理)
- 設定場所: Suppressions > Suppressions および Unsubscribe Groups
- 推奨設定: Read Access または Full Access
「メールが届かなかったアドレス(バウンス)」のリストをAPI経由で取得したり、リストから削除したりするシステムを作る場合に必要な権限です。
SendGridのメニュー上では、バウンス等を管理する「Suppressions」と、配信停止を管理する「Unsubscribe Groups」に分かれていますので、用途に合わせて権限を付与します。運用管理用のバッチ処理などによく使われます。
Template Engine(テンプレート管理)
- 設定場所: Template Engine
- 推奨設定: Read Access または Full Access
SendGridのDynamic Templates(動的テンプレート)を使用する場合に関係します。
APIでテンプレート自体を新規作成・編集するようなシステムでない限り、基本的には Read Access(読み取り権限)のみ、あるいは No Access(※送信機能だけでテンプレートIDの指定は可能)で問題ありません。
Stats(統計情報)
- 設定場所: Stats > Global Stats / Browser Stats / Geographical など
- 推奨設定: 取得したい項目の Read Access
自社の管理画面(ダッシュボード)などに、SendGridの「本日の送信数」や「開封率」などのグラフを表示させたい場合、APIでデータを引っ張ってくるためにこの権限が必要になります。
Statsのメニューを開くと、全体的な統計(Global Stats)のほか、ブラウザ別(Browser Stats)や地域別(Geographical)など細かく項目が分かれています。システムで取得したいデータに合わせて、必要な項目だけを「Read Access」に変更します。
確認
作成した「送信のみ」のセキュアなAPIキーを使って、権限外の操作をした場合にどうなるか確認してみます。
今回は例として、このキーを使って「バウンス(エラー)リストを取得するAPI」を叩いてみます。コマンドプロンプト(またはターミナル)で以下の curl コマンドを実行します。
※ YOUR_API_KEY の部分は、先ほど作成したAPIキーに置き換えてください。
curl -i -X GET "https://api.sendgrid.com/v3/suppression/bounces" \
-H "Authorization: Bearer YOUR_API_KEY"
これを実行すると、権限がないためAPIの呼び出しは失敗し、以下のような 403 Forbidden エラーのJSONが返ってきます。
HTTP/1.1 403 Forbidden
(中略)
{"errors":[{"field":null,"message":"access forbidden"}]}
エラーメッセージの access forbidden(アクセス禁止) が示す通り、万が一この「送信専用APIキー」が外部に漏洩したとしても、第三者が勝手に顧客のアドレスリストを抜き取ったり、アカウント設定を変更したりすることはできないよう、SendGrid側で強固にブロックされることが確認できました。
まとめ
今回はSendGridのAPIキーの権限(Custom Access)の絞り方について見ていきました。
AWSのIAMポリシーなどと同様に、SendGridでも最小権限を守ることが非常に重要です。
本ブログが少しでも参考になれば幸いです。
告知
Twilio/SendGridセミナーを毎月開催しています
クラスメソッドでは毎月Twilio/SendGridのセミナーを実施しています。
クラスメソッドではTwilio/SendGridのセミナーを毎月開催しております。いずれもTwilio及びSendGridを良く知らない方向けに基本的な部分から解説する内容となっておりますので、今後Twilio/SendGridの導入を検討している方や、既に導入済で改めて基本的な部分を勉強したいと考える方は、是非お気軽にご参加いただければと思います。









