[アップデート] Amazon API Gateway で TLS 1.3 をサポートする API タイプ、エンドポイントタイプが増えました

2024.02.16

いわさです。

今朝、Amazon API Gateway で TLS 1.3 をサポートしたというアップデートアナウンスがありました。

API Gateway のエンドポイントは TLS が必須となっていますが、これまで多くのエンドポイントタイプや API タイプでは最大が TLS 1.2 まではサポートされていたのですが、TLS 1.3 がまだサポートされていない状態でした。

前提として API Gateway には次のように複数の API タイプが存在しています。

さらに、REST API にはエッジ、リージョナル、プライベートと 3 種類のエンドポイントタイプが存在します。

API タイプやエンドポイントタイプによって TLS のサポートバージョンが異なる状態でした。
具体的には、今回のアップデート前までの最大TLSバージョンは次のようになっていました。

タイプ 最大サポートバージョン
HTTP TLS 1.2
REST - エッジ TLS 1.3
REST - リージョナル TLS1.2
REST - プライベート TLS1.2
WebSocket TLS1.2

従来は REST API のエッジエンドポイントでのみ TLS 1.3 がサポートされていました。
これが、今回のアップデートでこれが次のように変わりました。

タイプ 最大サポートバージョン
HTTP TLS 1.3
REST - エッジ TLS 1.3
REST - リージョナル TLS1.3
REST - プライベート TLS1.2
WebSocket TLS1.3

REST API のプライベートエンドポイント以外は TLS 1.3 がサポートされました。

公式ドキュメントでは次のページにて、REST API および、WebSocket API と HTTP API も TLS1.3 がサポートされていることが確認出来ます。

注意点として、本日時点で次の公式ドキュメントではまだ WebSocket と HTTP については TLS1.2 のみをサポートしているという表記が残っていました、が実際に動作確認したところ TLS 1.3 が使えていました。

WebSocket APIs and HTTP APIs support only TLS 1.2.

確認してみた

今回は次のように 5 つのタイプの API を作成し、cURL 経由で TLS バージョンを確認しました。

なお、TLS バージョン確認方法について次の記事も参考にさせて頂きました。

REST API - エッジエンドポイント

まずはエッジエンドポイントです。
こちらはアップデート前から TLSv1.3 がサポートされていました。

[ec2-user@ip-10-0-13-246 ~]$ curl -s -v https://psx4nto29k.execute-api.ap-northeast-1.amazonaws.com/hoge021
6restedge/
* Host psx4nto29k.execute-api.ap-northeast-1.amazonaws.com:443 was resolved.
* IPv6: (none)
* IPv4: 13.249.160.86, 13.249.160.106, 13.249.160.5, 13.249.160.83
*   Trying 13.249.160.86:443...
* Connected to psx4nto29k.execute-api.ap-northeast-1.amazonaws.com (13.249.160.86) port 443
* ALPN: curl offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
*  CAfile: /etc/pki/tls/certs/ca-bundle.crt
*  CApath: none
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519 / RSASSA-PSS
:

期待どおり、TLSv1.3 が使われていますね。

REST API - リージョナルエンドポイント

こちらはリージョナルエンドポイントです。
アップデート前は TLSv1.2 までのサポートでした。

[ec2-user@ip-10-0-13-246 ~]$ curl -s -v https://0vwh02fk8h.execute-api.ap-northeast-1.amazonaws.com/hoge021
6restregional/
* Host 0vwh02fk8h.execute-api.ap-northeast-1.amazonaws.com:443 was resolved.
* IPv6: (none)
* IPv4: 54.249.225.26, 18.177.112.84, 18.180.236.113
*   Trying 54.249.225.26:443...
* Connected to 0vwh02fk8h.execute-api.ap-northeast-1.amazonaws.com (54.249.225.26) port 443
* ALPN: curl offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
*  CAfile: /etc/pki/tls/certs/ca-bundle.crt
*  CApath: none
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519 / RSASSA-PSS
:

おお、TLSv1.3 が使われていますね。

REST API - プライベートエンドポイント

こちらはプライベートエンドポイントです。
今回のアップデートで唯一 TLSv1.3 が使えないエンドポイントタイプとなりました。
試してみましょう。

[ec2-user@ip-172-31-4-123 ~]$ curl -s -v https://w6z07n1lnh.execute-api.ap-northeast-1.amazonaws.com/hoge0216
restprivate/
* Host w6z07n1lnh.execute-api.ap-northeast-1.amazonaws.com:443 was resolved.
* IPv6: (none)
* IPv4: 172.31.34.207
*   Trying 172.31.34.207:443...
* Connected to w6z07n1lnh.execute-api.ap-northeast-1.amazonaws.com (172.31.34.207) port 443
* ALPN: curl offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
*  CAfile: /etc/pki/tls/certs/ca-bundle.crt
*  CApath: none
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256 / prime256v1 / rsaEncryption

こちらについては TLSv1.2 が使われていることが確認出来ます。やはり、TLSv1.3 はサポートされていないままですね。

HTTP API

こちらは REST ではなく HTTP API です。
こちらはドキュメントの構造がアップデート前後で異なっていて確証がなかったのですが、データ保護のドキュメントを確認する限りではアップデート前は TLSv1.3 はサポートされていなかったようです。

[ec2-user@ip-10-0-13-246 ~]$ curl -s -v https://8eyyvhe3gf.execute-api.ap-northeast-1.amazonaws.com/hoge0216stage/ > /dev/null
* Host 8eyyvhe3gf.execute-api.ap-northeast-1.amazonaws.com:443 was resolved.
* IPv6: (none)
* IPv4: 54.199.51.116, 52.69.232.11
*   Trying 54.199.51.116:443...
* Connected to 8eyyvhe3gf.execute-api.ap-northeast-1.amazonaws.com (54.199.51.116) port 443
* ALPN: curl offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
*  CAfile: /etc/pki/tls/certs/ca-bundle.crt
*  CApath: none
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [122 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [19 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [5008 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [264 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519 / RSASSA-PSS
:

TLSv1.3 が使われていますね。
データ保護のドキュメントでは TLSv1.2 までしかサポートされていないと記述されていましたが、更新がまだ反映されていないようですね。

WebSocket API

こちらは WebSocket API です。
コネクションエンドポイントで確認を行いました。HTTP API と同様にアップデート前は TLSv1.2 までしかサポートされていませんでした。

[ec2-user@ip-10-0-13-246 ~]$ curl -s -v https://zjiqwe48d9.execute-api.ap-northeast-1.amazonaws.com/production/@connections
* Host zjiqwe48d9.execute-api.ap-northeast-1.amazonaws.com:443 was resolved.
* IPv6: (none)
* IPv4: 13.113.60.89, 18.178.255.60, 52.69.196.27
*   Trying 13.113.60.89:443...
* Connected to zjiqwe48d9.execute-api.ap-northeast-1.amazonaws.com (13.113.60.89) port 443
* ALPN: curl offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
*  CAfile: /etc/pki/tls/certs/ca-bundle.crt
*  CApath: none
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519 / RSASSA-PSS
:

TLSv1.3 が使われていますね。

さいごに

本日は Amazon API Gateway で TLS 1.3 をサポートするタイプが増えたのでサポート状況を整理し、実際に全てのタイプでバージョンの確認を行ってみました。

プライベート API 以外は全て TLSv1.3 がサポートされましたね。
TLSv1.3 がサポートされておらず API Gateway の採用を見送るケースを見たことがあったのですが、これで採用しやすくなったのではないでしょうか。