プールレベルでの TLS 相互認証の設定

プールレベルで TLS ( mTLS )の相互認証を設定し、バックエンドサーバーへの接続時に、バックエンドサーバーの証明書を検証し、クライアント証明書を提示するようにします。

開始前に

プールレベルで認証を設定する前に、以下の条件が満たされていることを確認してください:

  • mTLS をサポートするプロファイルを持つアプリケーション・ロードバランサー( mtls_supported プロパティを確認してください)
  • HTTPS プロトコルで構成されたプール
  • (オプション)バックエンドサーバーの証明書を検証するために、 Secrets Manager に保存された、 PEM 形式の有効なCA証明書
  • (オプション) Secrets Manager に保存され、 PEM 形式の秘密鍵を含む有効なクライアント証明書。これをバックエンドサーバーに提示するために使用します
  • で、ロードバランサーやアクセス証明書を管理するために必要な適切なIAM権限は、 Secrets Manager

mTLS のプールレベル認証について

プールレベル認証は、ロードバランサーとバックエンドサーバー間の接続を保護するために、以下の2つの異なる機能を提供します

サーバー認証
設定済みのCA証明書と照合して、バックエンドサーバーの証明書を検証し、その身元を確認します。 これにより、ロードバランサーが信頼できるバックエンドサーバーにのみ接続するよう保証されます。
クライアント認証
バックエンドインフラストラクチャで mTLS が必要とされる場合、ロードバランサーからバックエンドサーバーに対してクライアント証明書を提示します。 これにより、バックエンドサーバーはロードバランサーの身元を確認できるようになります。

これらの機能は、セキュリティ要件に応じて、個別に、あるいは組み合わせて設定することができます。

mTLS サーバーの認証設定

サーバー認証は、次の2つの要素で構成されています:

証明書の検証
バックエンドサーバーの証明書検証を有効または無効にするブール値のフラグ。 この機能を有効にすると、ロードバランサーは TLS ハンドシェイク中にバックエンドサーバーの証明書を検証します。
認証局(CA)証明書
バックエンドサーバーの証明書を検証するために使用される、オプションのCA証明書。 サーバーの検証が有効になっているにもかかわらず、CA証明書が提供されていない場合、ロードバランサーはシステムの信頼ストアを使用して、バックエンドサーバーの証明書を検証します。

mTLS のクライアント認証設定

クライアント認証には、以下のものが必要です:

クライアント証明書
TLS ハンドシェイク中にバックエンドサーバーがクライアント認証を要求した際、ロードバランサーがバックエンドサーバーに提示する、秘密鍵付きの証明書。 証明書は、 Secrets Manager に保存する必要があります。

コンソールでの mTLS プール認証の設定

IBM Cloud コンソールでプールの認証を設定するには:

  1. VPC 用ロードバランサー 」ページに移動します。
  2. アプリケーション・ロードバランサーの名前をクリックしてください。
  3. [ バックエンドプール ] タブをクリックします。
  4. 既存のプールについては、 [アクション] メニュー ![ をクリックし、 [編集] を選択します。 新しいプールを作成するには、「 作成 」をクリックしてください。
  5. プール設定では:
    • プロトコル 」が HTTPS に設定されていることを確認してください。
  6. サーバー認証 」セクションでは:
    • サーバー証明書の検証 」を選択して、バックエンドサーバーの証明書検証を有効にします。
    • (任意)「 認証局 」では、バックエンドサーバーの証明書の検証に使用する、 Secrets Manager にある CA 証明書を選択してください。 指定がない場合は、システムのトラストストアが使用されます。
  7. クライアント認証 」セクションでは:
    • クライアント証明書については、 Secrets Manager から、ロードバランサーがバックエンドサーバーに提示する証明書を選択してください。
  8. 保存 」または「 作成 」をクリックします。

CLI からの「 mTLS 」プール認証の設定

mTLS のサーバー認証を使用したプールの作成

バックエンドサーバーの証明書検証を有効にしたプールを作成するには、 ibmcloud is load-balancer-pool-create コマンドを使用します

ibmcloud is load-balancer-pool-create POOL_NAME LOAD_BALANCER ALGORITHM PROTOCOL \
  HEALTH_DELAY HEALTH_RETRIES HEALTH_TIMEOUT HEALTH_TYPE \
  --server-auth-verify-cert true \
  [--server-auth-ca-crn CA_CERT_CRN]

ここで、

  • POOL_NAME は、あなたのプールの名前です。
  • LOAD_BALANCER これは、ロードバランサーのIDまたは名前です。
  • ALGORITHM は、負荷分散アルゴリズム(round_robin、weighted_round_robin、または least_connections)です。
  • PROTOCOL mTLS に対応するには、 である必要があります。 https
  • CA_CERT_CRN これは、バックエンドサーバーの証明書を検証するために使用されるCA証明書のオプションのCRNです。

次に例を示します。

ibmcloud is load-balancer-pool-create my-pool my-load-balancer round_robin https \
  20 2 5 http \
  --server-auth-verify-cert true \
  --server-auth-ca-crn crn:v1:bluemix:public:secrets-manager:us-south:a/aa5a471f75bc456fac416bf02c4ba6de:aace9348-39da-4498-b132-e5ab918237f4:secret:e3bd96ce-1e4c-f642-d1f2-0d0ab025f511

mTLS のクライアント認証を使用したプールの作成

クライアント証明書の提示を有効にしたプールを作成するには:

ibmcloud is load-balancer-pool-create POOL_NAME LOAD_BALANCER ALGORITHM PROTOCOL \
  HEALTH_DELAY HEALTH_RETRIES HEALTH_TIMEOUT HEALTH_TYPE \
  --client-auth-cert-crn CLIENT_CERT_CRN

次に例を示します。

ibmcloud is load-balancer-pool-create my-pool my-load-balancer round_robin https \
  20 2 5 http \
  --client-auth-cert-crn crn:v1:bluemix:public:secrets-manager:us-south:a/aa5a471f75bc456fac416bf02c4ba6de:aace9348-39da-4498-b132-e5ab918237f4:secret:e3bd96ce-1e4c-f642-d1f2-0d0ab025f512

サーバー側とクライアント側の両方で mTLS 認証を行うプールの作成

サーバーによる検証とクライアント証明書の提示の両方を行うプールを作成するには:

ibmcloud is load-balancer-pool-create my-pool my-load-balancer round_robin https \
  20 2 5 http \
  --server-auth-verify-cert true \
  --server-auth-ca-crn crn:v1:bluemix:public:secrets-manager:us-south:a/aa5a471f75bc456fac416bf02c4ba6de:aace9348-39da-4498-b132-e5ab918237f4:secret:e3bd96ce-1e4c-f642-d1f2-0d0ab025f511 \
  --client-auth-cert-crn crn:v1:bluemix:public:secrets-manager:us-south:a/aa5a471f75bc456fac416bf02c4ba6de:aace9348-39da-4498-b132-e5ab918237f4:secret:e3bd96ce-1e4c-f642-d1f2-0d0ab025f512

mTLS サーバー認証を有効にするためのプールの更新

既存のプールを更新してサーバー認証を有効にするには:

ibmcloud is load-balancer-pool-update LOAD_BALANCER POOL \
  --server-auth-verify-cert true \
  [--server-auth-ca-crn CA_CERT_CRN]

次に例を示します。

ibmcloud is load-balancer-pool-update my-load-balancer my-pool \
  --server-auth-verify-cert true \
  --server-auth-ca-crn crn:v1:bluemix:public:secrets-manager:us-south:a/aa5a471f75bc456fac416bf02c4ba6de:aace9348-39da-4498-b132-e5ab918237f4:secret:e3bd96ce-1e4c-f642-d1f2-0d0ab025f511

mTLS のクライアント認証を有効にするためにプールを更新する

既存のプールを更新してクライアント認証を有効にするには:

ibmcloud is load-balancer-pool-update LOAD_BALANCER POOL \
  --client-auth-cert-crn CLIENT_CERT_CRN

mTLS のサーバー認証を無効にする

プールに対してサーバー認証を無効にするには:

ibmcloud is load-balancer-pool-update LOAD_BALANCER POOL --reset-server-auth

mTLS のクライアント認証を無効にする

プールに対してクライアント認証を無効にするには:

ibmcloud is load-balancer-pool-update LOAD_BALANCER POOL --reset-client-auth

API を使用したプール認証の設定

mTLS サーバーを使用したプールを作成し、サーバーおよびクライアント認証を設定する

サーバー認証とクライアント認証の両方が有効なプールを作成するには、 POST /load_balancers/{load_balancer_id}/pools メソッドを呼び出します

curl -X POST \
  "$vpc_api_endpoint/v1/load_balancers/$load_balancer_id/pools?version=2026-05-06&generation=2" \
  -H "Authorization: Bearer $iam_token" \
  -d '{
    "name": "my-pool",
    "algorithm": "round_robin",
    "protocol": "https",
    "health_monitor": {
      "delay": 20,
      "max_retries": 2,
      "timeout": 5,
      "type": "http"
    },
    "server_authentication": {
      "verify_certificate": true,
      "certificate_authority": {
        "crn": "crn:v1:bluemix:public:secrets-manager:us-south:a/aa5a471f75bc456fac416bf02c4ba6de:aace9348-39da-4498-b132-e5ab918237f4:secret:e3bd96ce-1e4c-f642-d1f2-0d0ab025f511"
      }
    },
    "client_authentication": {
      "certificate_instance": {
        "crn": "crn:v1:bluemix:public:secrets-manager:us-south:a/aa5a471f75bc456fac416bf02c4ba6de:aace9348-39da-4498-b132-e5ab918237f4:secret:e3bd96ce-1e4c-f642-d1f2-0d0ab025f512"
      }
    }
  }'

mTLS サーバー認証を有効にするためのプールの更新

既存のプールを更新してサーバー認証を有効にするには、 PATCH /load_balancers/{load_balancer_id}/pools/{id} メソッドを呼び出します

curl -X PATCH \
  "$vpc_api_endpoint/v1/load_balancers/$load_balancer_id/pools/$pool_id?version=2026-05-06&generation=2" \
  -H "Authorization: Bearer $iam_token" \
  -d '{
    "server_authentication": {
      "verify_certificate": true,
      "certificate_authority": {
        "crn": "crn:v1:bluemix:public:secrets-manager:us-south:a/aa5a471f75bc456fac416bf02c4ba6de:aace9348-39da-4498-b132-e5ab918237f4:secret:e3bd96ce-1e4c-f642-d1f2-0d0ab025f511"
      }
    }
  }'

mTLS のクライアント認証を有効にするためにプールを更新する

既存のプールを更新してクライアント認証を有効にするには:

curl -X PATCH \
  "$vpc_api_endpoint/v1/load_balancers/$load_balancer_id/pools/$pool_id?version=2026-05-06&generation=2" \
  -H "Authorization: Bearer $iam_token" \
  -d '{
    "client_authentication": {
      "certificate_instance": {
        "crn": "crn:v1:bluemix:public:secrets-manager:us-south:a/aa5a471f75bc456fac416bf02c4ba6de:aace9348-39da-4498-b132-e5ab918237f4:secret:e3bd96ce-1e4c-f642-d1f2-0d0ab025f512"
      }
    }
  }'

mTLS のサーバー認証を無効にする

サーバー認証を無効にするには、 server_authentication プロパティを null に設定します:

curl -X PATCH \
  "$vpc_api_endpoint/v1/load_balancers/$load_balancer_id/pools/$pool_id?version=2026-05-06&generation=2" \
  -H "Authorization: Bearer $iam_token" \
  -d '{
    "server_authentication": null
  }'

mTLS のクライアント認証を無効にする

クライアント認証を無効にするには、 client_authentication プロパティを null に設定します:

curl -X PATCH \
  "$vpc_api_endpoint/v1/load_balancers/$load_balancer_id/pools/$pool_id?version=2026-05-06&generation=2" \
  -H "Authorization: Bearer $iam_token" \
  -d '{
    "client_authentication": null
  }'

Terraform を使用した「 mTLS 」プールの認証設定

Terraform を使用してプールの認証を設定するには、 ibm_is_lb_pool リソースと、 server_authentication および client_authentication ブロックを使用します

resource "ibm_is_lb_pool" "example" {
  lb                 = ibm_is_lb.example.id
  name               = "my-pool"
  algorithm          = "round_robin"
  protocol           = "https"
  health_delay       = 20
  health_retries     = 2
  health_timeout     = 5
  health_type        = "http"

  server_authentication {
    verify_certificate = true
    certificate_authority_crn = "crn:v1:bluemix:public:secrets-manager:us-south:a/aa5a471f75bc456fac416bf02c4ba6de:aace9348-39da-4498-b132-e5ab918237f4:secret:e3bd96ce-1e4c-f642-d1f2-0d0ab025f511"
  }

  client_authentication {
    certificate_instance_crn = "crn:v1:bluemix:public:secrets-manager:us-south:a/aa5a471f75bc456fac416bf02c4ba6de:aace9348-39da-4498-b132-e5ab918237f4:secret:e3bd96ce-1e4c-f642-d1f2-0d0ab025f512"
  }
}

mTLS のプール認証設定の確認

プール認証の設定が完了したら、正しく動作していることを確認してください:

  1. プールの状態を確認し、バックエンドサーバーが正常に動作していることを確認してください:

    ibmcloud is load-balancer-pool LOAD_BALANCER POOL
    
  2. サーバーの検証が有効になっている場合は、バックエンドサーバーが、設定されたCAによって署名された有効な証明書を提示していることを確認してください。

  3. クライアント認証が有効になっている場合は、バックエンドサーバーがロードバランサーから提示されたクライアント証明書を検証できることを確認してください。

  4. ロードバランサーのログを監視し、証明書の検証に関する問題を示唆する可能性のある「 TLS 」ハンドシェイクエラーがないか確認してください。

mTLS のプールレベル認証に関する重要な注意事項

プールレベルの設定は、すべてのバックエンドサーバーに適用されます
サーバー認証とクライアント認証は、いずれもプールレベルで設定されます。 プール内のすべてのバックエンドサーバーは、同じ認証設定を使用します。 バックエンドサーバーごとに異なる証明書ポリシーが必要な場合は、個別のプールを作成してください。
バックエンドサーバー向けの複数の認証局
同じプール内のバックエンドサーバーが、異なる認証局(CA)によって署名されている場合、関連するすべてのルート証明書および中間証明書を含むCAファイルのバンドルを提供することができます。 すべてのバックエンドサーバーは、その証明書チェーンがバンドルに含まれる任意のCAに連なっている場合、信頼されます。
システムのトラストストア
サーバーの検証が有効になっているにもかかわらず、CA証明書が提供されていない場合、ロードバランサーはシステムの信頼ストア( Ubuntu Linux )を使用して、バックエンドサーバーの証明書を検証します。 これは、著名な公開CAによって署名された証明書では機能しますが、自己署名証明書やプライベートCAによる証明書では機能しません。
証明書の更新
Secrets Manager で証明書を更新すると、ロードバランサーは自動的に更新された証明書を取得します。 ただし、新しい証明書を使用するには、アクティブな接続を再確立する必要がある場合があります。

次のステップ