セキュリティチェックシートに「SSL3.0およびTLS1.1以前を無効化しているか」という質問があったのですが、恥ずかしながら即答できなかったので、調査および対応を行いました。
同様の対応が必要な方々の参考になれば幸いです。
なお、インフラ構成はELB(ALB) + ECS on Fargate + Aurora MySQLとなっております。
ELB(ALB)
ELBにデフォルトでアタッチされているセキュリティポリシーELBSecurityPolicy-2016-08
の詳細をAWS CLIで確認したところ、以下のようにTLSv1とTLSv1.1が有効化されていました。
$ aws elbv2 describe-ssl-policies --names ELBSecurityPolicy-2016-08 --output table
---------------------------------------------------
| DescribeSSLPolicies |
+-------------------------------------------------+
|| SslPolicies ||
|+-----------------------------------------------+|
|| Name ||
|+-----------------------------------------------+|
|| ELBSecurityPolicy-2016-08 ||
|+-----------------------------------------------+|
||| Ciphers |||
||+--------------------------------+------------+||
||| Name | Priority |||
||+--------------------------------+------------+||
||| ECDHE-ECDSA-AES128-GCM-SHA256 | 1 |||
||| ECDHE-RSA-AES128-GCM-SHA256 | 2 |||
||| ECDHE-ECDSA-AES128-SHA256 | 3 |||
||| ECDHE-RSA-AES128-SHA256 | 4 |||
||| ECDHE-ECDSA-AES128-SHA | 5 |||
||| ECDHE-RSA-AES128-SHA | 6 |||
||| ECDHE-ECDSA-AES256-GCM-SHA384 | 7 |||
||| ECDHE-RSA-AES256-GCM-SHA384 | 8 |||
||| ECDHE-ECDSA-AES256-SHA384 | 9 |||
||| ECDHE-RSA-AES256-SHA384 | 10 |||
||| ECDHE-RSA-AES256-SHA | 11 |||
||| ECDHE-ECDSA-AES256-SHA | 12 |||
||| AES128-GCM-SHA256 | 13 |||
||| AES128-SHA256 | 14 |||
||| AES128-SHA | 15 |||
||| AES256-GCM-SHA384 | 16 |||
||| AES256-SHA256 | 17 |||
||| AES256-SHA | 18 |||
||+--------------------------------+------------+||
||| SslProtocols |||
||+---------------------------------------------+||
||| TLSv1 |||
||| TLSv1.1 |||
||| TLSv1.2 |||
||+---------------------------------------------+||
||| SupportedLoadBalancerTypes |||
||+---------------------------------------------+||
||| application |||
||| network |||
||+---------------------------------------------+||
そのため、TLSv1.2とTLSv1.3をサポートしているセキュリティポリシーELBSecurityPolicy-TLS13-1-2-2021-06
に更新することにしました。
$ aws elbv2 describe-ssl-policies --names ELBSecurityPolicy-TLS13-1-2-2021-06 --output table
---------------------------------------------------
| DescribeSSLPolicies |
+-------------------------------------------------+
|| SslPolicies ||
|+-----------------------------------------------+|
|| Name ||
|+-----------------------------------------------+|
|| ELBSecurityPolicy-TLS13-1-2-2021-06 ||
|+-----------------------------------------------+|
||| Ciphers |||
||+--------------------------------+------------+||
||| Name | Priority |||
||+--------------------------------+------------+||
||| TLS_AES_128_GCM_SHA256 | 1 |||
||| TLS_AES_256_GCM_SHA384 | 2 |||
||| TLS_CHACHA20_POLY1305_SHA256 | 3 |||
||| ECDHE-ECDSA-AES128-GCM-SHA256 | 4 |||
||| ECDHE-RSA-AES128-GCM-SHA256 | 5 |||
||| ECDHE-ECDSA-AES128-SHA256 | 6 |||
||| ECDHE-RSA-AES128-SHA256 | 7 |||
||| ECDHE-ECDSA-AES256-GCM-SHA384 | 8 |||
||| ECDHE-RSA-AES256-GCM-SHA384 | 9 |||
||| ECDHE-ECDSA-AES256-SHA384 | 10 |||
||| ECDHE-RSA-AES256-SHA384 | 11 |||
||+--------------------------------+------------+||
||| SslProtocols |||
||+---------------------------------------------+||
||| TLSv1.2 |||
||| TLSv1.3 |||
||+---------------------------------------------+||
||| SupportedLoadBalancerTypes |||
||+---------------------------------------------+||
||| application |||
||| network |||
||+---------------------------------------------+||
ELBに設定されているリスナーのセキュリティポリシーをAWSコンソールから更新しました。
Terraformから変更する場合は、aws_lb_listener
のssl_policy
を新しいセキュリティポリシーに置き換えればOKです。
resource "aws_lb_listener" "https_443_prod" {
load_balancer_arn = aws_lb.alb_prod.arn
port = "443"
protocol = "HTTPS"
ssl_policy = "ELBSecurityPolicy-TLS13-1-2-2021-06"
certificate_arn = data.aws_ssm_parameter.cert_arn.value
default_action {
type = "fixed-response"
fixed_response {
content_type = "text/plain"
message_body = "Not Found"
status_code = "404"
}
}
}
また、TLSv1.1による通信が実際に行われているかどうかは、ALBのアクセスログをAthenaでクエリすることでも確認できます。
SELECT *
FROM alb_access_logs
WHERE ssl_protocol = 'TLSv1.1'
アクセスログをAthenaでクエリする方法については、以前の記事をご覧ください。
Aurora(RDS)
Auroraのカスタムパラメータグループを使用して、TLSバージョンを指定することが可能です。
tls_version
パラメータを設定することで、TLSv1.2とTLSv1.3のみを許可するようにします。また、require_secure_transport
をON
に設定することで、安全なトランスポートを要求することも可能です。
AWSコンソールからアタッチしているパラメータグループの設定を開き、それぞれ更新します。
Terraformで設定する場合は、 aws_rds_cluster_parameter_group
に変更するパラメータ用のparameter
ブロックを追加します。
resource "aws_rds_cluster_parameter_group" "aurora_cluster_parameter_group_prod" {
name = "aurora-cluster-parameter-group-prod"
family = "aurora-mysql8.0"
description = "Aurora MySQL Cluster Parameter Group for prod"
parameter {
name = "require_secure_transport"
value = "ON"
apply_method = "pending-reboot"
}
parameter {
name = "tls_version"
value = "TLSv1.2,TLSv1.3"
apply_method = "pending-reboot"
}
}
参考資料