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

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

Ruby コンテナタイプの場合、HTTPS を有効にする方法は使用するアプリケーションサーバーの種類によって異なります。

Puma を使用する Ruby 用の HTTPS を設定する

アプリケーションサーバーとして Puma を使用する Ruby コンテナタイプについては、設定ファイルを使用して HTTPS を有効にします。

次のスニペットを設定ファイルに追加して、証明書とプライベートキー資料を説明に沿って置き換え、ソースバンドルの .ebextensions ディレクトリに保存します。設定ファイルは以下のタスクを実行します。

  • files キーはインスタンスに次のファイルを作成します。

    /etc/nginx/conf.d/https.conf

    nginx サーバーを設定します。このファイルは、nginx サービスの開始時にロードされます。

    /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 キーは、すべての設定が完了してから nginx サーバーを再起動することで、サーバーが新しい https.conf ファイルを使用できるようにします。

例 .ebextensions/https-instance.config

files:
  /etc/nginx/conf.d/https.conf:
    content: |
      # HTTPS server

      server {
          listen       443;
          server_name  localhost;
          
          ssl                  on;
          ssl_certificate      /etc/pki/tls/certs/server.crt;
          ssl_certificate_key  /etc/pki/tls/certs/server.key;
          
          ssl_session_timeout  5m;
          
          ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
          ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
          ssl_prefer_server_ciphers   on;
          
          location / {
              proxy_pass  http://my_app;
              proxy_set_header        Host            $host;
              proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
          }

          location /assets {
            alias /var/app/current/public/assets;
            gzip_static on;
            gzip on;
            expires max;
            add_header Cache-Control public;
          }

          location /public {
            alias /var/app/current/public;
            gzip_static on;
            gzip on;
            expires max;
            add_header Cache-Control public;
          }
      }

  /etc/pki/tls/certs/server.crt:
    content: |
      -----BEGIN CERTIFICATE-----
      certificate file contents
      -----END CERTIFICATE-----
      
  /etc/pki/tls/certs/server.key:
    content: |      
      -----BEGIN RSA PRIVATE KEY-----
      private key contents # See note below.
      -----END RSA PRIVATE KEY-----

container_commands:
  01restart_nginx:
    command: "service nginx restart"

注記

プライベートキーを含む設定ファイルがソースコントロールにコミットされないようにしてください。設定をテストして機能することを確認したら、プライベートキーを 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

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

Passenger を使用する Ruby 用の HTTPS を設定する

アプリケーションサーバーとして Passenger を使用する Ruby コンテナタイプの場合、設定ファイルと JSON ファイルの両方を使用してHTTPS を有効にします。

Passenger を使用する Ruby 用の HTTPS を設定する方法

  1. 次のスニペットを設定ファイルに追加して、証明書とプライベートキー資料を説明に沿って置き換え、ソースバンドルの .ebextensions ディレクトリに保存します。設定ファイルは以下のタスクを実行します。

    • files キーはインスタンスに次のファイルを作成します。

      /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

      インスタンスにプライベートキーのファイルを作成します。プライベートキーのコンテンツと、証明書リクエストまたは自己署名証明書を作成するのに使用されたプライベートキーのコンテンツを置き換えます。

    例 Passenger を使用する Ruby 用 HTTPS を設定するための .ebextensions スニペット

    files:
      /etc/pki/tls/certs/server.crt:
        content: |
          -----BEGIN CERTIFICATE-----
          certificate file contents
          -----END CERTIFICATE-----
          
      /etc/pki/tls/certs/server.key:
        content: |      
          -----BEGIN RSA PRIVATE KEY-----
          private key contents # See note below.
          -----END RSA PRIVATE KEY-----

    注記

    プライベートキーを含む設定ファイルがソースコントロールにコミットされないようにしてください。設定をテストして機能することを確認したら、プライベートキーを Amazon S3 に保存して、デプロイメント中にダウンロードするように設定を変更します。手順については、「秘密キーを Amazon S3 に安全に保存する」を参照してください。

  2. テキストファイルを作成して、ファイルに次の JSON を追加します。作成したファイルを、passenger-standalone.json という名前でソースバンドルのルートディレクトリに保存します。この JSON ファイルは、Passenger が HTTPS を使用するように設定します。

    重要

    この JSON ファイルには、バイト順マーク(BOM)が含まれてはいけません。BOM が含まれていると、Passenger JSON ライブラリはファイルを正しく読み取れず、Passenger サービスは開始されません。

    例 passenger-standalone.json

    {
      "ssl" : true,
      "ssl_port" : 443,
      "ssl_certificate" : "/etc/pki/tls/certs/server.crt",
      "ssl_certificate_key" : "/etc/pki/tls/certs/server.key"
    }

単一インスタンスの環境では、インスタンスのセキュリティも変更してポート 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

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