アプリケーションで暗号化されたデータ転送が必要な場合は、HTTPS リスナーを作成して HTTPS プロトコルを使用するリクエストを転送できます。このリスナーは、Application Load Balancer (ALB) インスタンスと SSL または TLS セッションを開始するクライアントとの間のトラフィックを暗号化します。
前提条件
ALB インスタンスを作成済みであること。
ALB インスタンスに TLS セキュリティポリシーと少なくとも 1 つの SSL サーバー証明書をデプロイ済みであること。
バックエンドサーバーグループを作成済みであること。
手順
このトピックでは、HTTPS リスナーを作成する 2 つのメソッドについて説明します。ニーズに基づいてメソッドを選択できます。
HTTPS リスナーの作成: このメソッドでは、相互認証などの高度な機能をカスタマイズできます。
HTTPS リスナーのクイック作成: このメソッドでは、リスナープロトコル、リスナーポート、サーバー証明書、TLS セキュリティポリシー、およびバックエンドサーバーグループのみを設定することで、リスナーをすばやく作成できます。
HTTPS リスナーの作成
ステップ 1: リスナーの設定
上部のナビゲーションバーで、インスタンスがデプロイされているリージョンを選択します。
次のいずれかのメソッドを使用して、リスナー設定ウィザードを開きます。
インスタンス ページで、ターゲットインスタンスを見つけ、操作 列の リスナーの作成 をクリックします。
インスタンス ページで、ターゲットインスタンスの ID をクリックします。リスナー タブで、リスナーの作成 をクリックします。
リスナーの設定 ウィザードで、次のパラメーターを設定し、[次へ] をクリックします。
リスナー設定
説明
リスナープロトコルの選択
リスナーのプロトコルを選択します。
この例では、[HTTPS] が選択されています。
リスナーポート
リクエストを受信してバックエンドサーバーに転送するために使用されるリスナーポートを入力します。この例では、[443] が入力されています。ポート 80 は HTTP のデフォルトポートで、ポート 443 は HTTPS のデフォルトポートです。
ポート番号は 1 から 65535 の間でなければなりません。
説明同じ ALB インスタンス内では、同じプロトコルのリスナーは同じポートを使用できません。HTTP リスナーと HTTPS リスナーは同じポートを使用できません。
リスナー名
リスナーの名前を入力します。
タグ
[タグキー] と [タグ値] を設定します。
タグを設定すると、[リスナー] タブでタグによってリスナーをフィルターできます。
詳細設定
[変更] をクリックして高度な設定を展開します。
HTTP/2 の有効化
HTTP/2 を有効にするかどうかを選択します。
アイドル接続タイムアウト期間
アイドルタイムアウト期間を指定します。有効値: 1 ~ 600 秒。デフォルト値: 15 秒。より大きな値を使用したい場合は、Quota Center に移動してクォータの引き上げをリクエストしてください。
タイムアウト期間内にリクエストが受信されない場合、Server Load Balancer は一時的に現在の接続を中断します。次のリクエストが受信されると、新しい接続が確立されます。
説明この機能は HTTP/2 リクエストには効果がありません。
接続リクエストタイムアウト
リクエストタイムアウト期間を指定します。有効値: 1 ~ 600 秒。デフォルト値: 60 秒。より大きな値を使用したい場合は、Quota Center に移動してクォータの引き上げをリクエストしてください。
タイムアウト期間内にバックエンドサーバーから応答がない場合、Server Load Balancer は諦めて HTTP 504 エラーコードをクライアントに返します。
データ圧縮
この機能を有効にすると、特定のファイルタイプを圧縮できます。この機能が無効になっている場合、ファイルは圧縮されません。
Brotli はすべてのファイルタイプをサポートします。
Gzip は次のファイルタイプをサポートします:
text/xml、text/plain、text/css、application/javascript、application/x-javascript、application/rss+xml、application/atom+xml、application/xml、およびapplication/json。
説明データ圧縮は、応答の
Content-Lengthが 1024 バイトを超えた場合にのみトリガーされます。クライアントリクエストが Brotli と Gzip の両方をサポートしている場合、ALB はより効率的な Brotli を使用します。
クライアントが Gzip のみをサポートし、ファイルタイプが Gzip でサポートされていない場合、ALB はファイルを圧縮しません。
実際のクライアントソース IP を見つける
この機能を有効にすると、ALB が X-Forwarded-For ヘッダーフィールドから送信元クライアント IP アドレスを取得できるようになります。この機能を有効にした後、信頼できる IP アドレスのリストを設定する必要があります。
信頼できる IP アドレスのリストを
0.0.0.0/0に設定した場合: X-Forwarded-For リクエストヘッダーから最も左の IP アドレスを送信元クライアント IP アドレスとして取得します。信頼できる IP アドレスのリストを
proxy1 IP;proxy2 IP;..に設定した場合: このリストにない右から最初の IP アドレスを送信元クライアント IP アドレスとして取得します。
シナリオ:
X-Forwarded-For リクエストヘッダーには、
X-Forwarded-For: <client-ip-address>, <proxy1>, <proxy2>, …のように複数の IP アドレスを含めることができます。最も左のアドレスがクライアントの IP アドレスです。ALB 転送ルールで [SourceIp] 一致条件と [QPS (クライアントソース IP に基づくスロットリング)] 機能を使用するには、[送信元クライアント IP アドレスの検索] を有効にします。これにより、ALB は X-Forwarded-For ヘッダーフィールドから送信元クライアント IP アドレスを見つけることができます。詳細については、「転送ルールの追加」をご参照ください。説明標準および WAF 対応の ALB インスタンスのみがこの機能をサポートします。Basic ALB インスタンスはサポートしません。
HTTP ヘッダーフィールドの追加
追加したいカスタム HTTP ヘッダーフィールドを選択します:
X-Forwarded-Forヘッダーフィールドを有効にしてクライアントの IP アドレスを取得するかどうかを選択します。クライアント IP アドレスを保持するために X-Forwarded-For を追加を選択した場合、ALB はリクエストをバックエンドサーバーに転送する前に、リクエストにX-Forwarded-Forヘッダーを追加するか、リクエストからX-Forwarded-Forヘッダーを削除できます。追加 (デフォルト)
[追加] を選択した場合、ALB はリクエストをバックエンドサーバーに転送する前に、リクエストの X-Forwarded-For ヘッダーに最後のホップの IP アドレスを追加します。リクエストに X-Forwarded-For ヘッダーが含まれていない場合、ALB は値が最後のホップの IP アドレスである X-Forwarded-For ヘッダーを作成し、そのヘッダーをリクエストに追加します。リクエストの X-Forwarded-For ヘッダーには、コンマ (,) で区切られた複数の IP アドレスが含まれる場合があります。
削除
[削除] を選択した場合、ALB はリクエストをバックエンドサーバーに転送する前に、リクエストから
X-Forwarded-Forヘッダーを削除します。
クライアント IP アドレスを保持するために X-Forwarded-For を追加を選択しない場合、ALB はリクエストをバックエンドサーバーに転送する前に、リクエストのX-Forwarded-Forヘッダーに対して何もしません。
フォーマット:
X-Forwarded-For: <client-ip-address>, <proxy1>, <proxy2>, …SLB-IDヘッダーフィールドを追加して、SLB インスタンスの ID を取得します。X-Forwarded-Protoヘッダーフィールドを追加して、インスタンスのリスナープロトコルを取得します。X-Forwarded-Portヘッダーフィールドを追加して、SLB インスタンスのリスナーポートを取得します。X-Forwarded-Hostヘッダーフィールドを追加して、クライアントが SLB インスタンスにアクセスするために使用したドメイン名を取得します。X-Forwarded-Client-srcportヘッダーフィールドを追加して、SLB インスタンスにアクセスするクライアントのポートを取得します。X-Forwarded-Clientcert-subjectdnヘッダーフィールドを追加して、SLB インスタンスへのアクセスに使用されるクライアント証明書の所有者情報を取得します。X-Forwarded-Clientcert-issuerdnヘッダーフィールドを追加して、SLB インスタンスへのアクセスに使用されるクライアント証明書の発行者情報を取得します。X-Forwarded-Clientcert-fingerprintヘッダーフィールドを追加して、SLB インスタンスへのアクセスに使用されるクライアント証明書の指紋を取得します。X-Forwarded-Clientcert-clientverifyヘッダーフィールドを追加して、SLB インスタンスへのアクセスに使用されるクライアント証明書の検証結果を取得します。
説明QUIC アップデート
QUIC アップグレードを有効にするかどうかを選択します。QUIC アップグレードを有効にする場合は、[関連付けられた QUIC リスナー] ドロップダウンリストから作成済みの QUIC リスナーを選択します。
QUIC リスナーを作成していない場合は、[リスナーの作成] をクリックして作成します。詳細については、「QUIC リスナーの追加」をご参照ください。
ALB は iQUIC と gQUIC をサポートしています。詳細については、「QUIC プロトコルを使用してオーディオおよびビデオサービスへのアクセスを高速化する」をご参照ください。
ステップ 2: SSL 証明書の設定
HTTPS リスナーを作成するときは、サービスが暗号化され、認証局 (CA) によって認証されるように SSL 証明書を設定する必要があります。次の表に、ALB に設定できる証明書を示します。
証明書 | 説明 | 一方向認証に必要 | 相互認証に必要 |
サーバー証明書 | サーバーの ID を検証します。 ブラウザは、サーバーから送信された証明書が信頼できる CA によって発行されたものかどうかを確認します。詳細については、「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 証明書ソースを [Alibaba Cloud によって発行されていない] に設定し、[デフォルト CA 証明書の選択] ドロップダウンリストから CA 証明書を選択します。
自己署名 CA 証明書が利用できない場合は、ドロップダウンリストの [自己署名 CA 証明書のアップロード] をクリックします。[証明書アプリケーションリポジトリ] ページで、リポジトリを作成し、そのデータソースを [CA 証明書のアップロード] に設定します。次に、リポジトリから自己署名ルート CA 証明書または自己署名中間 CA 証明書をアップロードします。
説明標準および WAF 対応の ALB インスタンスのみが相互認証をサポートします。Basic ALB インスタンスはサポートしません。
相互認証を有効にした後で無効にする必要がある場合は、次のステップを実行します。
[インスタンス] ページで、ターゲットインスタンスの ID をクリックします。
[リスナー] タブで、ターゲット HTTPS リスナーの ID をクリックします。
[リスナーの詳細] タブで、[SSL 証明書] セクションの相互認証スイッチをオフにします。
[TLS セキュリティポリシー] を選択し、[次へ] をクリックします。
利用可能な TLS セキュリティポリシーがない場合は、ドロップダウンリストの [TLS セキュリティポリシーの作成] をクリックします。
TLS セキュリティポリシーには、HTTPS でサポートされている TLS プロトコルバージョンと暗号スイートが含まれています。
ステップ 3: サーバーグループの選択
サーバーグループ ウィザードで、サーバーグループを選択し、バックエンドサーバーに関する情報を表示してから、[次へ] をクリックします。
ステップ 4: 確認
確定 ページで、設定を確認し、[送信] をクリックします。
HTTPS リスナーのクイック作成
リスナーをクイック作成することを選択した場合、リスナープロトコル、リスナーポート、サーバー証明書、TLS セキュリティポリシー、およびバックエンドサーバーグループのみを設定する必要があります。
上部のナビゲーションバーで、ALB インスタンスがデプロイされているリージョンを選択します。
[インスタンス] ページで、ターゲットインスタンスを見つけてその ID をクリックします。
[リスナー] タブをクリックし、[リスナー] タブで [リスナーのクイック作成] をクリックします。
[リスナーのクイック作成] ダイアログボックスで、次のパラメーターを設定し、[OK] をクリックします。
リスナー設定
説明
リスナープロトコルの選択
リスナープロトコルを選択します。この例では、[HTTPS] が選択されています。
リスナーポート
リスナーポートを指定します。これは、リクエストを受信してバックエンドサーバーに転送するフロントエンドポートです。
一般的なポートをクリックしてクイック選択するか、カスタムポート番号を入力できます。有効なポート範囲は 1 から 65535 です。
サーバー証明書の選択
ドロップダウンリストからサーバー証明書を選択します。
利用可能なサーバー証明書がない場合は、ドロップダウンリストの [証明書の作成] をクリックして新しいものを作成します。詳細については、「商用証明書の購入」および「SSL 証明書のアップロード」をご参照ください。
リソースグループの選択
サーバーグループを含むリソースグループを選択します。
TLS セキュリティポリシー
利用可能な TLS セキュリティポリシーがない場合は、ドロップダウンリストの [TLS セキュリティポリシーの作成] をクリックして作成します。詳細については、「TLS セキュリティポリシー」をご参照ください。
サーバーグループ
サーバーグループのタイプとバックエンドサーバーを選択します。
よくある質問
HTTPS はどの TLS プロトコルバージョンをサポートしていますか?
TLS 1.0、TLS 1.1、TLS 1.2、および TLS 1.3。詳細については、「TLS セキュリティポリシー」をご参照ください。
バックエンドサーバーは、HTTPS リスナーへのクライアントリクエストのプロトコルバージョンを取得できますか?
はい、できます。
HTTPS リスナーがバックエンドサーバーにアクセスするために使用する HTTP プロトコルバージョンは何ですか?
クライアントリクエストが HTTP/1.1 または HTTP/2 を使用する場合、レイヤー 7 リスナーは HTTP/1.1 を使用してバックエンドサーバーにアクセスします。
クライアントリクエストが HTTP/1.1 または HTTP/2 以外のプロトコルを使用する場合、レイヤー 7 リスナーは HTTP/1.0 を使用してバックエンドサーバーにアクセスします。
ALB リスナーでワイルドカード証明書を使用するためのルールは何ですか?
ALB インスタンスに HTTPS リスナーを追加する際に、ワイルドカード証明書を選択する場合は、次のルールに注意してください。
ワイルドカード証明書を選択する場合、ALB は単一のワイルドカード文字 (
*) を含み、かつワイルドカード文字 (*) がドメイン名の最も左の部分にある証明書のみを認識できます。たとえば、ALB は*.example.comと*test.example.comを認識できますが、test*.example.comは認識できません。ワイルドカードドメイン名の一致ルール:
レベル: ワイルドカードドメイン名は、同じレベルのサブドメインにのみ一致します。たとえば、
*.example.comはtest.example.comに一致しますが、サブドメインのレベルが異なるためtest.test.example.comには一致しません。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 セッションチケットの有効期間はどのくらいですか?
HTTPS セッションチケットの有効期間は 300 秒です。
リファレンス
チュートリアル
ALB は、さまざまな高度な転送ルールを提供します。詳細については、「リスナー転送ルールの設定」をご参照ください。
異常な状態コードが返された場合は、「ALB 状態コード」をご参照ください。
ヘルスチェックが異常な場合は、「ALB ヘルスチェック例外のトラブルシューティング」をご参照ください。
その他のシナリオベースのチュートリアルについては、次のトピックをご参照ください:
HTTP リクエストを HTTPS リスナーにリダイレクトする: ALB リスナーの転送ルールを設定して、HTTP リクエストを HTTPS リスナーにリダイレクトします。これにより、ALB インスタンスでのデータ送信が暗号化され、中間者攻撃やデータ漏洩を防ぎ、最新で安全なネットワークアーキテクチャを構築するのに役立ちます。
エンドツーエンドの HTTPS を設定して暗号化通信を実装する: ALB はエンドツーエンドの HTTPS 暗号化を提供します。この機能により、クライアントから ALB へ、および ALB からバックエンドサーバーへの暗号化通信が可能になり、機密性の高いサービスのセキュリティが向上します。
単一の ALB インスタンスで異なるドメイン名に対して複数の HTTPS ウェブサイトを設定する: 異なるドメイン名の HTTPS リクエストを異なるバックエンドサーバーに転送するには、複数の証明書を ALB HTTPS リスナーにアタッチし、ドメインベースの転送ルールを設定して複数の HTTPS ウェブサイトへのアクセスを有効にすることができます。
ALB を使用して HTTPS サービス (相互認証) をデプロイする: 金融やヘルスケアなど、高度なセキュリティ検証が必要なシナリオでは、ALB の HTTPS 相互認証機能を使用して、クライアントとサーバー間の相互 ID 認証を実装できます。これにより、データ転送のセキュリティが確保されます。