AWS Elastic Beanstalk で実行されるアプリケーションに SSL 証明書を設定したいと考えています。
簡単な説明
Elastic Beanstalk で実行されるアプリケーションに SSL 暗号化を有効にするには、次のいずれかのアクションを実行します。
- ロードバランサーレベルで HTTPS を終了する
- インスタンスレベルで HTTPS を終了する
- HTTP を HTTPS にリダイレクトする
解決策
ロードバランサーレベルで HTTPS を終了する
HTTPS を使用して Elastic Beanstalk 環境を更新するには、環境のロードバランサーに対して HTTPS リスナーを設定する必要があります。HTTPS リスナーをサポートするロードバランサーには次の 2 種類があります。
- Classic Load Balancer
- Application Load Balancer
詳細については、「 HTTPS を終了するように Elastic Beanstalk 環境のロードバランサーを設定する」を参照してください。
インスタンスレベルで HTTPS を終了する
単一インスタンス環境で HTTPS を使用するか、トラフィックを復号化せずにトラフィックを通過させるようにロードバランサーを設定するには、プラットフォームフックを使用できます。プラットフォームフックを使用して、アプリケーションにトラフィックを渡すプロキシサーバーを設定し、HTTPS 接続を終了します。フックファイルは Elastic Beanstalk プラットフォームのタイプによって異なります。詳細については、「 インスタンスで HTTPS 接続を終了するようにアプリケーションを設定する」を参照してください。
注: Amazon Linux AMI (AL1) プラットフォームは廃止されているため、プラットフォームフックを使用してプロキシサーバーに変更を加えるのがベストプラクティスです。以前 AL1 プラットフォームの .ebextensions/nginx ディレクトリで提供されていたプロキシ設定ファイルを、AL2 の platform/nginx プラットフォームフックディレクトリに移動します。Elastic Beanstalk のデフォルトの NGINX 設定を拡張するには、アプリケーションのソースバンドル内の .platform/nginx/conf.d/ という名前のフォルダーに .conf 設定ファイルを追加します。Elastic Beanstalk の NGINX 設定では、このフォルダーに .conf ファイルが自動的に含まれます。
~/workspace/my-app/
|-- .platform
| `-- nginx
| `-- conf.d
| `-- myconf.conf
`--
Elastic Beanstalk のデフォルトの NGINX 設定を上書きするには、.platform/nginx/nginx.confにあるソースバンドルに設定を含めます。
~/workspace/my-app/
|-- .platform
| `-- nginx
| `-- nginx.conf
`--
Elastic Beanstalk の NGINX 設定を上書きする場合は、Elastic Beanstalk の設定を引き継ぎます。設定を引き継ぐことにより、ヘルスレポートとモニタリングを強化し、自動アプリケーションマッピング、静的ファイルを作成できます。設定を引き継ぐには、nginx.confに次の行を追加します。
include conf.d /elasticbeanstalk/ *.conf;
プロキシの設定方法の詳細については、「 リバースプロキシ設定」を参照してください。
注: プロキシエラーログに次のような警告が表示されることがあります。「 nginx: [ [警告] ] 『ssl』ディレクティブは非推奨です。『listen ... ssl』ディレクティブを使用してください」。この警告を回避するには、次の .conf ファイルを使用してプラットフォームフックフォルダに保存し、インスタンスレベルで SSL を終了します。
listen 443 ssl;
server_name localhost;
location / {
proxy_pass http://localhost:app_port;
proxy_set_header Connection "";
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
}
HTTP を HTTPS にリダイレクトする
HTTP から HTTPS へのリダイレクトは、クライアントが開始する非セキュアなトラフィックを処理し、トラフィックを HTTPS にリダイレクトします。リダイレクトに Application Load Balancer または単一のインスタンスを使用している場合は、「 HTTP から HTTPS へのリダイレクトの設定」を参照してください。
デフォルトでは、Classic Load Balancer は HTTP トラフィックを HTTPS にリダイレクトできません。代わりに、Classic Load Balancer の背後にあるウェブサーバーインスタンスの書き換えルールを設定します。詳細については、「 Classic Load Balancer で HTTP トラフィックを HTTPS にリダイレクトするにはどうすればよいですか?」を参照してください。