HTTPS は、SSL/TLS プロトコルを使用してクライアントとサーバー間で送信されるデータを暗号化する HTTP の拡張機能です。サービスでユーザー認証情報や個人情報などの機密データを送信する必要がある場合、またはサービスのセキュリティを強化して潜在的なセキュリティリスクを防ぐ場合は、HTTPS リスナーを作成して HTTPS リクエストを処理できます。
前提条件
CLB インスタンスを作成する必要があります。詳細については、「CLB インスタンスの作成と管理」をご参照ください。
制限
HTTPS リスナーを設定する場合、バックエンドプロトコルは HTTP にしか設定できません。したがって、バックエンドサーバーは、ポート 443 などの HTTPS ポートではなく、ポート 80 などの HTTP ポートを使用する必要があります。さらに、HTTP から HTTPS へのリダイレクトに HTTP ポートを設定することはできません。
使用上の注意
HTTPS リスナーのセッションチケットのデフォルトのタイムアウト期間は 300 秒です。
プロトコルのハンドシェイクによって一部のトラフィックが消費されるため、HTTPS リスナーが生成する実際のトラフィックは請求額よりも大きくなります。
新規接続数が多いと、大量のトラフィックが消費されます。
手順
ステップ 1: リスナーを設定する
Classic Load Balancer (CLB) コンソールにログインします。
上部のナビゲーションバーで、CLB インスタンスがデプロイされているリージョンを選択します。
[インスタンス] ページで、ターゲットインスタンスを見つけ、次のいずれかの方法でリスナーを設定します。
[アクション] 列で、[リスナーの設定] をクリックします。
インスタンス ID をクリックします。インスタンス詳細ページで、[リスナー] タブに移動し、[リスナーの追加] をクリックします。
[プロトコルとリスナー] ステップで、次のパラメーターを設定し、[次へ] をクリックします。
リスナーの設定
説明
リスナープロトコルの選択
リスナープロトコルを選択します。
この例では、[HTTPS] が選択されています。
バックエンドプロトコル
リスナープロトコルが [HTTPS] の場合、[バックエンドプロトコル] は [HTTP] です。
リスナーポート
リクエストを受信してバックエンドサーバーに転送するために使用されるリスナーポート。ポート番号は 1~65535 の範囲である必要があります。
タグ
[タグキー] と [タグ値] を選択または入力します。
詳細設定
[変更] をクリックして詳細設定を展開します。
スケジューリングアルゴリズム
次のスケジューリングアルゴリズムのいずれかを選択できます。デフォルトでは、[ラウンドロビン (RR)] が選択されています。
[重み付けラウンドロビン (WRR)]: 重みが大きいバックエンドサーバーがより多くのリクエストを受信します。
[ラウンドロビン (RR)]: リクエストはバックエンドサーバーに順番に分散されます。
スケジューリングアルゴリズムとそのシナリオの詳細については、「SLB スケジューリングアルゴリズム」をご参照ください。
セッション維持の有効化
デフォルトでは、セッション維持は無効になっています。
セッション維持を有効にすると、SLB は同じクライアントからのすべてのリクエストを同じバックエンドサーバーに転送します。
[Cookie オプション]:
[Cookie の挿入]: Cookie のタイムアウト期間を指定するだけで済みます。
クライアントが最初のリクエストを送信すると、SLB は Cookie (ServerId が HTTP または HTTPS 応答メッセージに挿入されます) を挿入します。次回クライアントがその Cookie を含むリクエストを送信すると、リスナーはそのリクエストを記録されたバックエンドサーバーに転送します。
[セッション維持タイムアウト期間]: [Cookie の挿入] を選択した場合は、セッション維持のタイムアウト期間を入力します。
[Cookie の書き換え]: HTTP または HTTPS 応答に挿入する Cookie を指定できます。バックエンドサーバーで Cookie のタイムアウト期間と有効期間を指定する必要があります。
Cookie を指定すると、SLB は元の Cookie を指定した Cookie で上書きします。次回 SLB が新しい Cookie を含むクライアントリクエストを受信すると、リスナーはそのリクエストを記録されたバックエンドサーバーに分散します。
[Cookie 名]: [Cookie の書き換え] を選択した場合は、Cookie の名前を入力します。
HTTP 2.0 の有効化
デフォルトでは、HTTP 2.0 は有効になっています。
HTTP 2.0 は多重化機能を提供します。CLB インスタンスのフロントエンドプロトコルが HTTP 2.0 に設定されている場合、CLB インスタンスは単一の TCP 接続を使用して複数の HTTP リクエストと応答を同時に送信できます。これにより、伝送パフォーマンスが向上します。
アクセス制御の有効化
デフォルトでは、アクセス制御は無効になっています。
アクセス制御を有効にした後、アクセス制御方法を選択し、アクセス制御ポリシーグループをリスナーのホワイトリストまたはブラックリストとして設定します。
[ホワイトリスト: 指定された IP アドレスの SLB インスタンスへのアクセスを許可]。ネットワーク ACL で指定された IP アドレスまたは CIDR ブロックからのリクエストのみが転送されます。ホワイトリストは、特定の IP アドレスからのアクセスのみを許可する場合に適用されます。ホワイトリストが適切に設定されていない場合、サービスに悪影響が及ぶ可能性があります。ホワイトリストが設定されると、ホワイトリストに追加された IP アドレスからのリクエストのみがリスナーによって転送されます。
ホワイトリストが設定されていても、IP アドレスがホワイトリストに追加されていない場合、リスナーはすべてのリクエストを転送します。
[ブラックリスト: 指定された IP アドレスの SLB インスタンスへのアクセスを禁止]。ネットワーク ACL で指定された IP アドレスまたは CIDR ブロックからのリクエストは拒否されます。ブラックリストは、特定の IP アドレスからのアクセスを拒否する場合に適用されます。
ブラックリストが設定されていても、IP アドレスがブラックリストに追加されていない場合、リスナーはすべてのリクエストを転送します。
[ホワイトリスト]: ネットワーク ACL で指定された IP アドレスまたは CIDR ブロックからのリクエストのみが転送されます。ホワイトリストは、特定の IP アドレスからのアクセスのみを許可する場合に適用されます。ホワイトリストが適切に設定されていない場合、サービスに悪影響が及ぶ可能性があります。ホワイトリストが設定されると、ホワイトリストに追加された IP アドレスからのリクエストのみがリスナーによって転送されます。
ホワイトリストが設定されていても、IP アドレスがホワイトリストに追加されていない場合、リスナーはすべてのリクエストを転送します。
[ブラックリスト]: ネットワーク ACL で指定された IP アドレスまたは CIDR ブロックからのリクエストは拒否されます。ブラックリストは、特定の IP アドレスからのアクセスを拒否する場合に適用されます。
ブラックリストが設定されていても、IP アドレスがブラックリストに追加されていない場合、リスナーはすべてのリクエストを転送します。
説明IPv6 インスタンスは IPv6 アクセス制御ポリシーグループにのみ関連付けることができ、IPv4 インスタンスは IPv4 アクセス制御ポリシーグループにのみ関連付けることができます。アクセス制御ポリシーの設定方法の詳細については、「アクセス制御ポリシーグループの作成」をご参照ください。
リスナーの帯域幅調整の有効化
帯域幅課金 SLB インスタンスの場合、各リスナーに最大帯域幅を設定して、リスナーのトラフィックを制限できます。インスタンスのすべてのリスナーの最大帯域幅値の合計は、インスタンスの最大帯域幅を超えることはできません。
デフォルトでは、この機能は無効になっており、すべてのリスナーがインスタンスの合計帯域幅を共有します。リスナーが合計帯域幅を共有する方法の詳細については、「CLB インスタンスのリスナーはインスタンスの帯域幅を共有する」をご参照ください。
重要インターネット向け CLB インスタンスの合計インターネット帯域幅が 5 Mbit/s で、2 つのリスナーが設定されている場合に、リスナー A に 5 Mbit/s の帯域幅を割り当て、リスナー B に帯域幅を割り当てないと、リスナー B のポートにアクセスできなくなります。帯域幅を割り当てる際は注意してください。
内部向け CLB インスタンスに 3 つのリスナーが設定され、リスナー A と B に合計 5,120 Mbit/s の帯域幅が割り当てられている場合、リスナー C のポートにアクセスできなくなります。帯域幅を割り当てる際は注意してください。
デフォルトでは、トラフィック課金インスタンスの最大帯域幅は制限されません。
接続タイムアウト
CLB インスタンスとクライアント間の TCP 接続がデータ送信なしで開いたままにできる最大期間。値の範囲は 1~60 です。デフォルト値は 15 です。単位: 秒。
指定されたタイムアウト期間内にリクエストが受信されない場合、SLB は接続を閉じます。別のリクエストが受信されると、SLB は新しい接続を確立します。
説明接続タイムアウトを設定すると、その設定はリスナー全体に適用されます。特定のバックエンドサーバーの接続タイムアウトを設定するには、そのバックエンドサーバー用に別のリスナーを設定し、新しいリスナーで接続タイムアウトを設定する必要があります。
接続リクエストタイムアウト
リクエストタイムアウト期間内にバックエンドサーバーから応答がない場合、SLB は HTTP 504 エラーコードをクライアントに返します。
値の範囲は 1~180 です。デフォルト値は 60 です。単位: 秒。
Gzip データ圧縮
この機能を有効にすると、特定の種類のファイルが圧縮されます。この機能を無効にすると、ファイルは圧縮されません。デフォルトでは、Gzip データ圧縮は有効になっています。
Gzip は次のファイルタイプをサポートしています:
text/xml、text/plain、text/css、application/javascript、application/x-javascript、application/rss+xml、application/atom+xml、およびapplication/xml。追加の HTTP ヘッダーフィールド
追加するカスタム HTTP ヘッダーフィールドを選択します:
クライアントの送信元 IP アドレスを取得するために
X-Forwarded-Forヘッダーフィールドを追加します。説明デフォルトでは、CLB のレイヤー 7 リスナーは X-Forwarded-For ヘッダーを使用してクライアントの送信元 IP アドレスを取得します。この機能は無効にできません。このフィールドを使用して複数の IP アドレスが取得された場合、最初の IP アドレスがクライアントの送信元 IP アドレスになります。詳細については、「CLB のレイヤー 7 リスナーを介してクライアントの送信元 IP アドレスを取得する」をご参照ください。
SLB インスタンスの ID を取得するために
SLB-IDヘッダーフィールドを追加します。SLB インスタンスの IP アドレスを取得するために
SLB-IPヘッダーフィールドを追加します。SLB のリスナープロトコルを取得するために
X-Forwarded-Protoヘッダーフィールドを追加します。
クライアント IP アドレスの取得
訪問者の送信元 IP アドレスを取得します。この機能はデフォルトで有効になっています。
作成後にリスナーを自動的に有効にする
リスナーの設定後に SLB リスナーを有効にするかどうかを指定します。この機能はデフォルトで有効になっています。
ステップ 2: SSL 証明書を設定する
[SSL 証明書] ステップで、アップロードされたサーバー証明書を選択するか、[サーバー証明書の選択] ドロップダウンリストから [サーバー証明書の作成] をクリックします。証明書を購入することもできます。 詳細については、「概要」をご参照ください。
オプション: [詳細設定] の横にある [変更] をクリックして、相互認証を有効にするか、TLS セキュリティポリシーを設定します。
[相互認証の有効化] スイッチをオンにし、アップロードされた CA 証明書を選択するか、作成します。詳細については、「プライベート CA の購入と有効化」をご参照ください。
[TLS セキュリティポリシー] を選択します。
説明保証性能インスタンスのみが TLS セキュリティポリシーをサポートします。
TLS セキュリティポリシーには、HTTPS でサポートされる TLS バージョンと暗号スイートが含まれています。詳細については、「TLS セキュリティポリシー」をご参照ください。
ステップ 3: バックエンドサーバーを追加する
フロントエンドリクエストを処理するためにバックエンドサーバーを追加します。インスタンスに設定されているデフォルトサーバーグループを使用するか、リスナーに vServer グループを設定できます。詳細については、「CLB サーバーグループ」をご参照ください。このトピックでは、デフォルトサーバーグループを例として使用します。
HTTPS リスナーはプライマリ/セカンダリサーバーグループをサポートしていません。
[バックエンドサーバー] ウィザードで、[デフォルトサーバーグループ] を選択し、[追加を続行] をクリックします。
[サーバーの選択] ウィザードで、目的のバックエンドサーバーを選択し、[次へ] をクリックします。
[ポートと重みの設定] ウィザードで、重みを設定し、[追加] をクリックします。
説明デフォルトの重みは 100 です。重みが大きいバックエンドサーバーは、より多くのアクセスリクエストを受信します。
重みが 0 のサーバーは新しいリクエストを受け付けません。
リクエストを受信するバックエンドサーバー (ECS インスタンス) のポートを設定し、[次へ] をクリックします。ポートは 1~65535 の数値である必要があります。
説明SLB インスタンスのバックエンドサーバーは同じポートを使用できます。
ステップ 4: ヘルスチェックを設定する
CLB は、ヘルスチェックを実行してバックエンドサーバーの可用性を確認します。これにより、フロントエンドサービスの全体的な可用性が向上し、異常なバックエンドサーバーによるサービスの中断が防止されます。
プライマリ/セカンダリサーバーグループのリスナーのヘルスチェックを無効にすることはできません。
オプション: [ヘルスチェック] ウィザードで、[編集] をクリックしてヘルスチェック設定を変更し、[次へ] をクリックします。詳細については、「CLB ヘルスチェックの設定と管理」をご参照ください。
[設定の確認] ウィザードで、リスナーの設定を確認し、[変更] をクリックして変更を加えます。
設定を確認し、[送信] をクリックします。設定が適用されたら、[OK] をクリックします。
リスナーが作成されると、[リスナー] タブで表示できます。
よくある質問
CLB は、エンドツーエンドの HTTPS アクセスを実現するための HTTPS リスナーの設定をサポートしていますか?
いいえ、できません。HTTPS リスナーを設定する場合、バックエンドプロトコルは HTTP のみです。CLB インスタンスがクライアントから HTTPS リクエストを受信すると、リクエストを復号化し、HTTP 経由でデータをバックエンドサーバーに転送します。このアプローチにより、バックエンドサーバーの設定が簡素化され、HTTPS TLS ハンドシェイクによるパフォーマンスのオーバーヘッドが削減されます。
次のいずれかの方法を使用して、エンドツーエンドの HTTPS アクセスを有効にできます:
Application Load Balancer (ALB) インスタンスを作成し、このインスタンスに HTTPS リスナーを設定します。詳細については、「エンドツーエンドの HTTPS アクセスを設定して暗号化通信を実現する」をご参照ください。
CLB インスタンスに TCP リスナーを設定し、SSL 証明書をバックエンドサーバーに関連付けます。
HTTPS リスナーはどのポートを使用しますか?
HTTPS リスナーには特別なポート要件はありません。ただし、ポート 443 を使用することをお勧めします。
Server Load Balancer はどの種類の証明書をサポートしていますか?
SLB は PEM フォーマットのサーバー証明書と CA 証明書をサポートしています。
サーバー証明書の場合、証明書ファイルと秘密鍵をアップロードする必要があります。CA 証明書の場合、証明書ファイルのみをアップロードする必要があります。
Server Load Balancer は keytool で作成された証明書をサポートしていますか?
はい、そうです。
ただし、アップロードする前に証明書を PEM フォーマットに変換する必要があります。詳細については、「証明書フォーマットの変換」をご参照ください。
PKCS#12 (PFX) フォーマットの証明書を使用できますか?
はい、使用できます。
ただし、アップロードする前に証明書を PEM フォーマットに変換する必要があります。詳細については、「証明書フォーマットの変換」をご参照ください。
証明書を追加するときに KeyEncryption エラーが発生するのはなぜですか?
このエラーは、秘密鍵が無効であるために発生します。詳細については、「証明書の要件と証明書フォーマットの変換」をご参照ください。
Server Load Balancer の HTTPS リスナーでサポートされている SSL プロトコルのバージョンは何ですか?
TLSv1.0、TLSv1.1、TLSv1.2、および TLSv1.3 です。
HTTPS セッションチケットの有効期間はどのくらいですか?
HTTPS セッションチケットの有効期間は 300 秒です。
DH PARAMETERS フィールドを含む証明書をアップロードできますか?
HTTPS リスナーが使用する ECDHE 暗号スイートは前方秘匿性をサポートしますが、DHE 暗号スイートが必要とするセキュリティ強化パラメーターファイルはサポートしません。したがって、BEGIN DH PARAMETERS フィールドを含む PEM 証明書ファイルをアップロードすることはできません。
HTTPS リスナーは SNI をサポートしていますか?
はい、サポートしています。サーバ名表示 (SNI) は、サーバーが複数のドメイン名と証明書を使用できるようにする SSL/TLS の拡張機能です。SLB インスタンスの HTTPS リスナーは SNI をサポートしています。詳細については、「CLB インスタンスの追加ドメイン名の追加と管理」をご参照ください。
リファレンス
HTTPS は HTTP よりも優れたセキュリティを提供しますが、計算リソースやネットワーク遅延などのオーバーヘッドが増加する可能性があります。内部ネットワーク通信、テストおよび開発環境、または機密性の低い情報伝送などのシナリオでは、HTTP リスナーを使用できます。詳細については、「HTTP リスナーの追加」をご参照ください。本番環境では、暗号化されたデータ伝送に HTTPS を使用することをお勧めします。
バックエンドサーバーグループの管理方法の詳細については、次のトピックをご参照ください:
ヘルスチェックの仕組みの詳細については、「CLB ヘルスチェック」をご参照ください。ヘルスチェックパラメーターの設定方法の詳細については、「CLB ヘルスチェックの設定と管理」をご参照ください。
スケジューリングアルゴリズムの詳細については、「SLB スケジューリングアルゴリズム」をご参照ください。
HTTPS リスナーにドメイン名ベースまたは URL ベースの転送ルールを追加する場合は、「ドメイン名または URL に基づいてリクエストを転送する」をご参照ください。
HTTP リクエストを HTTPS にリダイレクトする場合は、「CLB を使用して HTTP リクエストを HTTPS にリダイレクトする」をご参照ください。
CLB を使用して HTTPS 一方向認証サービスをデプロイする場合は、「CLB を使用して HTTPS サービスをデプロイする (一方向認証)」をご参照ください。
CLB を使用して HTTPS 相互認証サービスをデプロイする場合は、「CLB を使用して HTTPS サービスをデプロイする (相互認証)」をご参照ください。
CLB を使用して複数ドメインの HTTPS ウェブサイトを設定する場合は、「単一の CLB インスタンスで複数ドメインの HTTPS ウェブサイトを設定する」をご参照ください。
HTTPS リスナーを使用し、バックエンドサーバーが CLB インスタンスからクライアントの送信元 IP アドレスを取得するようにしたい場合は、「CLB のレイヤー 7 リスナーを使用して送信元 IP アドレスを取得する」チュートリアルをご参照ください。