

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

# Python を実行している EC2 インスタンスの HTTPS を終了する
<a name="https-singleinstance-python"></a>

Web Server Gateway Interface (WSGI) で 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 サービスを停止し、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)ことができるようにロードバランサーを設定します。