Web アプリケーション向け AWS サービスの TLS サポート状況を整理してみた(2024年4月時点)

2024.04.22

いわさです。

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 を前段に置いておいたほうが無難ですね。アクセスログも取れるようになりますし。