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 암호군을 포함하므로 조직의 전체 암호군 기준을 충족하는지 별도로 확인하세요.

참조