在執行 Python 的 EC2 執行個體上終止 HTTPS - AWS Elastic Beanstalk

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

在執行 Python 的 EC2 執行個體上終止 HTTPS

透過 Web 伺服器閘道界面 (WSGI) 使用 Apache HTTP 伺服器的 Python 容器類型,您可使用組態檔案,讓 Apache HTTP 伺服器能夠使用 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

針對使用負載平衡的環境,您應設定負載平衡器,使其以未處理之方式通過安全流量,或針對端點對端點加密進行解密與重新加密