アプリケーションで暗号化通信が必要な場合、HTTPS リスナーを追加して HTTPS リクエストを転送できます。この機能により、Application Load Balancer (ALB) インスタンスと SSL または TLS セッションを開始するクライアント間のトラフィックが暗号化されます。
前提条件
ALB インスタンスに TLS セキュリティポリシー および少なくとも 1 つのサーバー証明書をデプロイ済みである必要があります。
利用可能なサーバーグループを作成しました。
操作手順
本トピックでは、HTTPS リスナーを追加する 2 つの方法について説明します。ビジネス要件に応じて、適切な方法を選択してください。
HTTPS リスナーの作成:相互認証などの高度な機能をカスタマイズできます。
HTTPS リスナーのクイック作成:リスナープロトコル、リスナー ポート、サーバー証明書、TLS セキュリティポリシー、およびサーバーグループのみを設定することで、迅速にリスナーを作成できます。
HTTPS リスナーの作成
ステップ 1:リスナーの構成
上部のナビゲーションバーから、インスタンスがデプロイされているリージョンを選択します。
以下のいずれかの方法でリスナー構成ウィザードを開きます。
インスタンス ページで対象インスタンスを見つけ、リスナーの作成 をクリックします(操作 列)。
インスタンス ページで対象インスタンスの ID をクリックします。リスナー タブで リスナーの作成 をクリックします。
リスナーの設定 ページで、以下のパラメーターを設定し、次へ をクリックします。
パラメーター
説明
リスナープロトコルの選択
リスナーに使用するプロトコルを選択します。
本例では HTTPS を選択します。
リスナーポート
リクエストを受信し、バックエンドサーバーに転送するポートを指定します。本例ではポート 443 を使用します。HTTP には通常ポート 80、HTTPS にはポート 443 が使用されます。
有効なポート範囲は 1 ~ 65535 です。
説明同一 ALB インスタンスでは、同じプロトコルを使用するリスナーのポートは一意である必要があります。HTTP リスナーと HTTPS リスナーは異なるポートを使用する必要があります。
リスナー名
リスナーの名前を入力します。
タグ
タグキー および タグ値 を設定します。
タグを追加すると、リスナー タブでタグによるフィルター処理が可能になります。
詳細設定
変更 をクリックして詳細設定を展開します。
HTTP/2 の有効化
HTTP/2 を有効にするかどうかを選択します。
アイドル接続タイムアウト期間
アイドルタイムアウトを指定します。有効値:1 ~ 600 秒。デフォルト値は 15 秒です。クォータの増量を依頼する場合は、クォータセンター にアクセスしてください。
アイドルタイムアウト期間内にリクエストが受信されない場合、ロードバランサーは接続を閉じます。次のリクエストが受信されたときに新しい接続が確立されます。
接続リクエストタイムアウト
要求タイムアウトを指定します。有効値:1 ~ 600 秒。デフォルト値は 60 秒です。クォータの増量を依頼する場合は、クォータセンター にアクセスしてください。
バックエンドサーバーがタイムアウト期間内に応答しない場合、ロードバランサーは待機を中止し、クライアントに HTTP 504 エラーを返します。
圧縮
実際のクライアントソース IP を見つける
ALB が X-Forwarded-For ヘッダーから送信元 IP アドレスを取得できるようにします。この機能を有効にする場合、信頼済み IP リストを設定する必要があります。
信頼済み IP リストが
0.0.0.0/0に設定されている場合、ALB は X-Forwarded-For リクエストヘッダーの左端の IP アドレスを送信元 IP アドレスとして取得します。信頼済み IP リストが
proxy1 IP;proxy2 IP;..に設定されている場合、ALB はリストに含まれていない右端から左端に向かって最初の IP アドレスを送信元 IP アドレスとして取得します。
ユースケース:
X-Forwarded-For リクエストヘッダーに複数の IP アドレスが含まれている場合(例:
X-Forwarded-For: <client-ip-address>, <proxy1>, <proxy2>, …)、左端のアドレスがクライアントの送信元 IP アドレスです。接続元 IP による転送ルールや、ALB の QPS (クライアント IP あたり) 機能を使用する場合、実際のクライアントソース IP を見つける を有効にする必要があります。これにより、ALB は X-Forwarded-For ヘッダーから送信元 IP アドレスを特定できます。詳細については、「転送ルールの追加」をご参照ください。説明クライアント IP アドレスの取得は、標準および WAF 対応の ALB インスタンスのみがサポートしています。ベーシック ALB インスタンスはサポートしていません。
カスタム HTTP ヘッダー
追加するカスタム HTTP ヘッダー項目を選択します:
X-Forwarded-Forヘッダー項目を有効化してクライアント IP アドレスを取得するかどうかを選択します。「
X-Forwarded-For を追加してクライアントの IP アドレスを保持する」を選択すると、ALB はバックエンドサーバーにリクエストを転送する前に、リクエストにX-Forwarded-Forヘッダーを追加したり、リクエストからX-Forwarded-Forヘッダーを削除したりできます。追加(デフォルト)
追加 を選択した場合、ALB はバックエンドサーバーにリクエストを転送する前に、最後のホップの IP アドレスをリクエストの X-Forwarded-For ヘッダーに追加します。リクエストに X-Forwarded-For ヘッダーが含まれていない場合、ALB は最後のホップの IP アドレスを値とする X-Forwarded-For ヘッダーを作成し、リクエストに追加します。X-Forwarded-For ヘッダーには、カンマ(,)で区切られた複数の IP アドレスが含まれる場合があります。
削除
削除 を選択した場合、ALB はバックエンドサーバーにリクエストを転送する前に、リクエストから
X-Forwarded-Forヘッダーを削除します。
X-Forwarded-For を追加してクライアント IP アドレスを保持を選択しなかった場合、ALB はバックエンドサーバーにリクエストを転送する前に、リクエストのX-Forwarded-Forヘッダーに対して何も実行しません。
形式:
X-Forwarded-For: <client-ip-address>, <proxy1>, <proxy2>, …SLB-IDヘッダー項目を追加して、ロードバランサーインスタンスの ID を取得します。X-Forwarded-Protoヘッダー項目を追加して、インスタンスのリスナープロトコルを取得します。X-Forwarded-Portヘッダー項目を追加して、ロードバランサーインスタンスのリスナー ポートを取得します。X-Forwarded-Hostヘッダー項目を追加して、クライアントがロードバランサーインスタンスにアクセスするために使用したドメイン名を取得します。X-Forwarded-Client-srcportヘッダー項目を追加して、ロードバランサーインスタンスにアクセスするクライアントのポートを取得します。X-Forwarded-Clientcert-subjectdnヘッダー項目を追加して、ロードバランサーインスタンスにアクセスするために使用されるクライアント証明書の所有者情報を取得します。X-Forwarded-Clientcert-issuerdnヘッダー項目を追加して、ロードバランサーインスタンスにアクセスするために使用されるクライアント証明書の発行者情報を取得します。X-Forwarded-Clientcert-fingerprintヘッダー項目を追加して、ロードバランサーインスタンスにアクセスするために使用されるクライアント証明書の指紋を取得します。X-Forwarded-Clientcert-clientverifyヘッダー項目を追加して、ロードバランサーインスタンスにアクセスするために使用されるクライアント証明書の検証結果を取得します。
説明QUIC アップデート
QUIC アップグレードを有効にするかどうかを選択します。この機能を有効にする場合、関連付けられた QUIC リスナー ドロップダウンリストから既存の QUIC リスナーを選択します。
QUIC リスナーを作成していない場合、リスナーの作成 をクリックして作成します。詳細については、「QUIC リスナーの追加」をご参照ください。
ALB は iQUIC および gQUIC をサポートしています。チュートリアルについては、「QUIC プロトコルを使用した音声および動画ストリーミングの高速化」をご参照ください。
ステップ 2:SSL 証明書の構成
HTTPS リスナーを追加するには、トラフィックの暗号化およびサービスの ID 確認を行うための SSL 証明書を構成する必要があります。以下の表に、ALB がサポートする証明書を示します。
証明書 | 説明 | 片方向認証 | 相互認証 |
サーバー証明書 | サーバーの ID を証明します。 ブラウザは、サーバー証明書が信頼された権限機関によって発行されたものかどうかを確認します。詳細については、「SSL 証明書とは?」をご参照ください。 | はい Certificate Management Service でサーバー証明書を購入またはアップロードできます。ALB は Certificate Management Service から証明書を取得して使用します。 | はい Certificate Management Service でサーバー証明書を購入またはアップロードできます。ALB は Certificate Management Service から証明書を取得して使用します。 |
CA 証明書 | サーバーは CA 証明書を使用して、クライアント証明書の署名を検証します。検証に失敗した場合、接続は拒否されます。 説明 クライアントがサーバーと通信する場合、クライアント証明書はクライアントの ID を証明するために使用されます。クライアント証明書はクライアント上でのみインストールする必要があります。 | いいえ | はい Certificate Management Service で CA 証明書を購入またはアップロードできます。ALB は Certificate Management Service から証明書を取得して使用します。 |
新しい証明書を HTTPS リスナーに適用するには、アップロード、読み込み、検証にかかる時間のため、1 ~ 3 分程度の効果発現に時間がかかります。
複数のドメイン名を処理したり、複数のサーバー証明書を添付したりする必要がある場合、HTTPS リスナーの構成後に 拡張証明書 を追加できます。
SSL 証明書の設定 ステップで、サーバー証明書を選択します。
オプション:相互認証の有効化 をオンにし、CA 証明書のソースを選択します。
CA 証明書のソースとして Alibaba Cloud を選択し、デフォルトの CA 証明書 ドロップダウンリストから CA 証明書を選択します。
利用可能な CA 証明書がない場合、ドロップダウンリストから CA 証明書の購入 をクリックして、新しい CA 証明書を作成 できます。
CA 証明書のソースとして サードバーティ を選択し、デフォルトの CA 証明書 ドロップダウンリストから CA 証明書を選択します。
自己署名 CA 証明書が利用できない場合、ドロップダウンリストから 自己署名 CA 証明書のアップロード をクリックします。証明書アプリケーションリポジトリ ページで、データソースとして CA 証明書のアップロード を指定してリポジトリを作成します。その後、アップロード して、自己署名ルート CA または自己署名中間 CA 証明書をリポジトリに登録します。
説明相互認証は、標準および WAF 対応の ALB インスタンスのみがサポートしています。ベーシック ALB インスタンスはサポートしていません。
相互認証を有効化した後、後で無効化する必要がある場合は、以下の手順に従います:
インスタンス ページで、対象インスタンスの ID をクリックします。
リスナー タブで、対象 HTTPS リスナーの ID をクリックします。
リスナーの詳細 タブで、SSL 証明書 セクションの相互認証スイッチをオフにします。
TLS セキュリティポリシー を選択し、次へ をクリックします。
TLS セキュリティポリシーが利用できない場合、ドロップダウンリストから TLS セキュリティポリシーの作成 をクリックします。
TLS セキュリティポリシー には、HTTPS でサポートされる TLS プロトコルのバージョンおよび暗号スイートが含まれます。
ステップ 3:サーバーグループの選択
ウィザードの サーバーグループ ステップで、サーバーグループを選択し、バックエンドサーバーの情報を確認した後、次へ をクリックします。
ステップ 4:構成の確認
確定 ページで構成内容を確認し、送信 をクリックします。
HTTPS リスナーのクイック作成
クイック作成方法を使用する場合、リスナープロトコル、リスナー ポート、サーバー証明書、TLS セキュリティポリシー、およびサーバーグループのみを構成する必要があります。
上部のナビゲーションバーから、ALB インスタンスがデプロイされているリージョンを選択します。
インスタンス ページで対象インスタンスを見つけ、その ID をクリックします。
リスナー タブをクリックし、リスナー タブで リスナーのクイック作成 をクリックします。
リスナーのクイック作成 ダイアログボックスで、以下のパラメーターを構成し、OK をクリックします。
パラメーター
説明
リスナープロトコルの選択
リスナー プロトコルを選択します。本例では HTTPS を選択します。
リスナーポート
リクエストを受信し、バックエンドサーバーに転送するために使用されるフロントエンドポートを設定します。
一般的なリスナー ポートをクリックして値をすばやく入力するか、ポート番号を直接入力できます。有効なポート範囲は 1 ~ 65535 です。
サーバー証明書
ドロップダウンリストからサーバー証明書を選択します。
利用可能なサーバー証明書がない場合、ドロップダウンリストから 証明書の作成 をクリックして新しい証明書を作成します。詳細については、「SSL 証明書の購入」および「SSL 証明書のアップロード」をご参照ください。
リソースグループ
サーバーグループが属するリソースグループを選択します。
TLS セキュリティポリシー
TLS セキュリティポリシーが利用できない場合、ドロップダウンリストから TLS セキュリティポリシーの作成 をクリックします。詳細については、「TLS セキュリティポリシー」をご参照ください。
サーバーグループ
サーバーグループの種類およびバックエンドサーバーを選択します。
よくある質問
X-Forwarded-For ヘッダーのなりすましをどのようにして防止できますか?
リスナーは TLS 1.0、TLS 1.1、TLS 1.2、TLS 1.3 をサポートしています。詳細については、「TLS セキュリティポリシー」をご参照ください。
クライアントプロトコルバージョンの取得
はい。
バックエンドアクセス用の HTTP バージョン
クライアントリクエストが HTTP 1.1 または HTTP 2.0 を使用する場合、レイヤー 7 リスナーはバックエンドサーバーへのアクセスに HTTP 1.1 を使用します。
クライアントリクエストが HTTP 1.1 または HTTP 2.0 以外のプロトコルを使用する場合、レイヤー 7 リスナーはバックエンドサーバーへのアクセスに HTTP 1.0 を使用します。
ワイルドカード証明書のルール
ALB インスタンスに HTTPS リスナーを追加する場合、選択した証明書がワイルドカード証明書である場合、以下のルールに注意してください。
ワイルドカード証明書を選択した場合、ALB は単一のワイルドカード文字(
*)のみを含み、ワイルドカード文字(*)がドメイン名の最左位置にある証明書のみを識別できます。たとえば、ALB は*.example.comおよび*test.example.comを識別できますが、test*.example.comは識別できません。ワイルドカードドメイン名のマッチングルール:
ワイルドカードドメイン名のレベル:ワイルドカードドメイン名は、ワイルドカードドメイン名と同じレベルの特定のドメイン名にのみマッチします。たとえば、
*.example.comはtest.example.comにマッチしますが、test.test.example.com(ワイルドカードドメイン名より 1 レベル低い)にはマッチしません。IDNA サポート:
ワイルドカード証明書のワイルドカード文字が、ワイルドカード証明書の最左ラベルの唯一の文字である場合、IDNA ラベルはワイルドカードにマッチします。たとえば、
xn--fsqu00a.example.comは*.example.comにマッチします。ワイルドカード証明書のワイルドカード文字が、ワイルドカード証明書の最左ラベルの唯一の文字でない場合、IDNA ラベルはこの部分のワイルドカードにマッチしません。たとえば、
xn--fsqu00atest.example.comは*test.example.comにマッチしません。
マッチ範囲:ワイルドカード文字(
*)は、数字(0 ~ 9)、大文字および小文字、ハイフン(-)のみをマッチします。たとえば、*.example.comはtest.example.comにマッチしますが、test_test.example.comにはマッチしません。
HTTPS セッションチケットの TTL はどれくらいですか?
300 秒です。
X-Forwarded-For ヘッダーのなりすましを防止するにはどうすればよいですか?
別のアップストリーム製品のヘッダー項目を指定して、実際のクライアント IP を記録します。
たとえば、Client → CDN → WAF → SLB → ECS のアーキテクチャの場合:CDN は
Ali-Cdn-Real-IpHTTP ヘッダーでクライアントの実際の IP を転送します。WAF を構成する際に、クライアント IP 検出方法を「ヘッダー項目の指定」に設定し、Ali-Cdn-Real-Ipを使用します。その後、バックエンドの Nginx サーバーで、実際のクライアント IP のログ変数を$http_Ali_Cdn_Real_Ipに設定します。レイヤー 4 リスナー(NLB または CLB)に切り替えます:レイヤー 4 リスナーを使用する場合、バックエンドサーバーは自動的に実際のクライアント IP を取得できます。詳細については、「レイヤー 4 リスナーを有効化してクライアント IP アドレスを保持し、バックエンドサーバーに渡す」をご参照ください。
WSS のサポート
デフォルトで、ALB HTTPS リスナーは WebSocket Secure(WSS)プロトコルをサポートしています。チュートリアルについては、「WebSocket を使用したリアルタイムメッセージングの有効化」をご参照ください。
参照
製品チュートリアル
ALB は、幅広い高度な転送ルールをサポートしています。詳細については、「リスナー転送ルールの設定」をご参照ください。
異常な状態コードが発生した場合、「ALB のエラー状態コード」をご参照ください。
ヘルスチェックの問題が発生した場合、「ALB のヘルスチェック問題のトラブルシューティング」をご参照ください。
その他のユースケースのチュートリアルについては、以下のトピックをご参照ください:
HTTP リクエストを HTTPS リスナーにリダイレクト:ALB の転送ルールを使用して HTTP リクエストを HTTPS リスナーにリダイレクトできます。これにより、通信中のデータが暗号化され、中間者攻撃およびデータ侵害が防止され、モダンでセキュアなネットワークアーキテクチャの構築が支援されます。
暗号化通信のためのエンドツーエンド HTTPS アクセスの設定:ALB はエンドツーエンドの HTTPS 暗号化を提供しており、クライアントから ALB および ALB からバックエンドサーバーまでの通信を保護し、機密性の高いサービスのセキュリティを強化します。
単一の ALB インスタンスで複数の HTTPS ウェブサイトを設定:異なるドメインの HTTPS リクエストを異なるバックエンドサーバーに転送する必要がある場合、ALB HTTPS リスナーに複数の証明書をバインドし、ドメインベースの転送ルールを構成することで、複数の HTTPS ウェブサイトへのアクセスを処理できます。
ALB を使用した HTTPS サービスのデプロイ(相互認証):金融および医療など、高セキュリティ検証を必要とするシナリオでは、ALB の相互認証機能により、クライアントおよびサーバーの双方の ID が検証され、安全なデータ転送が保証されます。