Encerrar o HTTPS em instâncias do EC2 que executam Python
Para os tipos de contêiner Python que usam Apache HTTP Server com a Web Server Gateway Interface (WSGI), você usa um arquivo de configuração para habilitar o Apache HTTP Server a usar o HTTPS.
Adicione o seguinte trecho ao seu arquivo de configuração, substituindo o material de certificado e de chave privada como instruído, e salve-o no diretório .ebextensions do seu pacote de origem. O arquivo de configuração executa as seguintes tarefas:
-
A chave
packagesusa o yum para instalarmod_ssl. -
A chave
filescria os seguintes arquivos na instância:/etc/httpd/conf.d/ssl.conf-
Configura o servidor Apache. Se o seu aplicativo não estiver nomeado como
application.py, substitua o texto destacado no valor paraWSGIScriptAliaspelo caminho local para seu aplicativo. Por exemplo, um aplicativo django pode estar emdjango/wsgi.py. A localização deve corresponder ao valor da opçãoWSGIPathque você definiu para seu ambiente.De acordo com os requisitos do seu aplicativo, você também pode precisar adicionar outros diretórios ao parâmetro python-path.
/etc/pki/tls/certs/server.crt-
Cria o arquivo de certificado na instância. Substitua o
conteúdo do arquivo de certificadopelo conteúdo do seu certificado.nota
YAML depende de um recuo consistente. Compare o nível de recuo ao substituir o conteúdo em um arquivo de configuração de exemplo e se confira se o editor de texto usa espaços, e não caracteres de tabulação, como recuo.
Se você tiver certificados intermediários, inclua-os no
server.crtdepois do certificado do site.-----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-
Cria o arquivo de chave privada na instância. Substitua o
conteúdo da chave privadapelo conteúdo da chave privada usada para criar a solicitação de certificado ou o certificado autoassinado.
-
A chave
container_commandsinterrompe o serviço httpd após tudo estar configurado, para que ele use o novo certificado e o arquivohttps.conf.
nota
O exemplo funciona apenas em ambientes usando a Plataforma Python.
exemplo .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"nota
Evite confirmar um arquivo de configuração que contenha sua chave privada para o controle de origem. Depois que você tiver testado a configuração e confirmado se ela está funcionando, armazene a chave privada no Amazon S3 e modifique a configuração para fazer download dele durante a implantação. Para instruções, consulte Armazenar chaves privadas com segurança no Amazon S3.
Observação para ambientes Amazon Linux 2023
No Amazon Linux 2023, mod_wsgi deve ser instalado separadamente, pois não está disponível nos repositórios de pacotes. Para obter instruções de instalação, consulte mod_wsgi
Em um ambiente de instância única, você também deve modificar o grupo de segurança da instância para habilitar o tráfego na porta 443. O seguinte arquivo de configuração recupera a ID do grupo de segurança usando uma função CloudFormation e adiciona uma regra a ela.
exemplo .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/0Para um ambiente com balanceamento de carga, configure o balanceador de carga para passar o tráfego seguro inalterado ou descriptografar e criptografar novamente para criptografia de ponta a ponta.