API Gateway カスタムドメイン化(Edge optimized / Regional)

2月 4, 2020APIGateway,AWS,システム設計

API Gateway カスタムドメイン化(Edge optimized / Regional)

 

概要

  • Amazon API Gateway は、あらゆる規模の REST APIおよび WebSocket API を作成、管理するためのフルマネージドなサービスです。今回は、API Gateway のカスタムドメイン化について記事にします。
  • 最近まで、API作成時のEndpointにエッジ最適化を選択した場合のみカスタムドメイン化が可能だと思っておりましたが、改めて検証したところ、Endpointにリージョンを選択した場合もカスタムドメイン化が可能であることを知りました。すでに使い分けている方も多いかもしれませんが、せっかくですので以下手順にまとめたいと思います。
  • また、クライアント側のアプリ開発でも気がかりとなるカスタムドメインでサポートされるSSL/TLS プロトコルと暗号化アルゴリズムについても記載しております。

 

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

エッジ最適化のEndpoint を選択した場合のカスタムドメイン化

  • 以下、API作成時のEndpoint Typeに「Edge optimized」を選択した場合の設定です。
    • エッジ最適化 API エンドポイントは、地理的に分散されたクライアントに最適なエンドポイントであり、デフォルトのエンドポイントタイプです。APIリクエストは、最寄りのCloudFrontエッジにルーティングされます。
  • ACM(AWS Certificate Manager)のバージニア北部(us-east-1)に証明書を配置します。証明書はACMで発行して使用するか、あるいは外部プロバイダーで発行した証明書をインポートして使用します。証明書のインポート方法は、こちらの記事を参照ください。
    • エッジ最適化を使用する場合、CloudFrontと同様に自己署名証明書は使用できません。
  • 今回使用する証明書(niikawa-test2.xxxxxxxxxx.net)がバージニア北部に配置されていることが分かります。

  • 続いて、API Gatewayのカスタムドメインを選択します。
  • [Creating Custom Domain Name…]を選択し、[Domain Name]を入力、[Security Policy]を選択、[Endpoint Configuration]に「Edge optimized」を選択、[ACM Certificate]にバージニア北部に配置した証明書を選択します。
  • 証明書を表す8桁の文字列がACMで確認できる証明書識別子と一致します。

  • [Save]を押すと、CloudFront のEdgeロケーションに配信が行われます。配信完了まで、30分程度は掛かります。
  • 下記の[Target Domain Name]をコピーしておきます。後ほど、Route 53 にレコード登録します。
    • エッジ最適化 の場合、Target Domain Nameは、"yyyyyyyyyyyyyy.cloudfront.net" となっている点が特徴です。

  • Base Path Mappingを編集します。Path(/)に対応するDestination(API名およびステージ)を指定します。

  • Route 53に先ほどコピーしたTarget Domain Nameの値をCNAMEレコードに登録します。

 

リージョンのEndpoint を選択した場合のカスタムドメイン化

  • 以下、API作成時のEndpoint Typeに「Regional」を選択した場合の設定です。東京リージョンを想定して説明します。
    • リージョン API エンドポイントは、同じリージョンのクライアントを対象とします。
  • ACM(AWS Certificate Manager)の東京(ap-northeast-1)に証明書を配置します。証明書はACMで発行して使用するか、あるいは外部プロバイダーで発行した証明書をインポートして使用します。証明書のインポート方法は、こちらの記事を参照ください。
    • リージョンを使用する場合、自己署名証明書は使用可能です。
  • 今回使用する証明書(niikawa-test1.xxxxxxxxxx.net)が東京に配置されていることが分かります。

  • 続いて、API Gatewayのカスタムドメインを選択します。
  • [Creating Custom Domain Name…]を選択し、[Domain Name]を入力、[Security Policy]を選択、[Endpoint Configuration]に「Regional」を選択、[ACM Certificate]に東京に配置した証明書を選択します。
  • 証明書を表す8桁の文字列がACMで確認できる証明書識別子と一致します。

  • [Save]を押すと、エッジ最適化の場合と異なりすぐに保存が完了します。
  • Base Path Mappingを編集します。Path(/)に対応するDestination(API名およびステージ)を指定します。

  • 下記の[Target Domain Name]をコピーして、Route 53にCNAMEレコードとして登録します。
    • リージョン の場合、Target Domain Nameは、"d-xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com" となっている点が特徴です(API GatewayのURLと似ていますが、カスタムドメイン化すると別のURLが割り当てられます)。

動作確認

エッジ最適化のEndpoint を選択した場合

  • 以下、エッジ最適化のEndpoint を選択した場合のAPIに対して、API Gateway のURLおよびカスタムドメイン化したURLに対して、それぞれcurl を投げた結果です。カスタムドメイン化した時も同様の結果が得られました。

niikawa@niikawa1:~$ curl https://XXXXXXi69a.execute-api.ap-northeast-1.amazonaws.com/dev
{"statusCode": 200, "body": "\"Hello World!\""}niikawa@niikawa1:~$
niikawa@niikawa1:~$ curl https://niikawa-test2.XXXXXXXXXX.net
{"statusCode": 200, "body": "\"Hello World!\""}niikawa@niikawa1:~$

 

リージョンのEndpoint を選択した場合

  • 以下、リージョンのEndpoint を選択した場合のAPIに対して、API Gateway のURLおよびカスタムドメイン化したURLに対して、それぞれcurl を投げた結果です。カスタムドメイン化した時も同様の結果が得られました。
  • Endpointに「Regional」を選択した場合もカスタムドメイン化ができました。但し、クライアントの地理によって、動作やレイテンシが変わる可能性がありますので、クライアントが同じリージョンでなければ、「Edge optimized」を選択してAPIおよびカスタムドメインを作りましょう。

niikawa@niikawa1:~$ curl https://XXXXXXn1ba.execute-api.ap-northeast-1.amazonaws.com/dev
{"statusCode": 200, "body": "\"Hello World!\""}niikawa@niikawa1:~$
niikawa@niikawa1:~$ curl https://niikawa-test1.XXXXXXXXXX.net
{"statusCode": 200, "body": "\"Hello World!\""}niikawa@niikawa1:~$

 

カスタムドメインのTLSバージョン

カスタムドメインでサポートされるTLSバージョン

  • セキュリティ強化のため、Amazon API Gateway カスタムドメインに対して適用する最小 TLS (Transport Layer Security) が選択可能です。現在、TLS バージョン 1.2 または TLS バージョン 1.0 のセキュリティポリシーを選択できます(1.3は選択不可)。
TLS プロトコルは、クライアントとサーバーの間の改ざんや傍受などのネットワークセキュリティの問題に対処します。クライアントがカスタムドメインを介して API に TLS ハンドシェイクを確立すると、セキュリティポリシーにより、TLS バージョンと暗号スイートのオプションが適用されます。

 

サポートされるSSL/TLS プロトコルと暗号化アルゴリズム

  • その他API Gateway カスタムドメイン化で選択可能なTLS バージョンの詳細は、下記資料を参照。各セキュリティポリシーでサポートされる SSL/TLS プロトコルと暗号化アルゴリズムがまとめられています。