

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

# Python을 실행하는 EC2 인스턴스에서 HTTPS 종료
<a name="https-singleinstance-python"></a>

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

지침에 따라 인증서와 프라이빗 키 구성 요소를 바꿔 [구성 파일](ebextensions.md)에 다음 조각을 추가한 후, 이를 소스 번들의 `.ebextensions` 디렉터리에 저장합니다. 구성 파일은 다음 작업을 수행합니다.
+ `packages` 키는 yum을 사용하여 `mod_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](create-deploy-python-container.md) 플랫폼을 사용하는 환경에서만 작동합니다.

**Example .ebextensions/https-instance.config**  

```
packages:
  yum:
    mod_ssl: []
    
files:
  /etc/httpd/conf.d/ssl.conf:
    mode: "000644"
    owner: root
    group: root
    content: |
      LoadModule wsgi_module modules/mod_wsgi.so
      WSGIPythonHome /var/app/venv/staging-LQM1lest
      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/ /var/app/current/static/
        <Directory /var/app/current/static>
        Order allow,deny
        Allow from all
        </Directory>
        
        WSGIScriptAlias / /var/app/current/application.py
        
        <Directory /var/app/current>
        Require all granted
        </Directory>
        
        WSGIDaemonProcess wsgi-ssl processes=1 threads=15 display-name=%{GROUP} \
          python-path=/var/app/current \
          python-home=/var/app/venv/staging-LQM1lest \
          home=/var/app/current \
          user=webapp \
          group=webapp
        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에 안전하게 저장](https-storingprivatekeys.md) 섹션을 참조하세요.

**Amazon Linux 2023 환경에 대한 참고 사항**  
Amazon Linux 2023에서는 `mod_wsgi`가 패키지 리포지토리에 포함되어 있지 않으므로 별도로 설치해야 합니다. 설치 지침은 PyPI의 [mod\$1wsgi](https://pypi.org/project/mod-wsgi/)를 참조하세요.

단일 인스턴스 환경에서 포트 443의 트래픽을 허용하도록 인스턴스의 보안 그룹도 수정해야 합니다. 다음 구성 파일은 CloudFormation [함수](ebextensions-functions.md)를 사용하여 보안 그룹의 ID를 검색하고 여기에 규칙을 추가합니다.

**Example .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
```

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