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

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

Python을 실행하는 EC2 인스턴스에서 HTTPS 종료

WSGI(Web Server Gateway Interface)가 있는 Apache HTTP Server를 사용하는 Python 컨테이너 유형의 경우, 구성 파일을 사용하여 Apache HTTP Server가 HTTPS를 사용하도록 활성화합니다.

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

  • packages 키는 yum을 사용하여 mod24_ssl을 설치합니다.

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

    /etc/httpd/conf.d/ssl.conf

    Apache 서버를 구성합니다. 애플리케이션 이름이 application.py가 아닌 경우, WSGIScriptAlias 값에서 강조 표시된 텍스트를 애플리케이션의 로컬 경로로 바꿉니다. 예를 들어 django 애플리케이션은 django/wsgi.py에 있을 수 있습니다. 위치는 환경에 설정한 WSGIPath 옵션의 값과 일치해야 합니다.

    애플리케이션 요구 사항에 따라 python-path 파라미터에 다른 디렉터리를 추가해야 할 수도 있습니다.

    /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 키는 모든 것이 구성된 후 httpd 서비스를 중지하여 서비스에서 새 https.conf 파일과 인증서를 사용할 수 있도록 합니다.

참고

이 예제는 Python 플랫폼을 사용하는 환경에서만 작동합니다.

예 .ebextensions/https-instance.config
packages: yum: mod24_ssl : [] files: /etc/httpd/conf.d/ssl.conf: mode: "000644" owner: root group: root content: | LoadModule wsgi_module modules/mod_wsgi.so WSGIPythonHome /opt/python/run/baselinenv WSGISocketPrefix run/wsgi WSGIRestrictEmbedded On Listen 443 <VirtualHost *:443> SSLEngine on SSLCertificateFile "/etc/pki/tls/certs/server.crt" SSLCertificateKeyFile "/etc/pki/tls/certs/server.key" Alias /static/ /opt/python/current/app/static/ <Directory /opt/python/current/app/static> Order allow,deny Allow from all </Directory> WSGIScriptAlias / /opt/python/current/app/application.py <Directory /opt/python/current/app> Require all granted </Directory> WSGIDaemonProcess wsgi-ssl processes=1 threads=15 display-name=%{GROUP} \ python-path=/opt/python/current/app \ python-home=/opt/python/run/venv \ home=/opt/python/current/app \ user=wsgi \ group=wsgi WSGIProcessGroup wsgi-ssl </VirtualHost> /etc/pki/tls/certs/server.crt: mode: "000400" owner: root group: root content: | -----BEGIN CERTIFICATE----- certificate file contents -----END CERTIFICATE----- /etc/pki/tls/certs/server.key: mode: "000400" owner: root group: root content: | -----BEGIN RSA PRIVATE KEY----- private key contents # See note below. -----END RSA PRIVATE KEY----- container_commands: 01killhttpd: command: "killall httpd" 02waitforhttpddeath: command: "sleep 3"
참고

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

단일 인스턴스 환경에서 포트 443의 트래픽을 허용하도록 인스턴스의 보안 그룹도 수정해야 합니다. 다음 구성 파일은 AWS 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

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