Go를 실행하는 EC2 인스턴스에서 HTTPS 종료 - AWS Elastic Beanstalk

Go를 실행하는 EC2 인스턴스에서 HTTPS 종료

Go 컨테이너 유형의 경우 구성 파일과 HTTPS를 사용하도록 nginx 서버를 구성하는 nginx 구성 파일로 HTTPS를 활성화합니다.

지침에 따라 인증서와 프라이빗 키 자리 표시자를 바꿔 구성 파일에 다음 조각을 추가한 후, 이를 소스 번들의 .ebextensions 디렉터리에 저장합니다. 구성 파일은 다음 작업을 수행합니다.

  • Resources 키는 환경의 인스턴스에서 사용하는 보안 그룹에서 포트 443을 활성화합니다.

  • files 키는 인스턴스에 다음 파일을 만듭니다.

    /etc/pki/tls/certs/server.crt

    인스턴스에 인증서 파일을 만듭니다. 인증서 파일 내용을 본인의 인증서 내용으로 바꿉니다.

    참고

    YAML은 일정한 들여쓰기를 사용합니다. 예제 구성 파일의 콘텐츠를 바꿀 때 들여쓰기 레벨을 일치시키고, 텍스트 편집기가 탭 문자 대신 공백을 사용해 들여쓰기를 하도록 합니다.

    중간 인증서를 보유한 경우, 사이트 인증 후 server.crt에 포함시킵니다.

    -----BEGIN CERTIFICATE----- certificate file contents -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- first intermediate certificate -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- second intermediate certificate -----END CERTIFICATE-----
    /etc/pki/tls/certs/server.key

    인스턴스에 프라이빗 키 파일을 만듭니다. 프라이빗 키 내용을 인증서 요청 또는 자체 서명된 인증서를 만들 때 사용한 프라이빗 키 내용으로 바꿉니다.

  • container_commands 키는 서버가 nginx 구성 파일을 로드할 수 있도록 모든 항목이 구성된 후 nginx 서버를 다시 시작합니다.

예 .ebextensions/https-instance.config
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 # See note below. -----END RSA PRIVATE KEY----- container_commands: 01restart_nginx: command: "service nginx restart"
참고

프라이빗 키를 포함한 구성 파일을 소스 제어에 커밋하지 마십시오. 구성을 테스트하고 작동 여부를 확인한 후 Amazon S3에 프라이빗 키를 저장하고 배포 중에 다운로드하도록 구성을 변경합니다. 지침은 프라이빗 키를 Amazon S3에 안전하게 저장 섹션을 참조하세요.

소스 번들의 .conf 디렉터리에서 .ebextensions/nginx/conf.d/ 확장명을 사용하는 파일에 다음을 놓습니다(예: .ebextensions/nginx/conf.d/https.conf). app_port를 애플리케이션이 수신 대기하는 포트 번호로 바꿉니다. 이 예제에서는 SSL을 사용하여 포트 443에서 수신 대기하도록 nginx 서버를 구성합니다. Go 플랫폼의 이러한 구성 파일에 대한 자세한 내용은 프록시 서버 구성 단원을 참조하십시오.

예 .ebextensions/nginx/conf.d/https.conf
# HTTPS server server { listen 443; server_name localhost; ssl on; ssl_certificate /etc/pki/tls/certs/server.crt; ssl_certificate_key /etc/pki/tls/certs/server.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { proxy_pass http://localhost:app_port; proxy_set_header Connection ""; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; } }

단일 인스턴스 환경에서 포트 443의 트래픽을 허용하도록 인스턴스의 보안 그룹도 수정해야 합니다. 다음 구성 파일은 CloudFormation 함수를 이용해 보안 그룹의 ID를 검색하고, 거기에 규칙을 추가합니다.

예 .ebextensions/https-instance-single.config
Resources: sslSecurityGroupIngress: Type: AWS::EC2::SecurityGroupIngress Properties: GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]} IpProtocol: tcp ToPort: 443 FromPort: 443 CidrIp: 0.0.0.0/0

로드 밸런싱된 환경에서 로드 밸런서가 안전한 트래픽을 그대로 통과시키거나 종단 간 암호화를 위해 암호 해독과 재암호화하도록 구성합니다.