メニュー
AWS Elastic Beanstalk
開発者ガイド (API Version 2010-12-01)

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 サーバーを設定します。Python サイトパッケージディレクトリを、環境内の Python サイトパッケージディレクトリにそれぞれのディレクトリをコロン (:) で区切って置き換えます。 Python サイトパッケージのディレクトリは環境によって異なります。

    Python 2.7
    • /opt/python/run/venv/lib/python2.7/site-packages

    • /opt/python/run/venv/lib64/python2.7/site-packages

    Python 3.4
    • /opt/python/run/venv/lib/python3.4/site-packages

    • /opt/python/run/venv/lib64/python3.4/site-packages

    アプリケーションの要件によっては、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 ファイルと証明書を使用できるようにします。

  • アプリケーションの名前が application.py でない場合は、WSGIScriptAlias の値内の強調表示されたテキストをそのアプリケーションへのローカルパスに置き換えてください。たとえば、django アプリケーションのものは django/wsgi.py にあることがあります。この場所は、お客様の環境用に設定した WSGIPath オプションの値と一致する必要があります。

例 .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 site-packages directories> \
          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

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