Python を実行している EC2 インスタンスの HTTPS を終了する - AWS Elastic Beanstalk

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Python を実行している EC2 インスタンスの HTTPS を終了する

Web Server Gateway Interface (WSGI) で 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 サービスを停止し、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

ロードバランシング環境では、エンドツーエンドの暗号化のために安全なトラフィックを変更なしでパスする復号および暗号化することができるようにロードバランサーを設定します。