로드 밸런싱된 Elastic Beanstalk 환경에서 종단 간 암호화 구성 - AWS Elastic Beanstalk

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

로드 밸런싱된 Elastic Beanstalk 환경에서 종단 간 암호화 구성

사용자의 애플리케이션에서는 로드 밸런서에서 보안 연결을 종료하고 백엔드에서 HTTP를 사용하면 충분할 수도 있습니다. 연결에 포함되지 않는 인스턴스는 동일한 계정에서 실행되더라도 AWS 리소스 간의 네트워크 트래픽을 수신할 수 없습니다.

하지만 엄격한 외부 규정을 준수해야 하는 애플리케이션을 개발 중인 경우 모든 네트워크 연결을 보호해야 할 수 있습니다. 이러한 요구 사항을 충족하도록 Elastic Beanstalk 콘솔이나 구성 파일을 사용하여 Elastic Beanstalk 환경의 로드 밸런서를 백엔드 인스턴스에 안전하게 연결할 수 있습니다. 다음 절차는 구성 파일에 중점을 둡니다.

먼저 로드 밸런서에 보안 리스너를 추가합니다(아직 없는 경우).

또한 보안 포트를 수신하고 HTTPS 연결을 종료하도록 사용자 환경에서 인스턴스를 구성해야 합니다. 구성은 플랫폼에 따라 다릅니다. 자세한 내용은 인스턴스에서 HTTPS 연결을 종료하도록 애플리케이션 구성 단원을 참조하세요. EC2 인스턴스에 대한 자체 서명된 인증서를 문제 없이 사용할 수 있습니다.

그런 다음 애플리케이션에서 사용되는 보안 포트에서 HTTPS를 사용하여 트래픽을 전달하도록 리스너를 구성합니다. 환경에서 사용되는 로드 밸런서 유형에 따라 다음 구성 파일 중 하나를 사용합니다.

.ebextensions/https-reencrypt-clb.config

이 구성 파일을 Classic Load Balancer와 함께 사용합니다. 로드 밸런스 구성 외에도, 구성 파일은 로드 밸런서에서 안전하게 연결할 수 있도록 하기 위해 포트 443 및 HTTPS를 사용하도록 기본 상태 확인을 변경합니다.

option_settings: aws:elb:listener:443: InstancePort: 443 InstanceProtocol: HTTPS aws:elasticbeanstalk:application: Application Healthcheck URL: HTTPS:443/

.ebextensions/https-reencrypt-alb.config

이 구성 파일을 Application Load Balancer와 함께 사용합니다.

option_settings: aws:elbv2:listener:443: DefaultProcess: https ListenerEnabled: 'true' Protocol: HTTPS aws:elasticbeanstalk:environment:process:https: Port: '443' Protocol: HTTPS

.ebextensions/https-reencrypt-nlb.config

이 구성 파일을 Network Load Balancer와 함께 사용합니다.

option_settings: aws:elbv2:listener:443: DefaultProcess: https ListenerEnabled: 'true' aws:elasticbeanstalk:environment:process:https: Port: '443'

Application Load Balancer에는 특정 경로로 전송되는 트래픽을 위한 동일한 포트에 기본이 아닌 리스너가 있을 수 있기 때문에 DefaultProcess 옵션이라는 이름이 지정되었습니다. 자세한 내용은 Application Load Balancer 단원을 참조하세요. Network Load Balancer의 경우 이 옵션은 이 리스너의 대상 프로세스만 지원합니다.

이 예제에서는 프로세스가 보안(HTTPS) 트래픽을 수신하기 때문에 프로세스 이름을 https로 지정했습니다. Network Load Balancer는 TCP로만 작동하기 때문에 이 리스너는 TCP 프로토콜을 사용하여 트래픽을 대상 포트의 프로세스로 전송합니다. HTTP와 HTTPS 네트워크 트래픽은 TCP 최상위에서 구현되기 때문에 이렇게 해도 됩니다.

참고

EB CLI 및 Elastic Beanstalk 콘솔에서 위의 옵션에 대한 권장 값을 적용합니다. 구성 파일을 사용해 동일하게 구성하고자 하는 경우 이러한 설정을 제거해야 합니다. 자세한 내용은 권장 값 단원을 참조하십시오.

다음 작업에서는 로드 밸런서의 보안 그룹을 수정해 트래픽을 허용해야 합니다. 로드 밸런서의 보안 그룹은 환경을 시작하는 Amazon Virtual Private Cloud(Amazon VPC)에 따라 기본 VPC 또는 사용자 지정 VPC가 달라집니다. 기본 VPC에서는 모든 로드 밸런서에서 사용 가능한 기본 보안 그룹을 Elastic Load Balancing에서 제공합니다. 사용자가 생성한 Amazon VPC에서는 로드 밸런서에서 사용할 보안 그룹을 Elastic Beanstalk에서 생성합니다.

두 시나리오를 모두 지원하려면 보안 그룹을 생성하고 Elastic Beanstalk에 해당 보안 그룹을 사용하도록 지시할 수 있습니다. 다음 구성 파일에서는 보안 그룹을 생성하여 로드 밸런서에 연결합니다.

.ebextensions/https-lbsecuritygroup.config

option_settings: # Use the custom security group for the load balancer aws:elb:loadbalancer: SecurityGroups: '`{ "Ref" : "loadbalancersg" }`' ManagedSecurityGroup: '`{ "Ref" : "loadbalancersg" }`' Resources: loadbalancersg: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: load balancer security group VpcId: vpc-######## SecurityGroupIngress: - IpProtocol: tcp FromPort: 443 ToPort: 443 CidrIp: 0.0.0.0/0 - IpProtocol: tcp FromPort: 80 ToPort: 80 CidrIp: 0.0.0.0/0 SecurityGroupEgress: - IpProtocol: tcp FromPort: 80 ToPort: 80 CidrIp: 0.0.0.0/0

강조 표시된 텍스트를 기본 또는 사용자 지정 VPC ID로 바꿉니다. 이전의 예제에는 HTTP 연결 허용을 위해 포트 80을 통한 송수신이 포함됩니다. 보안 연결만 허용하려면 해당 속성을 제거할 수 있습니다.

마지막으로 로드 밸런서의 보안 그룹과 인스턴스의 보안 그룹 간의 포트 443을 통한 통신을 허용하는 송수신 규칙을 추가합니다.

.ebextensions/https-backendsecurity.config

Resources: # Add 443-inbound to instance security group (AWSEBSecurityGroup) httpsFromLoadBalancerSG: Type: AWS::EC2::SecurityGroupIngress Properties: GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]} IpProtocol: tcp ToPort: 443 FromPort: 443 SourceSecurityGroupId: {"Fn::GetAtt" : ["loadbalancersg", "GroupId"]} # Add 443-outbound to load balancer security group (loadbalancersg) httpsToBackendInstances: Type: AWS::EC2::SecurityGroupEgress Properties: GroupId: {"Fn::GetAtt" : ["loadbalancersg", "GroupId"]} IpProtocol: tcp ToPort: 443 FromPort: 443 DestinationSecurityGroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}

이 작업을 보안 그룹 생성과 별도로 수행하여 순환 종속성을 생성하지 않고 원본 보안 그룹과 대상 보안 그룹을 제한할 수 있습니다.

이전의 작업이 모두 완료된 후에는 로드 밸런서가 HTTPS를 사용하여 백엔드 인스턴스에 안전히 연결됩니다. 로드 밸런서에서는 인스턴스의 인증서가 자체 서명된 인증서이든 신뢰할 수 있는 인증 기관에서 발급한 인증서이든 상관없이 제공된 인증서를 수락합니다.

이 동작은 특정 인증서만 신뢰하도록 규정하는 정책을 로드 밸런서에 추가하여 변경할 수 있습니다. 다음 구성 파일은 두 정책을 생성합니다. 한 정책은 퍼블릭 인증서를 지정하고 다른 정책은 로드 밸런서에 인스턴스 포트 443 연결에 대한 인증서만 신뢰하도록 규정합니다.

.ebextensions/https-backendauth.config

option_settings: # Backend Encryption Policy aws:elb:policies:backendencryption: PublicKeyPolicyNames: backendkey InstancePorts: 443 # Public Key Policy aws:elb:policies:backendkey: PublicKey: | -----BEGIN CERTIFICATE----- ################################################################ ################################################################ ################################################################ ################################################################ ################################################ -----END CERTIFICATE-----

강조 표시된 텍스트를 EC2 인스턴스의 퍼블릭 인증서 내용으로 대체합니다.