すべてのプロダクト
Search
ドキュメントセンター

Container Compute Service:ALB イングレスを用いた HTTPS 相互認証によるサービスセキュリティの強化

最終更新日:Mar 26, 2026

標準的な HTTPS ではサーバーのみが検証され、任意のクライアントが接続可能です。相互 TLS(mTLS)では、サーバーとクライアントの双方が有効な証明書を提示する必要があります。このため、信頼する CA によって署名された証明書を持つクライアントのみが接続を確立できます。Application Load Balancer (ALB) のリスナーで mTLS を強制することで、不正な接続はバックエンドに到達する前に拒否されます。

本設定は、金融、IoT、企業内サービス、および個人情報を取り扱う公共セクター向けアプリケーションに適しています。

仕組み

認証方式クライアントによるサーバー検証サーバーによるクライアント検証
片方向(標準 HTTPS)はいなし
相互(mTLS)はいはい

相互認証では、サーバーが CA 証明書を保持し、クライアントがその CA によって署名された SSL または TLS 証明書を保持します。ALB は、すべての接続においてクライアント証明書を CA 証明書に対して検証します。両者が互いの ID を検証した後にのみ、セキュアチャネルが確立されます。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

  • ALB リスナーに SSL または TLS 証明書が設定されていること。詳細については、「暗号化通信のための HTTPS 証明書の設定」をご参照ください。

  • ルート CA 証明書を以下いずれかの方法で取得済みであること:

    • Certificate Management Service コンソールからプライベート CA を購入すること — 詳細については、「プライベート CA の購入と有効化」をご参照ください。

    • 本トピックの手順 1 に従って自己署名ルート CA 証明書を生成すること

(オプション)手順 1:自己署名ルート CA 証明書の生成

ローカル環境でルート CA 証明書を生成し、Certificate Management Service コンソールにアップロードします。

証明書の生成

  1. 秘密鍵を作成します。

    openssl genrsa -out ca.key 4096
  2. 証明書署名要求(CSR)を作成します。

    フィールド説明必須
    Country Name2 文字の国別コード(例:中国の場合は cnはい
    State or Province Name州または都道府県の正式名称はい
    Locality Name市区町村名はい
    Organization Name会社または組織名はい
    Organizational Unit Name部署またはユニット名はい
    Common Name証明書のドメイン名いいえ
    Email Address証明書管理者の連絡先メールアドレスいいえ
    A challenge passwordCSR アクセスの認証に使用するパスワード。不要な場合は空欄のままにしてください。いいえ
    An optional company name不要な場合は空欄のままにしてください。いいえ
    openssl req -new -out ca.csr -key ca.key

    プロンプトが表示されたら、以下のフィールドに値を入力します。

    Country Name (2 letter code) [XX]:cn
    State or Province Name (full name) []:bj
    Locality Name (eg, city) [Default City]:bj
    Organization Name (eg, company) [Default Company Ltd]:alibaba
    Organizational Unit Name (eg, section) []:test
    Common Name (eg, your name or your servers hostname) []:root
    Email Address []:a.alibaba.com
    A challenge password []:
    An optional company name []:
  3. ルート CA 証明書を作成します。

    • ca.crt — ルート CA 証明書(手順 3 で AlbConfig の設定に使用)

    • ca.csr — CA に送付する CSR

    • ca.key — 秘密鍵(手順 2 でクライアント証明書の署名に使用)

    重要

    ca.key は機密情報を含むため、厳重に管理してください。秘密鍵にアクセス可能な者は、信頼されたクライアント証明書を発行できます。

    openssl x509 -req -in ca.csr -out ca.crt -signkey ca.key -CAcreateserial -days 3650

    ls コマンドを実行して、以下のファイルが存在することを確認します。

    ca.crt  ca.csr  ca.key

CA 証明書のアップロード

  1. Certificate Management Service コンソールにログインします。左側ナビゲーションウィンドウで、証明書申請リポジトリ をクリックします。

  2. リポジトリの作成 をクリックします。表示されるパネルで、以下のパラメーターを設定し、OK をクリックします。

    パラメーター説明
    リポジトリ名任意の名前を入力します
    データソースアップロード済み証明書 をクリックし、第三者の証明書サービスプロバイダーから購入・発行されたプライベート証明書を選択します
  3. 作成したリポジトリをクリックします。証明書の管理 ページで、アップロード済み証明書 をクリックします。

  4. CA 情報 パネルで、以下のパラメーターを設定し、確認して有効化 をクリックします。

    パラメーター説明
    パッケージ名証明書の任意の名前を入力します
    CA 証明書ca.crt の PEM エンコード形式の内容を貼り付けます。または、アップロード をクリックしてファイルを選択します
    証明書キーca.key

手順 2:クライアント証明書の生成

手順 1 で生成した自己署名 CA 証明書を使用して、クライアント証明書を発行します。この証明書は、クライアントが ALB リスナーと認証を行う際に提示されます。

  1. クライアント証明書用の秘密鍵を生成します。

    openssl genrsa -out client.key 4096
  2. クライアント証明書用の CSR を生成します。

    openssl req -new -out client.csr -key client.key
  3. 手順 1 のルート CA でクライアント証明書に署名します。

    openssl x509 -req -in client.csr -out client.crt -signkey client.key -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650

    ls コマンドを実行して、以下のファイルが存在することを確認します。

    client.crt  client.csr  client.key

手順 3:AlbConfig を使用した相互認証の有効化

AlbConfig リソースは、ALB インスタンスおよびそのリスナーを定義します。caEnabled: true をリスナーに設定すると、mTLS が有効化されます。これにより、ALB はそのリスナーへのすべての HTTPS 接続において、クライアント証明書の提示および検証を要求します。

Certificate Management Service コンソールから、以下の 2 つの証明書 ID を取得する必要があります。

  • サーバー証明書 IDSSL 証明書 > アクションアイコン > 詳細 > 証明書の詳細 パネルへ移動します

  • ルート CA 証明書 ID証明書申請リポジトリ > ご自身のリポジトリ > 証明書の管理 > 詳細 > 証明書の詳細 パネルへ移動します

以下の構造で AlbConfig を適用します。

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb-demo
spec:
  config:
    name: alb-test
    addressType: Intranet
    # 少なくとも 2 つの異なるゾーンの vSwitch を指定します。
    # これらのゾーンは ALB でサポートされており、クラスターと同じ VPC に属している必要があります。
    zoneMappings:
    - vSwitchId: vsw-2zednnurkug2xl4******
    - vSwitchId: vsw-2zeusdspvojoumx******
  listeners:
  - port: 443
    protocol: HTTPS
    caEnabled: true                                      # 相互認証を有効化
    caCertificates:
    - CertificateId: 0e40dda998174723af39d37fcaf*****   # ルート CA 証明書 ID
    certificates:
    - CertificateId: 108*****-cn-hangzhou                # サーバー証明書 ID
      IsDefault: true

手順 4:相互認証のテスト

テストサービスをデプロイし、ALB がクライアント証明書の検証を強制していることを確認します。

  1. 以下の内容で coffee.yaml というファイルを作成します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: coffee
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: coffee
      template:
        metadata:
          labels:
            app: coffee
        spec:
          containers:
          - name: coffee
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: coffee-svc
    spec:
      ports:
      - port: 80
        targetPort: 80
        protocol: TCP
      selector:
        app: coffee
      type: NodePort
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        alb.ingress.kubernetes.io/listen-ports: |
         [{"HTTPS": 443}]
      name: alb-ingress
    spec:
      ingressClassName: alb
      rules:
      - host: alb.ingress.alibaba.com  # 実際のドメイン名に置き換えてください。
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: coffee-svc
                port:
                  number: 80
  2. テストサービスをデプロイします。

    kubectl apply -f coffee.yaml

    期待される出力:

    deployment.apps/coffee created
    service/coffee-svc created
    ingress.networking.k8s.io/alb-ingress created
  3. ALB インスタンスの弾性 IP アドレス(EIP)を取得します。

    1. ALB コンソール にログインし、ALB インスタンスがデプロイされているリージョンを選択します。

    2. インスタンス ページで、ALB インスタンスをクリックします。

    3. インスタンスの詳細ページの ゾーン セクションで、vSwitch に関連付けられた EIP を確認します。

  4. ローカルの hosts ファイルに DNS レコードを追加し、ドメイン名を EIP にマップします。

    123.XX.XX.XX  alb.ingress.alibaba.com
  5. クライアント証明書を使用してアクセスをテストします。

    curl https://alb.ingress.alibaba.com/ --cert client.crt --key client.key

    サーバーから応答が返され、HTML ページにリダイレクトされます。これは、ALB がクライアント証明書を受理したことを確認するものです。

次のステップ

参考