AWS

API Gateway リージョン別カスタムドメイン (Route 53は他アカウント)

API Gateway リージョン別カスタムドメイン (Route 53は他アカウント)
エンジニア
API Gatewayで作成したリージョン別 REST API に独自ドメインでアクセスしたいです。ドメインは他AWSアカウントのRoute 53で登録しています。

AWS経験3年以上の僕が詳しくご説明します。

 

本記事の内容

  • API Gateway カスタムドメインの説明
  • 他アカウントのRoute 53で登録したパブリックDNSのドメイン(独自ドメイン)を、API Gateway リージョン別REST APIにカスタムドメインを設定する

API Gateway カスタムドメインとは

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 カスタムドメインの準備

以下が事前に必要になります。これらリソースを作成するための手順については今回はふれません。

  • API Gateway (REST API, エンドポイントはリージョン) + Lambda設定
  • 他AWSアカウントのRoute 53でパブリック ホストゾーン作成
  • 上記ドメインに対するワイルドカード指定のACM (AWS Certificate Manager) 発行

 

また、マネジメントコンソールを操作するIAMユーザーのIAMポリシーは、今回はテスト目的のためAdministratorAccessが付与されているものとします。

 

API Gateway カスタムドメイン 設定手順

API Gatewayカスタムドメイン設定

API Gateway カスタムドメインを設定します。

 

1. カスタムドメイン設定

以降の手順では、自己所有のパブリックDNSドメインを [mydomain.com] として記載します。

API Gatewayの画面から対象のAPIを選択し、[カスタムドメイン名] -> [作成] をクリックします。

カスタムドメイン設定1

 

[ドメイン名の詳細] は以下のとおり設定します。

  • ドメイン名:api.mydomain.com
  • TLSの最小バージョン:TLS 1.2
  • 相互 TLS 認証:無効

カスタムドメイン設定2

相互 TLS 認証とは

  • API実行時にクライアント証明書が必要になる
  • 双方向のTLSによる認証が有効になるため、よりセキュリティが強化される
  • IoT機器などがユースケース
  • プライベートAPIでは使用できない

 

[エンドポイント設定] は以下のとおり設定します。今回タグは設定せず、[ドメイン名を作成] をクリックします。

  • エンドタイプ:リージョン
  • ACM 証明書:作成したACM

カスタムドメイン設定3

 

2. API マッピングを作成する

[APIマッピング]を作成すると、対象APIのステージとカスタムドメイン名を関連づけることができます。

[APIマッピング] タブ -> [APIマッピングを設定] をクリックします。

API マッピング設定1

 

[新しいマッピングを追加] をクリックします。

API マッピング設定2

 

以下のとおり設定し、[保存] をクリックします。

  • API:関連付けたいREST API を選択
  • ステージ:上記APIのステージ を選択
  • パス(オプション):myservice

API マッピング設定3

パス(オプション)とは

  • カスタムドメインの https://api.mydomain.com/ 以降に設定できる名前
  • パスを[myservice]とすると、APIアクセス先のURLは https://api.mydomain.com/myservice となる
  • 指定なしも可能で、その場合は https://api.mydomain.com でAPIにアクセスする

 

[設定] タブ -> [API Gateway ドメイン名] をテキストエディタなどにコピペします。このあとRoute 53のAliasレコードを登録する際に必要になります。

API Gateway ドメイン名

 

3. Route 53でAlias(エイリアス)レコードを作成する

パブリックホストゾーンを管理しているAWSアカウントでRoute 53の画面を開きます。

[ホストゾーン] -> [対象ドメイン] -> [レコードを作成] の順にクリックします。

Route 53でAliasレコードを作成1

 

以下のとおり設定し、[レコードを作成] をクリックします。

  • レコード名:api (ドット (.)  以降はAPI Gatewayカスタムドメインで設定した[ドメイン名] と同じ)
  • レコードタイプ:A - IPv4アドレスと一部のAWSリソースに...
  • トラフィックのルーティング先
    • エイリアス:ボタンをクリックして有効(青色)にする
    • (1つめ)エンドポイントを選択:API Gateway APIへのエイリアス
    • (2つめ)リージョンを選択:アジアパシフィック(東京)[ap-northeast-1]
    • (3つめ)エンドポイントを選択:前の手順でメモした [API Gateway ドメイン名] をそのままコピペ

Route 53でAliasレコードを作成2

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を呼び出すことができます。

  1. 設定したカスタムドメイン
  2. API Gatewayデプロイ時に自動生成されるデフォルトエンドポイント

 

今回は上記 2 のエンドポイントを無効にしてみます。なお、デフォルトエンドポイントを無効にすると、対象のAPI おける全てのステージに影響します。

[対象のAPI] -> [設定]をクリック、 [デフォルトエンドポイントタイプ] を [無効] にチェックして右下の [変更の保存] をクリックします。

REST 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アカウントを使用しているシステムなどでは、発生する可能性がある設定手順ですね。

本記事が参考になれば幸いです。

-AWS

© 2022 ふにノート