Amazon OpenSearch Service と Amazon OpenSearch Serverless が TLS 1.3 をサポートしていたので有効化方法や注意点などを確認してみた

2024.02.26

いわさです。

最近 AWS サービスの TLS 1.3 対応状況などを確認することが多いのですが、Amazon OpenSearch Service と Amazon OpenSearch Serverless もエンドポイントで TLS 1.3 がサポートされるアップデートがありました。

OpenSearch Service は 1 月に、OpenSearch Serverless は 2 月にサポートされています。

同時に、アップデートアナウンスでは Perfect Forward Secrecy (PFS) もサポートされたと記述されています。
TLS 1.3 では PFS が必須なので必然的にサポートされたということが言いたいのかなと最初思ったのですが、セキュリティポリシーを設定してみたところどうやら TLS 1.2 についても推奨されている PFS 対応の暗号スイートのみが対象となるようです。

本日は OpenSearch Service と OpenSearch Serverless について実際の設定状況などを観察してみましたので紹介します。

OpenSearch Serverless は特に設定不要

まずは OpenSearch Serverless から確認してみます。
次のように新しい時系列コレクションを作成しました。

sslscanコマンドを使用して、OpenSearch エンドポイントの TLS バージョン、暗号スイートについて確認してみます。

% sslscan https://kr0jlakfkpgndfo3xcd1.ap-northeast-1.aoss.amazonaws.com
Version: 2.1.3
OpenSSL 3.2.1 30 Jan 2024

Connected to 52.192.104.146

Testing SSL server kr0jlakfkpgndfo3xcd1.ap-northeast-1.aoss.amazonaws.com on port 443 using SNI name kr0jlakfkpgndfo3xcd1.ap-northeast-1.aoss.amazonaws.com

  SSL/TLS Protocols:
SSLv2     disabled
SSLv3     disabled
TLSv1.0   disabled
TLSv1.1   disabled
TLSv1.2   enabled
TLSv1.3   enabled

  TLS Fallback SCSV:
Server supports TLS Fallback SCSV

  TLS renegotiation:
Session renegotiation not supported

  TLS Compression:
OpenSSL version does not support compression
Rebuild with zlib1g-dev package for zlib support

  Heartbleed:
TLSv1.3 not vulnerable to heartbleed
TLSv1.2 not vulnerable to heartbleed

  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

  Server Key Exchange Group(s):
TLSv1.3  128 bits  secp256r1 (NIST P-256)
TLSv1.3  192 bits  secp384r1 (NIST P-384)
TLSv1.3  260 bits  secp521r1 (NIST P-521)
TLSv1.3  128 bits  x25519
TLSv1.2  128 bits  secp256r1 (NIST P-256)
TLSv1.2  192 bits  secp384r1 (NIST P-384)
TLSv1.2  260 bits  secp521r1 (NIST P-521)
TLSv1.2  128 bits  x25519

  SSL Certificate:
Signature Algorithm: sha256WithRSAEncryption
RSA Key Strength:    2048

Subject:  *.ap-northeast-1.aoss.amazonaws.com
Altnames: DNS:*.ap-northeast-1.aoss.amazonaws.com, DNS:collection.sgw.nrt.prod.aoss.searchservices.aws.dev, DNS:*.ap-northeast-1.es.amazonaws.com
Issuer:   Amazon RSA 2048 M03

Not valid before: Nov 14 00:00:00 2023 GMT
Not valid after:  Dec 12 23:59:59 2024 GMT

TLS 1.0 と TLS 1.1 が無効化されており、TLS 1.2 と TLS 1.3 が有効になっています。
また、PFS 対応の暗号スイートのみがサポートされていることも確認出来ました。

OpenSearch Serverless の場合はエンドポイント通信のセキュリティポリシーを設定する機能は無いので、特に設定は不要ですね。一方でレガシークライアントのサポートも出来ません。

OpenSearch Service は明示的に設定が必要

つづいて OpenSearch Service でも確認してみます。
次のようにデフォルト設定で構築した直後のドメインエンドポイントに対して、同じようにsslscanを使ってみましょう。

% sslscan https://search-hoge0225service-gysmz54rip346skpplbhehtczq.aos.ap-northeast-1.on.aws
Version: 2.1.3
OpenSSL 3.2.1 30 Jan 2024

Connected to 2406:da14:1761:e82:e4a0:da4c:2b18:f68

Testing SSL server search-hoge0225service-gysmz54rip346skpplbhehtczq.aos.ap-northeast-1.on.aws on port 443 using SNI name search-hoge0225service-gysmz54rip346skpplbhehtczq.aos.ap-northeast-1.on.aws

  SSL/TLS Protocols:
SSLv2     disabled
SSLv3     disabled
TLSv1.0   enabled
TLSv1.1   enabled
TLSv1.2   enabled
TLSv1.3   disabled

  TLS Fallback SCSV:
Server supports TLS Fallback SCSV

  TLS renegotiation:
Secure session renegotiation supported

  TLS Compression:
OpenSSL version does not support compression
Rebuild with zlib1g-dev package for zlib support

  Heartbleed:
TLSv1.2 not vulnerable to heartbleed
TLSv1.1 not vulnerable to heartbleed
TLSv1.0 not vulnerable to heartbleed

  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                   
Preferred TLSv1.1  128 bits  ECDHE-RSA-AES128-SHA          Curve P-256 DHE 256
Accepted  TLSv1.1  256 bits  ECDHE-RSA-AES256-SHA          Curve P-256 DHE 256
Accepted  TLSv1.1  128 bits  AES128-SHA                   
Accepted  TLSv1.1  256 bits  AES256-SHA                   
Preferred TLSv1.0  128 bits  ECDHE-RSA-AES128-SHA          Curve P-256 DHE 256
Accepted  TLSv1.0  256 bits  ECDHE-RSA-AES256-SHA          Curve P-256 DHE 256
Accepted  TLSv1.0  128 bits  AES128-SHA                   
Accepted  TLSv1.0  256 bits  AES256-SHA                   

  Server Key Exchange Group(s):
TLSv1.2  128 bits  secp256r1 (NIST P-256)
TLSv1.2  192 bits  secp384r1 (NIST P-384)
TLSv1.2  260 bits  secp521r1 (NIST P-521)

  SSL Certificate:
Signature Algorithm: sha256WithRSAEncryption
RSA Key Strength:    2048

Subject:  *.aos.ap-northeast-1.on.aws
Altnames: DNS:*.aos.ap-northeast-1.on.aws, DNS:*.cell-01.aos.ap-northeast-1.on.aws
Issuer:   Amazon RSA 2048 M03

Not valid before: Oct 17 00:00:00 2023 GMT
Not valid after:  Nov 14 23:59:59 2024 GMT

おっと、TLS 1.0, TLS 1.1 が有効で、TLS 1.3 が無効になっていますね。

そうなのです。OpenSearch Service の場合は古いクライアントとの互換性を保つため、デフォルトはPolicy-Min-TLS-1-0-2019-07が設定されます。このセキュリティポリシーでサポートされる TLS バージョンおよび暗号スイートが上記になります。

一方でレガシークライアントを考慮していると言っても非推奨の TLS バージョンがサポートされているため、Security Hub での検出対象でもあります。

上記記事にも記載されていますが、AWS CLI からupdate-domain-configを使ってセキュリティポリシーを指定することが出来ます。
まずは上記記事のとおりPolicy-Min-TLS-1-2-2019-07を指定してみましょうか。

% aws opensearch update-domain-config --domain-name hoge0225service --domain-endpoint-options TLSSecurityPolicy=Policy-Min-TLS-1-2-2019-07

% sslscan https://search-hoge0225service-gysmz54rip346skpplbhehtczq.aos.ap-northeast-1.on.aws      
Version: 2.1.3
OpenSSL 3.2.1 30 Jan 2024

Connected to 2406:da14:1761:e82:e4a0:da4c:2b18:f68

Testing SSL server search-hoge0225service-gysmz54rip346skpplbhehtczq.aos.ap-northeast-1.on.aws on port 443 using SNI name search-hoge0225service-gysmz54rip346skpplbhehtczq.aos.ap-northeast-1.on.aws

  SSL/TLS Protocols:
SSLv2     disabled
SSLv3     disabled
TLSv1.0   disabled
TLSv1.1   disabled
TLSv1.2   enabled
TLSv1.3   disabled

  TLS Fallback SCSV:
Server supports TLS Fallback SCSV

  TLS renegotiation:
Session renegotiation not supported

  TLS Compression:
OpenSSL version does not support compression
Rebuild with zlib1g-dev package for zlib support

  Heartbleed:
TLSv1.2 not vulnerable to heartbleed

  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  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  128 bits  AES128-GCM-SHA256            
Accepted  TLSv1.2  128 bits  AES128-SHA256                
Accepted  TLSv1.2  256 bits  AES256-GCM-SHA384            
Accepted  TLSv1.2  256 bits  AES256-SHA256                

  Server Key Exchange Group(s):
TLSv1.2  128 bits  secp256r1 (NIST P-256)
TLSv1.2  192 bits  secp384r1 (NIST P-384)
TLSv1.2  260 bits  secp521r1 (NIST P-521)

  SSL Certificate:
Signature Algorithm: sha256WithRSAEncryption
RSA Key Strength:    2048

Subject:  *.aos.ap-northeast-1.on.aws
Altnames: DNS:*.aos.ap-northeast-1.on.aws, DNS:*.cell-01.aos.ap-northeast-1.on.aws
Issuer:   Amazon RSA 2048 M03

Not valid before: Oct 17 00:00:00 2023 GMT
Not valid after:  Nov 14 23:59:59 2024 GMT

TLS 1.0と TLS 1.1が無効化されましたが、TLS 1.3 は使えないままですね。

新しいセキュリティポリシー「Policy-Min-TLS-1-2-PFS-2023-10」を使う

以下のドキュメントでは Policy-Min-TLS-1-2-2019-07Policy-Min-TLS-1-0-2019-07 の 2 つから設定可能なように記述されています。

しかし、AWS CLI のコマンドリファレンスでは新しいセキュリティポリシーであるPolicy-Min-TLS-1-2-PFS-2023-10が追加されていることが確認出来ます。

Policy-Min-TLS-1-2-PFS-2023-10: TLS security policy that supports TLS version 1.2 to TLS version 1.3 with perfect forward secrecy cipher suites

このパラメータを使うことで有効化出来そうですね。試してみましょう。

% aws opensearch update-domain-config --domain-name hoge0225service --domain-endpoint-options TLSSecurityPolicy=Policy-Min-TLS-1-2-PFS-2023-10

% sslscan https://search-hoge0225service-gysmz54rip346skpplbhehtczq.aos.ap-northeast-1.on.aws 
Version: 2.1.3
OpenSSL 3.2.1 30 Jan 2024

Connected to 2406:da14:1761:e82:d3ec:363c:abda:7c7

Testing SSL server search-hoge0225service-gysmz54rip346skpplbhehtczq.aos.ap-northeast-1.on.aws on port 443 using SNI name search-hoge0225service-gysmz54rip346skpplbhehtczq.aos.ap-northeast-1.on.aws

  SSL/TLS Protocols:
SSLv2     disabled
SSLv3     disabled
TLSv1.0   disabled
TLSv1.1   disabled
TLSv1.2   enabled
TLSv1.3   enabled

  TLS Fallback SCSV:
Server supports TLS Fallback SCSV

  TLS renegotiation:
Session renegotiation not supported

  TLS Compression:
OpenSSL version does not support compression
Rebuild with zlib1g-dev package for zlib support

  Heartbleed:
TLSv1.3 not vulnerable to heartbleed
TLSv1.2 not vulnerable to heartbleed

  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

  Server Key Exchange Group(s):
TLSv1.3  128 bits  secp256r1 (NIST P-256)
TLSv1.3  192 bits  secp384r1 (NIST P-384)
TLSv1.3  260 bits  secp521r1 (NIST P-521)
TLSv1.3  128 bits  x25519
TLSv1.2  128 bits  secp256r1 (NIST P-256)
TLSv1.2  192 bits  secp384r1 (NIST P-384)
TLSv1.2  260 bits  secp521r1 (NIST P-521)
TLSv1.2  128 bits  x25519

  SSL Certificate:
Signature Algorithm: sha256WithRSAEncryption
RSA Key Strength:    2048

Subject:  *.aos.ap-northeast-1.on.aws
Altnames: DNS:*.aos.ap-northeast-1.on.aws, DNS:*.cell-01.aos.ap-northeast-1.on.aws
Issuer:   Amazon RSA 2048 M03

Not valid before: Oct 17 00:00:00 2023 GMT
Not valid after:  Nov 14 23:59:59 2024 GMT

おー、TLS 1.3 が有効化されました。
さらに、TLS 1.2 の暗号スイートについても PFS 非対応のものがサポート対象から外れました。

TLS 1.2 を許容する想定で TLS 1.3 を念の為有効化しておくかと言った場合でも、サポートされる暗号スイートが変わるので、アクセスされるクライアントを考慮した上でセキュリティポリシーを更新するべきか考えたほうが良さそうですね。

さいごに

本日は Amazon OpenSearch Service と Amazon OpenSearch Serverless が TLS 1.3 をサポートしていたので有効化方法や注意点などを確認してみました。

Amazon OpenSearch Serverless については特に設定不要でした。というかコントロール出来ないです。お任せです。
一方で、Amazon OpenSearch Service についてはデフォルトでは有効化されておらず、むしろセキュリティ的にはちょっと弱い状態がデフォルトになっています。
新しいセキュリティポリシーを使うことで TLS 1.3 が使えたり TLS 1.2 でも推奨される PFS を強制化することが出来ますが、レガシークライアントをどう考慮するべきか検討した上でセキュリティポリシーの更新を行うのが良いですね。