Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
Elastic Beanstalk 환경에 맞게 HTTPS를 구성하려면 어떻게 해야 합니까?
로드 밸런서의 데이터를 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스로 암호화하도록 AWS Elastic Beanstalk 환경에 HTTPS를 구성하고 싶습니다.
간략한 설명
Elastic Beanstalk 환경에 사용자 지정 도메인 이름을 구성한 경우 HTTPS를 사용하여 사용자가 웹 사이트에 안전하게 연결할 수 있도록 하십시오. 도메인 이름을 소유하지 않은 경우 개발 및 테스트 목적으로 자체 서명된 인증서와 함께 HTTPS를 사용하십시오.
단일 인스턴스 환경의 경우 프라이빗 키와 인증서를 로컬에서 만들어야 합니다. 그런 다음, 인증서를 AWS Identity and Access Management(IAM)에 업로드합니다.
AWS Certificate Manager(ACM)와 함께 로드 밸런서를 사용하여 프로그래밍 방식으로 서버 인증서를 프로비저닝, 관리 및 배포하는 것이 모범 사례입니다. 또한 AWS Command Line Interface(AWS CLI)를 사용하여 타사 또는 자체 서명된 인증서와 프라이빗 키를 IAM에 업로드할 수 있습니다. AWS 리전에서 ACM을 사용할 수 없는 경우 AWS CLI를 사용하십시오.
해결 방법
Elastic Beanstalk 환경 준비
Amazon Route 53을 사용하여 새 도메인을 등록하거나 다른 도메인 공급자를 등록하여 트래픽을 Elastic Beanstalk 환경으로 라우팅할 수 있습니다.
환경 URL에 리전이 포함된 경우 별칭 이름을 생성하십시오. 환경 URL에 리전이 포함되어 있지 않은 경우 CNAME 레코드를 생성하십시오.
**중요:**2016년 이전에 만든 환경에 CNAME 레코드를 사용할 수 있습니다. 루트 도메인 또는 네이키드 도메인이라고도 하는 Zone Apex 도메인에는 CNAME 레코드를 사용할 수 없습니다. 자세한 내용은 별칭 및 CNAME 레코드 비교를 참조하십시오.
그런 다음, ACM에서 인증서를 생성하거나 타사 또는 자체 서명된 인증서와 프라이빗 키를 IAM에 업로드합니다.
로드 밸런서에 리스너 추가
다음 단계를 완료하십시오.
- Elastic Beanstalk 콘솔을 엽니다.
- 환경을 선택합니다.
- 탐색 창에서 구성을 선택합니다.
- 로드 밸런서 범주에서 수정을 선택합니다.
- 포트 443에 대한 리스너를 추가하려면 Elastic Beanstalk 환경의 로드 밸런서에 대한 단계를 완료합니다.
참고: Application Load Balancer 또는 Network Load Balancer를 사용하는 것이 가장 좋습니다.
Application Load Balancer의 경우
다음 단계를 완료하십시오.
- 리스너 추가를 선택합니다.
- 포트에 수신 트래픽 포트를 입력합니다. 예를 들면 443입니다.
- 프로토콜에서 HTTPS를 선택합니다.
- SSL 인증서에서 인증서를 선택한 다음, 드롭다운 목록에서 SSL 정책을 선택합니다.
- 추가를 선택한 다음, 적용을 선택합니다.
Network Load Balancer의 경우
다음 단계를 완료하십시오.
- 리스너 추가를 선택합니다.
- 포트에 수신 트래픽 포트를 입력합니다. 예를 들면 443입니다.
- 추가를 선택한 다음, 적용을 선택합니다.
Classic Load Balancer의 경우
다음 단계를 완료하십시오.
- 리스너 추가를 선택합니다.
- 포트에 수신 트래픽 포트를 입력합니다. 예를 들면 443입니다.
- 프로토콜에서 HTTPS를 선택합니다.
- 인스턴스 포트에 80을 입력합니다.
- 인스턴스 프로토콜에서 HTTP를 선택합니다.
- SSL 인증서에서 인증서를 선택한 다음, 드롭다운 목록에서 SSL 정책을 선택합니다.
- 추가를 선택한 다음, 적용을 선택합니다.
HTTPS 연결을 중단하도록 인스턴스 구성
HTTPS 연결을 중지하도록 인스턴스를 구성하려면 .ebextensions 구성 파일을 사용하여 인스턴스에서 실행되는 소프트웨어를 수정하십시오. 자세한 내용은 Linux에서 .NET Core를 실행하는 Amazon EC2 인스턴스의 HTTPS 종료를 참조하십시오. 또한 구성 파일을 사용하여 보안 연결을 허용하도록 보안 그룹을 수정할 수 있습니다.
중요: 단일 인스턴스 환경을 사용하는 경우 다음 단계를 건너뛰십시오. 단일 인스턴스 환경에서 인스턴스의 HTTPS(종단 간 HTTPS) 중지 섹션의 단계를 완료합니다.
HTTPS 연결을 중지하도록 인스턴스를 구성하려면 다음 단계를 완료하십시오.
-
로드 밸런서에 보안 리스너를 추가합니다. Elastic Beanstalk 환경의 로드 밸런서 유형에 따라 다음 구성 파일 중 하나를 사용합니다.
Classic Load Balancer의 경우 .ebextensions/https-reencrypt-clb.config 파일을 사용합니다.option_settings: aws:elb:listener:443: InstancePort: 443 InstanceProtocol: HTTPS aws:elasticbeanstalk:application: Application Healthcheck URL: HTTPS:443/Application Load Balancer의 경우 .ebextensions/https-reencrypt-alb.config 파일을 사용합니다.
option_settings: aws:elbv2:listener:443: DefaultProcess: https ListenerEnabled: 'true' Protocol: HTTPS aws:elasticbeanstalk:environment:process:https: Port: '443' Protocol: HTTPSNetwork Load Balancer의 경우 .ebextensions/https-reencrypt-nlb.config 파일을 사용합니다.
option_settings: aws:elbv2:listener:443: DefaultProcess: https ListenerEnabled: 'true' aws:elasticbeanstalk:environment:process:https: Port: '443' -
포트 443에서 트래픽을 수신하도록 로드 밸런서를 업데이트합니다.
새 보안 그룹을 생성한 다음, Elastic Beanstalk이 보안 그룹을 사용하여 포트 443에서 트래픽을 수신하도록 할 수 있습니다. 예를 들어, 다음 .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참고: VpcId를 환경에 적합한 값으로 바꾸십시오. 위 예에는 HTTP 연결을 허용하는 포트 80을 통한 입력 및 출력이 포함됩니다. 보안 연결만 허용하려면 SecurityGroupIngress 섹션에서 포트 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"]} 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"]} -
다음 스니펫을 구성 파일에 추가하고 .ebextensions 디렉터리에 저장합니다.
files: /etc/pki/tls/certs/server.crt: content: | -----BEGIN CERTIFICATE----- certificate file contents -----END CERTIFICATE----- /etc/pki/tls/certs/server.key: content: | -----BEGIN RSA PRIVATE KEY----- private key contents -----END RSA PRIVATE KEY-----참고: certificate file contents를 인증서 파일 콘텐츠로 바꾸고, private key contents를 프라이빗 키 콘텐츠로 바꾸십시오.
HTTPS 종료 구성은 솔루션 스택에 따라 다릅니다. 모든 솔루션 스택의 .ebextensions는 .ebextensions의 프라이빗 키 및 서버 인증서의 값을 하드 코딩합니다. 이러한 파일을 더욱 안전하게 보호하려면 파일 콘텐츠를 Amazon Simple Storage Service(Amazon S3)에 업로드한 다음, S3Auth를 사용하여 Amazon EC2로 가져옵니다.
-
파일 키를 사용하여 /etc/pki/tls/certs/server.crt 인스턴스에 다음 파일을 생성합니다.
-
다음 인증서 파일을 사용하여 인스턴스에 인증서 파일을 생성합니다.
-----BEGIN CERTIFICATE----- certificate file contents -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- first intermediate certificate -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- second intermediate certificate -----END CERTIFICATE-----참고: certificate file contents를 인증서 내용으로 바꾸십시오. 중간 인증서가 있는 경우 사이트 인증서 뒤의 server.crt에 포함하십시오.
-
/etc/pki/tls/certs/server.key를 사용하여 인스턴스에 프라이빗 키 파일을 생성합니다.
참고: private key contents를 인증서 요청 또는 자체 서명된 인증서를 만드는 데 사용된 프라이빗 키의 내용으로 바꾸십시오. -
HTTPS를 종료하도록 인스턴스에서 실행되는 프록시 서버를 구성합니다. 모든 플랫폼은 동일한 방식으로 프록시 서버 구성을 시작합니다.
-
애플리케이션 번들의 루트에 있는 .ebextensions라는 디렉터리에 구성 파일을 추가하여 환경에 구성 파일을 배포합니다.
-
구성 파일이 포함된 소스 코드를 배포합니다.
단일 인스턴스 환경에서 인스턴스의 HTTPS(종단 간 HTTPS) 중지
.ebextensions 파일을 사용하면 포트 443을 통해 Elastic Beanstalk 애플리케이션이 실행되는 인스턴스로 들어오는 트래픽을 허용할 수 있습니다.
예:
Resources: sslSecurityGroupIngress: Type: AWS::EC2::SecurityGroupIngress Properties: GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]} IpProtocol: tcp ToPort: 443 FromPort: 443 CidrIp: 0.0.0.0/0
그런 다음, HTTPS를 종료하도록 인스턴스에서 실행되는 프록시 서버를 구성합니다.
참고: HTTPS 종료 구성은 솔루션 스택에 따라 다릅니다. 모든 솔루션 스택의 .ebextensions는 .ebextensions의 프라이빗 키 및 서버 인증서의 값을 하드 코딩합니다. 이러한 파일을 더욱 안전하게 보호하려면 파일 콘텐츠를 Amazon Simple Storage Service(Amazon S3)에 업로드하고 S3Auth를 사용하여 Amazon EC2로 가져옵니다.
환경에 구성 파일을 배포하려면 애플리케이션 번들의 루트에 있는 .ebextensions라는 디렉터리에 구성 파일을 추가합니다. 그런 다음 구성 파일이 포함된 소스 코드를 배포합니다.
관련 콘텐츠
- 질문됨 2년 전

