質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

解決済

AWS Fargate上アプリのドメイン名アクセス、SSL通信

gerigeritom
gerigeritom

総合スコア1

HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

1回答

1評価

0クリップ

3863閲覧

投稿2020/05/21 20:01

前提・実現したいこと

ネットワーク・セキュリティ初心者です。
nginx + unicorn + sinatra で作成したアプリを AWS Fargate 上で動作させております。

アプリケーションロードバランサーを利用してドメイン名でのアクセスと、
HTTPSでのSSL通信を実現したいと考えておりますが、以下の現象が発生してしまいます。

どなたか原因・解決方法についてお知恵をお借りできませんでしょうか?

よろしくお願いします。

発生している問題・エラーメッセージ

1.ECSのサービスを実行しタスクがRUNNINGになった状態で、https://www.{パブリックドメイン}(例: https://www.example.com)にアクセスすると、「502 Bad Gateway」が表示される
(http://{タスクのパブリックIP}にアクセスすると、正常にページが表示される)

2.ECSのサービス実行後、ヘルスチェックがミスを起こし、タスクのステータスがすぐに'STOPPED (Task failed ELB health checks in 〜)'になる

環境構築状況

SSL証明書

 ・ 東京リージョンで、 *.{パブリックドメイン} の証明書を発行済み

アプリケーションロードバランサー

・ ロードバランサーの設定
* スキーム:インターネット向け
* IP アドレスタイプ:ipv4
* リスナーのプロトコル - ポート: HTTPS - 443

・ セキュリティ設定の構成・セキュリティグループの設定
* 証明書タイプ:上記SSL証明書
* 証明書の名前:*.{パブリックドメイン}
* セキュリティポリシー: ELBSecurityPolicy-2016-08

・ ルーティングの設定
* ターゲットグループ: 新規作成
* ターゲットの種類: IP
* ターゲットグループのプロトコル - ポート: HTTPS - 443
* ヘルスチェックのプロトコル - パス: HTTPS - /
* ヘルスチェックの詳細設定: デフォルト

DNS ホストゾーン

・下記レコードを登録
* Aレコード { www.{パブリックドメイン} : ALBのドメイン名(エイリアス) }
* SSL証明書DNS検証用のCNAMEレコード
* NS,SOAレコード は初期設定値

ECS

・タスク定義
* タスクロール:なし
* ネットワークモード:awsvpc
* 互換性が必要:FARGATE
* タスク実行ロール:ecsTaskExecutionRole
* タスクメモリ (MiB):512
* タスク CPU (単位):256
* コンテナ定義
- メモリ制限 (MiB):ソフト制限 128
- ポートマッピング:80 tcp, 443 tcp
- 他は、コンテナ名、イメージ、環境変数以外初期設定
* その他は初期設定

・クラスター
* クラスターテンプレート:ネットワーキングのみ

・サービス
* キャパシティープロバイダー戦略
- キャパシティープロバイダ:FARGATE_SPOT
* サービスタイプ:REPLICA
* タスクの数:3
* 最小ヘルス率:100
* 最大率:200
* デプロイメントタイプ:ローリングアップデート
* ネットワーク構成
- パブリック IP の自動割り当て:ENABLE
* ロードバランシング
- ロードバランサー名:上記ロードバランサ
- ロードバランス用のコンテナ: [定義したコンテナ名] : 443
- ターゲットグループ名:上記ターゲットグループ
- プロダクションリスナーポート: 443:HTTPS
- プロダクションリスナープロトコル: HTTPS
- ターゲットグループのプロトコル:HTTPS
- ターゲットの種類:ip
* サービスの検出:なし
* Auto Scaling:サービスの必要数を直接調整しない

unicorn.rb

ruby

@dir = "/app/" worker_processes 2 working_directory @dir timeout 300 listen "#{@dir}tmp/unicorn.sock", backlog: 1024 pid "#{@dir}tmp/pids/unicorn.pid"

nginx.conf

user root; worker_processes 2; events { worker_connections 768; } http { upstream unicorn_server { server unix:/app/tmp/unicorn.sock; } server { listen 80; listen 443 ssl; server_name www.{パブリックドメイン}; root /app/static; location / { if (!-f $request_filename) { proxy_pass http://unicorn_server; break; } } } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

yu_1985

2020/05/22 04:25

サービスの「ネットワーク構成」のところでセキュリティグループが設定されているかと思いますが、そのセキュリティグループはALBからの通信を許可していますか?
gerigeritom

2020/05/22 04:30

ご確認ありがとうございます! セキュリティグループの設定では明示的に通信許可設定はしていないです。 下記が現在のセキュリティグループの設定です。 ・セキュリティグループ * インバウンドルール - {タイプ:HTTP, プロトコル:TCP, ポート範囲:80, ソース: 0.0.0.0/0} - {タイプ:HTTP, プロトコル:TCP, ポート範囲:80, ソース: ::/0} - {タイプ:HTTPS, プロトコル:TCP, ポート範囲:443, ソース: 0.0.0.0/0} - {タイプ:HTTPS, プロトコル:TCP, ポート範囲:443, ソース: ::/0} * アウトバウンド - {タイプ:すべてのトラフィック, プロトコル:すべて, ポート範囲:すべて, ソース: 0.0.0.0/0}
yu_1985

2020/05/22 04:34

どれに設定しているセキュリティグループ化を明示してください。ここではセキュリティグループは複数登場します。 ALBに設定しているセキュリティグループなのか、サービスに設定しているセキュリティグループなのか(ここで確認したいのは後者の方です)
gerigeritom

2020/05/22 05:01

全て上記のセキュリティグループを設定しております。
yu_1985

2020/05/22 06:03

それであればALB→コンテナの通信ができていないということはなさそうですね。 > ターゲットグループのプロトコル - ポート: HTTPS - 443 コンテナでは443の通信を受けられるようになっているのでしょうか? 確認の時はhttpでアクセスしているかと思いますが…。 > http://{タスクのパブリックIP} もし受けられないようになっているのなら当然HTTPSで設定しているヘルスチェックも失敗します。 ALBを介すならALBが443の通信を受ければ十分なので、ターゲットとして設定するポートは80番(正確に言うと、コンテナ側で待ち受けているポート)を設定してください。
gerigeritom

2020/05/22 06:14

ありがとうございます!上記で試してみます!

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。