AWS経験5年以上の僕が詳しくご説明します。
本記事の内容
- API Gateway カスタムドメインの説明
- 他アカウントのRoute 53で登録したパブリックDNSのドメイン(独自ドメイン)を、API Gateway リージョン別REST APIにカスタムドメインを設定する
もくじ
API Gateway カスタムドメインとは
本記事では、API Gatewayのリージョン別REST APIにおけるカスタムドメインについて記載します。HTTP APIや、エンドポイントタイプが [エッジ最適化] のREST APIなどはふれません。
API呼び出しURLをパブリックDNSのドメイン名(独自ドメイン)に変更できる
API Gateway カスタムドメインを設定すると、APIを呼び出すURLを自分が所有するパブリックDNSのドメイン名(独自ドメイン)に変更できます。
API GatewayでAPIをデプロイすると、デフォルトのURL呼び出しは以下になります。
https://<api-id>.execute-api.<region>.amazonaws.com/<stage>
API Gatewayのカスタムドメインを設定することで、上記URLを自分が所有するドメイン名に変更することができます。
例えば自己所有のドメイン名を [mydomain.com] とすると、以下のようなURLでAPIを呼び出せます。
https://api.mydomain.com/<myservice>
最小TLSを指定しセキュリティを強化できる
カスタムドメインを利用する他のメリットとして、「最小のTLS versionを1.2または1.0から選択できる(REST APIの場合)」のでセキュリティを強化できます。
クライアントのWebブラウザにおける設定やバージョン次第では、API GatewayでAPIを呼び出す際にTLS1.0になる場合があります。
カスタムドメインを使用することで、よりセキュアなTLS1.2に強制することができます。
カスタムドメインにおける注意点
カスタムドメインにおける注意点は以下のとおりです。
- カスタムドメインは、プライベート REST API ではサポートされていない
- リージョン別カスタムドメインは、API と同じAWSリージョンにある SSL/TLS 証明書を使用する必要がある
API Gateway カスタムドメイン設定の準備
以下が事前に必要になります。これらリソースを作成するための手順については今回はふれません。
- API Gateway (REST API, エンドポイントはリージョン) + Lambda設定
- 他AWSアカウントのRoute 53でパブリック ホストゾーン作成
- 上記ドメインに対するワイルドカード指定のACM (AWS Certificate Manager) 発行
また、マネジメントコンソールを操作するIAMユーザーのIAMポリシーは、今回はテスト目的のためAdministratorAccess
が付与されているものとします。
API Gateway カスタムドメイン 設定手順
API Gateway カスタムドメインを設定します。
1. カスタムドメイン設定
以降の手順では、自己所有のパブリックDNSドメインを [mydomain.com] として記載します。
API Gatewayの画面から対象のAPIを選択し、[カスタムドメイン名] -> [作成] をクリックします。
[ドメイン名の詳細] は以下のとおり設定します。
- ドメイン名:api.mydomain.com
- TLSの最小バージョン:TLS 1.2
- 相互 TLS 認証:無効
相互 TLS 認証とは
- API実行時にクライアント証明書が必要になる
- 双方向のTLSによる認証が有効になるため、よりセキュリティが強化される
- IoT機器などがユースケース
- プライベートAPIでは使用できない
[エンドポイント設定] は以下のとおり設定します。今回タグは設定せず、[ドメイン名を作成] をクリックします。
- エンドタイプ:リージョン
- ACM 証明書:作成したACM
2. API マッピングを作成する
[APIマッピング]を作成すると、対象APIのステージとカスタムドメイン名を関連づけることができます。
[APIマッピング] タブ -> [APIマッピングを設定] をクリックします。
[新しいマッピングを追加] をクリックします。
以下のとおり設定し、[保存] をクリックします。
- API:関連付けたいREST API を選択
- ステージ:上記APIのステージ を選択
- パス(オプション):myservice
パス(オプション)とは
- カスタムドメインの https://api.mydomain.com/ 以降に設定できる名前
- パスを[myservice]とすると、APIアクセス先のURLは https://api.mydomain.com/myservice となる
- 指定なしも可能で、その場合は https://api.mydomain.com でAPIにアクセスする
[設定] タブ -> [API Gateway ドメイン名] をテキストエディタなどにコピペします。このあとRoute 53のAliasレコードを登録する際に必要になります。
3. Route 53でAlias(エイリアス)レコードを作成する
パブリックホストゾーンを管理しているAWSアカウントでRoute 53の画面を開きます。
[ホストゾーン] -> [対象ドメイン] -> [レコードを作成] の順にクリックします。
以下のとおり設定し、[レコードを作成] をクリックします。
- レコード名:api (ドット (.) 以降はAPI Gatewayカスタムドメインで設定した[ドメイン名] と同じ)
- レコードタイプ:A - IPv4アドレスと一部のAWSリソースに...
- トラフィックのルーティング先
- エイリアス:ボタンをクリックして有効(青色)にする
- (1つめ)エンドポイントを選択:API Gateway APIへのエイリアス
- (2つめ)リージョンを選択:アジアパシフィック(東京)[ap-northeast-1]
- (3つめ)エンドポイントを選択:前の手順でメモした [API Gateway ドメイン名] をそのままコピペ
3つめの [エンドポイントを選択] について
もし、自分のAWSアカウントでRoute 53 パブリックホストゾーンを作成している場合は、3つめの [エンドポイントを選択] は自動で [API Gateway ドメイン名] が表示されます。
今回は別AWSアカウトのRoute 53でAlias(エイリアス)レコードを登録するので、入力フィールドに[API Gateway ドメイン名]が自動表示されませんが、直接入力することで問題なくレコードを作成できます。
4. カスタムドメイン接続確認
カスタムドメインにアクセスできることを確認します。
https://api.mydomain.com/<myservice>
これまでどおり、デフォルトエンドポイントにもアクセスできることを確認します。
https://<api-id>.execute-api.<region>.amazonaws.com/<stage>
5. (任意)REST API デフォルトエンドポイントの無効化
現時点で、以下2つのURLからAPIを呼び出すことができます。
- 設定したカスタムドメイン
- API Gatewayデプロイ時に自動生成されるデフォルトエンドポイント
今回は上記 2 のエンドポイントを無効にしてみます。なお、デフォルトエンドポイントを無効にすると、対象のAPI おける全てのステージに影響します。
[対象のAPI] -> [設定]をクリック、 [デフォルトエンドポイントタイプ] を [無効] にチェックして右下の [変更の保存] をクリックします。
(サイズの関係で、上の画像では右下の [変更の保存] が見えていません。)
このあと、上記の設定変更を反映させるためには、必ずAPI をデプロイする必要があります。
[対象のAPI] -> [リソース] -> [アクション] -> [APIのデプロイ] をクリック、 [デプロイされるステージ] に対象のステージを設定し[デプロイ] をクリックします。
再度、デフォルトエンドポイントにアクセスしてみると {"message":"Forbidden"} となりました。想定とおりの結果ですね。
https://<api-id>.execute-api.<region>.amazonaws.com/<stage>
カスタムドメインを別AWSアカウントが管理するドメインで設定:まとめ
パブリックDNSが他アカウントのRoute 53で管理している場合で、API Gateway リージョン別REST APIのカスタムドメインを設定してみました。
複数のAWSアカウントを使用しているシステムなどでは、発生する可能性がある設定手順ですね。
本記事が参考になれば幸いです。