タイトル通りです。
AWS CDK を使ったコードでAWSの ALB をTLS1.3に対応させましょう、というお話です。
たったそれだけなので記事にするほどでもない気がしますけど、少し困ったことがあって載せることにしました。
気になること困ったこと
元々TLSを指定していない場合の初期値は一体何が設定されるの?
試してみました
[ELBSecurityPolicy-2016-08]
ずいぶん古いポリシーがセットされるんだな、という印象。
ちなみにコンソールから一覧を選択するとTLS1.3では推奨は[ELBSecurity-TLS13-1-2-2021-06(推奨)]
推奨が指定省略時のデフォルトじゃないんだぁ、という感想。
cdkライブラリが古いのかもという疑いもあって20240724の最新にアップデートした状態でこれでした。
何に直す
じゃあ直さなきゃならないですねとなったとき、
sslPolicy: elbv2.SslPolicy.???
ここでインテリセンスによって表示される一覧を見てもどれ選べばいいのかさっぱりなわけです。
というかなんでこんなにたくさんあるの?と思ってそもそも違いは何?ということで
リファレンスAWS CDK 2.150.0によると暗号スイートの含み方やTLS1.0~TLS1.2のいずれにも対応するか、つまり後方互換をどうするか?という選択なのかなと解釈しました。
ということはデフォルトで設定されていた今までの設定は何なの?ということも気になるわけで。
[ELBSecurityPolicy-2016-08]はSslPolicyの一覧のどれに対応するかを調べたかったけど、直接対応しているように思えなかったので、レスポンスから状態を判断することにしました。
このようなツールを使って調べています。
pythonで
適当なターミナルで
ツールの使い方は省略します。適当にpip installやaptやyum使ってください。
このツールの結果からはTLS1.0~TLS1.2に対応していることといくつかの暗号スイートに対応していることがわかりました。
こいつではないか!
全ての暗号を含むので過剰かもしれませんが少なくとも以前のものは含むので互換性はありそうです。
これならこれまでのユーザーを含めても互換性保ちつつTLS1.3にも対応できるのではないかと思い設定することにしました。
修正結果
import * as elbv2 from 'aws-cdk-lib/aws-elasticloadbalancingv2';
~~省略~~
const alb_backend_server = new elbv2.ApplicationLoadBalancer( ...
~~省略~~
const listener_backend = alb_backend_server.addListener('Listener', {
protocol: elbv2.ApplicationProtocol.HTTPS,
port: 443,
sslPolicy: elbv2.SslPolicy.TLS13_10, // <---追加したコード
defaultAction: elbv2.ListenerAction.fixedResponse(404, {
contentType: 'text/plain',
messageBody: 'NotFound',
}),
});
デプロイ後
あ、そうか推奨はTLS1.2とTLS1.3だから推奨設定ではないんだな
おまけ
少し調べましたが推奨設定にするSslPolicyがどれかわかりませんでした。
なんかないような気がするけど、そうなの?誰か教えてください。
経緯と感想
個人情報が流出しただのサイバー攻撃受けただの、世の中が騒がれています。
「うちの製品はセキュリティ大丈夫なの?」とか聞かれませんか?
説明してもわからないくせに~と思いながら対応してあげているんじゃないでしょうか。
さて、そう思いながらも私も知らないことけっこう多くて組んだインフラがTLS何まで対応しているのか正直ちゃんと考えていませんでした。
考え直す良い機会になったと同時にTLSの歴史についても少し学べて良かったです。
環境
Windows 11 Pro
Node v18.18.2
AWS CDK 2.150.0