ELB の TLS セキュリティポリシーの確認

Classic ELB の有効な TLS ポリシーから旧式のプロトコルと弱い暗号スイートを除き、実際のクライアントとの互換性を確認してください。

説明

Classic Load Balancer の HTTPS・SSL リスナーが弱い暗号スイートや旧式の TLS バージョンを許可すると、クライアント接続の保護が弱まる可能性があります。HTTPS を使用するだけでは十分ではありません。実際にリスナーへ関連付けられたセキュリティポリシーを確認してください。

想定される影響

  • 弱い組み合わせで通信すると、通信の保護が弱まったり、組織の TLS 要件を満たせなかったりする場合があります。
  • 互換性を確認せずにポリシーを変えると、古いクライアントが接続できなくなる場合があります。

対処方法

  • そのロードバランサーの種類で使えるポリシーから、必要な TLS バージョンと暗号スイートの基準を満たすものを選んでください。不要な弱い暗号スイートや旧式のプロトコルは無効にしてください。
  • リスナーの実際のポリシー関連付け、証明書、クライアント互換性を確認し、変更後に TLS 接続をテストしてください。
  • クライアントとロードバランサー間の TLS と、転送先サーバーまでの暗号化は別々に管理してください。より強いポリシーや TLS 1.3 が必要なら、それらに対応するロードバランサーへの移行を検討してください。

例

同じ VPC 内のサブネット・セキュリティグループと、有効な証明書 ARN を指定する Classic ELB の例です。転送先の登録とネットワークルールは別途構成してください。どちらも転送先サーバーには HTTP を使用するため、通信経路全体を暗号化する構成ではありません。

変更前

yaml
Parameters:
  SubnetIds:
    Type: List<AWS::EC2::Subnet::Id>
  SecurityGroupIds:
    Type: List<AWS::EC2::SecurityGroup::Id>
  CertificateArn:
    Type: String
Resources:
  MyLoadBalancer:
    Type: AWS::ElasticLoadBalancing::LoadBalancer
    Properties:
      Subnets: !Ref SubnetIds
      SecurityGroups: !Ref SecurityGroupIds
      Listeners:
        - InstancePort: "80"
          InstanceProtocol: HTTP
          LoadBalancerPort: "443"
          Protocol: HTTPS
          SSLCertificateId: !Ref CertificateArn
          PolicyNames:
            - My-SSLNegotiation-Policy
      Policies:
        - PolicyName: My-SSLNegotiation-Policy
          PolicyType: SSLNegotiationPolicyType
          Attributes:
            - Name: Reference-Security-Policy
              Value: ELBSecurityPolicy-2015-05

ELBSecurityPolicy-2015-05 は TLS 1.0・1.1 と 3DES 暗号スイートを許可します。

変更後

yaml
Parameters:
  SubnetIds:
    Type: List<AWS::EC2::Subnet::Id>
  SecurityGroupIds:
    Type: List<AWS::EC2::SecurityGroup::Id>
  CertificateArn:
    Type: String
Resources:
  MyLoadBalancer:
    Type: AWS::ElasticLoadBalancing::LoadBalancer
    Properties:
      Subnets: !Ref SubnetIds
      SecurityGroups: !Ref SecurityGroupIds
      Listeners:
        - InstancePort: "80"
          InstanceProtocol: HTTP
          LoadBalancerPort: "443"
          Protocol: HTTPS
          SSLCertificateId: !Ref CertificateArn
          PolicyNames:
            - My-SSLNegotiation-Policy
      Policies:
        - PolicyName: My-SSLNegotiation-Policy
          PolicyType: SSLNegotiationPolicyType
          Attributes:
            - Name: Reference-Security-Policy
              Value: ELBSecurityPolicy-TLS-1-2-2017-01

ELBSecurityPolicy-TLS-1-2-2017-01 は TLS 1.2 のみを許可し、3DES を除外します。ただし、静的 RSA と CBC 暗号スイートも含むため、組織の暗号スイート要件全体を満たすか別途確認してください。

参考資料