Web アプリケーション向け AWS サービスの TLS サポート状況を整理してみた(2024年4月時点)
いわさです。
AWS では Web アプリケーションへのリクエストを受け付けるためのサービスがいくつも存在しています。
最近、各 AWS サービスで続々と TLS 1.3 がサポートされてきています。
上記の記事内では TLS 1.3 をサポートしつつ要件にあわせてセキュリティポリシーを設定することでレガシークライアントをサポートすることも出来ています。
ただ、全てのサービスがセキュリティポリシーの設定をすることができるわけではなく、サービス固有だったり、あるいは TLS 1.3 がまだサポートされていないものもまだあることを知りました。
今回 Web アプリケーションをホスティングする際によく利用しそうなサービスを対象に調べてみましたので紹介します。
RLS や IoT Core、あるいはエンドポイントという概念だと OpenSearch などもあったりはするのですが、今回は独自で Web サービスを提供したいという場合にユーザーからのリクエストを受け付ける部分のサービスに絞っています。
先にまとめ
サービスごとに対応している TLS バージョンと、セキュリティポリシーが変更可能かをまとめてみました。
サービス | セキュリティポリシーの変更可否 | TLS 1.1 以下 | TLS 1.2 | TLS 1.3 |
---|---|---|---|---|
Application Load Balancer | 選択できる | △ | △ | ◯ |
Network Load Balancer | 選択できる | △ | △ | ◯ |
CloudFront | 選択できる | △ | ◯ | ◯ |
API Gateway | 選択できる | △ | ◯ | ◯ |
App Runner | 選択できない | ✗ | ◯ | ✗ |
AppSync (デフォルトドメイン) | 選択できない | ◯ | ◯ | ◯ |
AppSync (カスタムドメイン) | 選択できない | ✗ | ◯ | ◯ |
Amplify | 選択できない | ✗ | ◯ | ◯ |
Lambda Function URL | 選択できない | ✗ | ◯ | ◯ |
- ◯:サポートされている
- △:セキュリティポリシーを変更することでサポート対象にもサポート対象外にもできる
- ✗:サポート出来ない
本日時点では結構バラバラなので今回整理出来て良かったです。
- 最低バージョンを TLS 1.3 にする必要がある場合は ALB か NLB になる
- App Runner が TLS 1.2 のみしかサポートされていない
- AppSync はセキュリティポリシーの変更は出来ないがカスタムドメインを使うかどうかで変わる
- TLS 1.3 をサポートしないという選択は、App Runner 以外できない(そのうちサポートされそうな気もする)
ドキュメントで明示されているものとされていないものがある
まず、セキュリティポリシーの変更ができるサービスについては、どのセキュリティポリシーでどの TLS バージョン、暗号スイートがサポートされるのかが明記されています。
サービス | ポリシーの説明ページ |
---|---|
Application Load Balancer | Application Load Balancer 用の HTTPS リスナーを作成する - Elastic Load Balancing |
Network Load Balancer | Network Load Balancer の TLS リスナー - Elastic Load Balancing |
CloudFront | ビューワーと の間でサポートされているプロトコルと暗号 CloudFront - Amazon CloudFront |
API Gateway | API Gateway でカスタムドメインのセキュリティポリシーを選択する - Amazon API Gateway |
そして、以下については探してみたのですが公式ドキュメントで明記されていませんでした。
- App Runner
- AppSync
- Amplify
- Lambda Function URL
ドキュメントに記載のないサービスを動作確認して調べてみた
ここからは調査結果なのでちょっと冗長ですが、サポートされる暗号スイートまで確認したい場合は参考にしてください。
エンドポイントを作成し、いつものようにsslscan
で調べてみます。
今回知りたいのは本日時点でサポートされる SSL/TLS プロトコルと暗号スイートです。
App Runner
App Runner はデフォルトドメインとカスタムドメインどちらも試しましたが結果は同じでした。
% sslscan https://hoge0421.tak1wa.com Version: 2.1.3 OpenSSL 3.2.1 30 Jan 2024 Connected to 35.74.50.83 Testing SSL server hoge0421.tak1wa.com on port 443 using SNI name hoge0421.tak1wa.com SSL/TLS Protocols: SSLv2 disabled SSLv3 disabled TLSv1.0 disabled TLSv1.1 disabled TLSv1.2 enabled TLSv1.3 disabled : Supported Server Cipher(s): Preferred TLSv1.2 128 bits ECDHE-RSA-AES128-GCM-SHA256 Curve P-256 DHE 256 Accepted TLSv1.2 128 bits ECDHE-RSA-AES128-SHA256 Curve P-256 DHE 256 Accepted TLSv1.2 128 bits ECDHE-RSA-AES128-SHA Curve P-256 DHE 256 Accepted TLSv1.2 256 bits ECDHE-RSA-AES256-GCM-SHA384 Curve P-256 DHE 256 Accepted TLSv1.2 256 bits ECDHE-RSA-AES256-SHA384 Curve P-256 DHE 256 Accepted TLSv1.2 256 bits ECDHE-RSA-AES256-SHA Curve P-256 DHE 256 Accepted TLSv1.2 128 bits AES128-GCM-SHA256 Accepted TLSv1.2 128 bits AES128-SHA256 Accepted TLSv1.2 128 bits AES128-SHA Accepted TLSv1.2 256 bits AES256-GCM-SHA384 Accepted TLSv1.2 256 bits AES256-SHA256 Accepted TLSv1.2 256 bits AES256-SHA :
App Runner の TLS 1.3 対応まだだったのですね。最近の流れだとそのうちアップデート来そうな気がします。
レガシークライアント(TLS 1.1 以下)がサポートされていないので、本日時点では TLS 1.2 のみサポートされていますね。
AppSync
お次は AppSync です。
HTTPS エンドポイントに対しての確認になっています。
まずはデフォルトドメインなのですが、こちらは TLS 1.3 がサポートされてはいるのですが、なんとデフォルトで TLS 1.1 もサポートされています。
TLS 1.1 は現在は非推奨であるため、基本的にはデフォルトドメインは避けてカスタムドメインを使ったほうが良さそうですね。
% sslscan "https://5hh6qatoyfcgjoxy2vangzkgle.appsync-api.ap-northeast-1.amazonaws.com" Version: 2.1.3 OpenSSL 3.2.1 30 Jan 2024 Connected to 18.64.123.105 Testing SSL server 5hh6qatoyfcgjoxy2vangzkgle.appsync-api.ap-northeast-1.amazonaws.com on port 443 using SNI name 5hh6qatoyfcgjoxy2vangzkgle.appsync-api.ap-northeast-1.amazonaws.com SSL/TLS Protocols: SSLv2 disabled SSLv3 disabled TLSv1.0 disabled TLSv1.1 enabled TLSv1.2 enabled TLSv1.3 enabled : Supported Server Cipher(s): Preferred TLSv1.3 128 bits TLS_AES_128_GCM_SHA256 Curve 25519 DHE 253 Accepted TLSv1.3 256 bits TLS_AES_256_GCM_SHA384 Curve 25519 DHE 253 Accepted TLSv1.3 256 bits TLS_CHACHA20_POLY1305_SHA256 Curve 25519 DHE 253 Preferred TLSv1.2 128 bits ECDHE-RSA-AES128-GCM-SHA256 Curve 25519 DHE 253 Accepted TLSv1.2 128 bits ECDHE-RSA-AES128-SHA256 Curve 25519 DHE 253 Accepted TLSv1.2 128 bits ECDHE-RSA-AES128-SHA Curve 25519 DHE 253 Accepted TLSv1.2 256 bits ECDHE-RSA-AES256-GCM-SHA384 Curve 25519 DHE 253 Accepted TLSv1.2 256 bits ECDHE-RSA-CHACHA20-POLY1305 Curve 25519 DHE 253 Accepted TLSv1.2 256 bits ECDHE-RSA-AES256-SHA384 Curve 25519 DHE 253 Accepted TLSv1.2 256 bits ECDHE-RSA-AES256-SHA Curve 25519 DHE 253 Accepted TLSv1.2 128 bits AES128-GCM-SHA256 Accepted TLSv1.2 256 bits AES256-GCM-SHA384 Accepted TLSv1.2 128 bits AES128-SHA256 Accepted TLSv1.2 256 bits AES256-SHA Accepted TLSv1.2 128 bits AES128-SHA Preferred TLSv1.1 128 bits ECDHE-RSA-AES128-SHA Curve 25519 DHE 253 Accepted TLSv1.1 256 bits ECDHE-RSA-AES256-SHA Curve 25519 DHE 253 Accepted TLSv1.1 256 bits AES256-SHA Accepted TLSv1.1 128 bits AES128-SHA :
そして、カスタムドメインを使うとサポートされる SSL/TLS プロトコルが変わります。
次のドキュメントにも注意書きがされています。
AWS AppSync API では、カスタムドメイン名を設定する際に、TLS 1.2 と TLS 1.3 のみをサポートしています。
おそらく内部的に CloudFront ディストリビューションを挟むのでしょうね。
先ほどとは逆で、レガシークライアントをサポートしなければいけない場合はカスタムドメインは避けたほうが良いということにもなります。
% sslscan "https://graphhoge.tak1wa.com" Version: 2.1.3 OpenSSL 3.2.1 30 Jan 2024 Connected to 3.164.143.111 Testing SSL server graphhoge.tak1wa.com on port 443 using SNI name graphhoge.tak1wa.com SSL/TLS Protocols: SSLv2 disabled SSLv3 disabled TLSv1.0 disabled TLSv1.1 disabled TLSv1.2 enabled TLSv1.3 enabled : Supported Server Cipher(s): Preferred TLSv1.3 128 bits TLS_AES_128_GCM_SHA256 Curve 25519 DHE 253 Accepted TLSv1.3 256 bits TLS_AES_256_GCM_SHA384 Curve 25519 DHE 253 Accepted TLSv1.3 256 bits TLS_CHACHA20_POLY1305_SHA256 Curve 25519 DHE 253 Preferred TLSv1.2 128 bits ECDHE-RSA-AES128-GCM-SHA256 Curve 25519 DHE 253 Accepted TLSv1.2 128 bits ECDHE-RSA-AES128-SHA256 Curve 25519 DHE 253 Accepted TLSv1.2 256 bits ECDHE-RSA-AES256-GCM-SHA384 Curve 25519 DHE 253 Accepted TLSv1.2 256 bits ECDHE-RSA-CHACHA20-POLY1305 Curve 25519 DHE 253 Accepted TLSv1.2 256 bits ECDHE-RSA-AES256-SHA384 Curve 25519 DHE 253 Accepted TLSv1.2 128 bits AES128-GCM-SHA256 Accepted TLSv1.2 256 bits AES256-GCM-SHA384 Accepted TLSv1.2 128 bits AES128-SHA256 :
Amplify
お次は Amplify です。Gen 1 です。
以前 Blazor WebAssembly をホスティングしている環境があったので、そこで確認してみます。
Amplify は TLS 1.3 が有効です。
おそらくセキュリティポリシーの変更が出来ない CloudFront というイメージではないでしょうか。
% sslscan https://blazor.tak1wa.com/ Version: 2.1.3 OpenSSL 3.2.1 30 Jan 2024 Connected to 18.65.168.51 Testing SSL server blazor.tak1wa.com on port 443 using SNI name blazor.tak1wa.com SSL/TLS Protocols: SSLv2 disabled SSLv3 disabled TLSv1.0 disabled TLSv1.1 disabled TLSv1.2 enabled TLSv1.3 enabled : Supported Server Cipher(s): Preferred TLSv1.3 128 bits TLS_AES_128_GCM_SHA256 Curve 25519 DHE 253 Accepted TLSv1.3 256 bits TLS_AES_256_GCM_SHA384 Curve 25519 DHE 253 Accepted TLSv1.3 256 bits TLS_CHACHA20_POLY1305_SHA256 Curve 25519 DHE 253 Preferred TLSv1.2 128 bits ECDHE-RSA-AES128-GCM-SHA256 Curve 25519 DHE 253 Accepted TLSv1.2 256 bits ECDHE-RSA-AES256-GCM-SHA384 Curve 25519 DHE 253 Accepted TLSv1.2 256 bits ECDHE-RSA-CHACHA20-POLY1305 Curve 25519 DHE 253 :
Lambda Function URL
最後は Lambda Function URL です。
こちらは TLS 1.2 と 1.3 がサポートされていて、TLS 1.2 も ECDHE 暗号スイートのみなので TLS 1.2 だとしても推奨された暗号スイートが使われる形になりますね。レガシークライアントは排除されている感じです。
% sslscan https://6jmckixs6mpeas3p5pm3lc4moa0awpwv.lambda-url.ap-northeast-1.on.aws/ Version: 2.1.3 OpenSSL 3.2.1 30 Jan 2024 Connected to 2406:da14:192:de03:bd45:e53f:d3c:6a19 Testing SSL server 6jmckixs6mpeas3p5pm3lc4moa0awpwv.lambda-url.ap-northeast-1.on.aws on port 443 using SNI name 6jmckixs6mpeas3p5pm3lc4moa0awpwv.lambda-url.ap-northeast-1.on.aws SSL/TLS Protocols: SSLv2 disabled SSLv3 disabled TLSv1.0 disabled TLSv1.1 disabled TLSv1.2 enabled TLSv1.3 enabled : Supported Server Cipher(s): Preferred TLSv1.3 128 bits TLS_AES_128_GCM_SHA256 Curve 25519 DHE 253 Accepted TLSv1.3 256 bits TLS_AES_256_GCM_SHA384 Curve 25519 DHE 253 Accepted TLSv1.3 256 bits TLS_CHACHA20_POLY1305_SHA256 Curve 25519 DHE 253 Preferred TLSv1.2 128 bits ECDHE-RSA-AES128-GCM-SHA256 Curve 25519 DHE 253 Accepted TLSv1.2 128 bits ECDHE-RSA-AES128-SHA256 Curve 25519 DHE 253 Accepted TLSv1.2 256 bits ECDHE-RSA-AES256-GCM-SHA384 Curve 25519 DHE 253 Accepted TLSv1.2 256 bits ECDHE-RSA-AES256-SHA384 Curve 25519 DHE 253 :
少し前に CloudFront の OAC で Lambda Function URL を指定できるようになったので、レガシークライアントをサポートしたい場合も CloudFront を利用出来そうですね。
さいごに
本日は Web アプリケーションをホスティングできる主要な AWS サービスの中でドキュメントで確認出来なかった SSL/TLS サポート状況を確認してみました。
結果、結構バラバラでしたね。
この確認結果は本日時点のものとなりますので変わる可能性があります。いや間違いなく変わると思います。ご注意ください。
色々試して思ったのが、パブリックなエンドポイントでこのあたりをコントロールしたかったら CloudFront を前段に置いておいたほうが無難ですね。アクセスログも取れるようになりますし。