1
0

AWSのELBとRDS AuroraでTLSv1.1以下を無効化する方法

Posted at

セキュリティチェックシートに「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コンソールから更新しました。
スクリーンショット 2024-09-02 17.09.22.png

Terraformから変更する場合は、aws_lb_listenerssl_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_transportONに設定することで、安全なトランスポートを要求することも可能です。

AWSコンソールからアタッチしているパラメータグループの設定を開き、それぞれ更新します。

image.png

image.png

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"
  }
}

参考資料

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0