ALBのセキュリティポリシーをアップデートする
Application Load Balancer(ALB)のセキュリティポリシーのアップデートについて、簡単にまとめた記事です。
はじめに
ALBにはセキュリティポリシーと呼ばれるものがあります。
公式ドキュメントを参照するとSSLネゴシエーション設定とも書かれており、通信を許可する 「プロトコル」 と 「暗号化方式」 の組み合わせ(ポリシー)です。
数あるセキュリティポリシーの中で、現時点(2023年末の時点)で最新のものは、ELBSecurityPolicy-TLS13-1-2-2021-06
であり、こちらを設定することが推奨とされています。
もしこれより古いバージョンのセキュリティポリシーが設定されている場合には、アップデートを検討しても良いかもしれません。
アップデートによって何が変わるのか?
プロトコル
まず、アップデート前のセキュリティポリシーがELBSecurityPolicy-TLS-hoge
の場合、つまりTLS1.2の場合には、それに加えて新たにTLS1.3による通信がサポートされます。新しいTLS1.3ではハンドシェイクの方式が従来の1.2から変更されており、レイテンシーを削減することでより高速なレスポンスが実現できます。具体的には1回の通信プロセスで数ミリ秒短縮されるそうです。
また、現在多くのブラウザでサポートされています。
暗号化方式
また、許容される暗号化方式が変更となります。
仮に、従来ELBSecurityPolicy-TTLS-1-2-2017-01
を設定しており、このセキュリティポリシーを前述のELBSecurityPolicy-TLS13-1-2-2021-06
にアップデートしたとすると、以下の暗号スイートがサポートされなくなります。
- AES128-GCM-SHA256
- AES128-SHA256
- AES256-GCM-SHA384
- AES256-SHA256
これらの(比較的)安全性のレベルが低い、あるいは危殆化した暗号スイートが利用できなくなることで、APIのセキュリティを底上げさせることができる、というわけです。ここで改めて暗号スイートについて補足すると、SSL/TLSで用いられる 暗号化・鍵交換・認証・メッセージ認証コードの4要素の暗号化プロトコル(e.g. RSA)の組み合わせを指しています。
アップデート手順
AWSマネージメントコンソール
特に難しい手順は何もなく、ALBのセキュリティタブを開き、セキュアリスナーの設定を編集 をクリックします。
続いて、セキュリティポリシーの箇所でポリシー名から任意のものを選択し、保存します。
Terraform
参考までに、Terraformの設定例も記載しておきます。
resource "aws_lb_listener" "test" {
load_balancer_arn = aws_lb.test.arn
port = 443
protocol = "HTTPS"
- ssl_policy = "ELBSecurityPolicy-TLS-1-2-2017-01"
+ ssl_policy = "ELBSecurityPolicy-TLS13-1-2-2021-06"
... snip ...
}
確認
セキュリティポリシーのアップデートにより、実際にどう変わったかをcurlで確認してみます。
アップデート前
$ curl -s -v https://${URL} > /dev/null
... snip ...
* [CONN-0-0][CF-SSL] (304) (OUT), TLS handshake, Client hello (1):
} [314 bytes data]
* [CONN-0-0][CF-SSL] (304) (IN), TLS handshake, Server hello (2):
{ [100 bytes data]
* [CONN-0-0][CF-SSL] TLSv1.2 (IN), TLS handshake, Certificate (11):
{ [4958 bytes data]
* [CONN-0-0][CF-SSL] TLSv1.2 (IN), TLS handshake, Server key exchange (12):
{ [333 bytes data]
... snip ...
アップデート後
$ curl -s -v https://${URL} > /dev/null
... snip ...
* (304) (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* (304) (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3
... snip ...
おわりに
そういえば今年の7月に以下のブログがでて、周りで少しTLSが話題になっていました。
どなたかの参考になれば幸いです。
Discussion