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

Alibaba Cloud Service Mesh:Alibaba Cloud IDaaS と ASM を統合したシングルサインオン (SSO) の実現

最終更新日:Mar 11, 2026

サービスメッシュ内のアプリケーションでは、多くの場合、ユーザー認証が必要となります。しかし、各アプリケーションにログインロジックを実装するのは、コストがかかり、エラーも発生しやすくなります。Service Mesh (ASM) は、ゲートウェイレベルで認証を外部の ID プロバイダー (IdP) に委任します。これにより、イングレスゲートウェイの背後にあるすべてのアプリケーションは、コードを一切変更することなく、単一のシングルサインオン (SSO) フローを共有できます。このガイドでは、OpenID Connect (OIDC) を介して、Alibaba Cloud Identity as a Service (IDaaS) を IdP として使用します。

仕組み

ユーザーが ASM イングレスゲートウェイ経由でアプリケーションにリクエストを送信すると、次のようになります。

  1. OIDC 権限付与サービスがリクエストをインターセプトし、有効なセッションがあるか確認します。

  2. 有効なセッションが存在しない場合、ユーザーは IDaaS のログインページにリダイレクトされます。

  3. 認証後、IDaaS は JSON Web トークン (JWT) を発行し、ユーザーをアプリケーションにリダイレクトして戻します。

  4. ASM は JWT を検証し、認証されたユーザー ID とともにリクエストをアプリケーションに転送します。

IDaaS (または任意の OIDC 互換 IdP) を ASM のカスタム権限付与サービスとして登録すると、メッシュがゲートウェイの背後にあるすべてのアプリケーションの認証を処理します。

基本概念

概念説明
IdP (ID プロバイダー)デジタル ID を保存および検証するシステムです。たとえば、Alipay アカウントとパスワードを使用して Youku にログインする場合、Alipay が IdP となります。
OIDCOAuth 2.0 上に構築された標準の ID 認証プロトコルです。詳細については、OpenID 公式ウェブサイトをご参照ください。
スコープアプリケーションがアクセスできるユーザー情報の種類を制御する OIDC パラメーターです。メールアドレスなどの各情報タイプは、それぞれ 1 つのスコープに対応します。

前提条件

開始する前に、次のものが揃っていることを確認してください。

ステップ 1:IDaaS インスタンスとテストアカウントの作成

IDaaS インスタンスは独立したアカウントシステムとして機能します。後で SSO を検証するために、インスタンスを作成し、テストユーザーを追加します。

  1. IDaaS コンソールにログインし、IDaaS インスタンスを作成します。

  2. EIAM ページの [IDaaS] タブで、IDaaS インスタンスの [ID] をクリックします。

  3. 左側のナビゲーションウィンドウで、[アカウント] > [アカウントと組織] を選択します。

  4. 「アカウント」ページの[アカウント]タブで、[ユーザーの作成]をクリックします。

  5. [ユーザーの作成] パネルで、パラメーターを設定し、[確認] をクリックします。

ステップ 2:OIDC アプリケーションの追加と設定

IDaaS はさまざまな種類のアプリケーションをサポートしています。この例では、OIDC アプリケーションが ID システムをメッシュアプリケーションに公開し、SSO を実現します。

  1. IDaaS インスタンスの詳細ページの左側のナビゲーションウィンドウで、[アプリケーション] をクリックします。

  2. [アプリケーション]」ページで、「[アプリケーションの追加]」をクリックします。

  3. [アプリケーションの追加] ページで、[標準プロトコル] タブをクリックします。[OIDC] カードで、[アプリケーションの追加] をクリックします。

  4. [アプリケーションの追加 - OIDC] ダイアログボックスで、アプリケーション名を入力し、[追加] をクリックします。

  5. OIDC アプリケーションの詳細ページで、[サインイン] をクリックし、次に [SSO] タブをクリックします。

  6. [シングルサインオン (SSO)] タブで、[リダイレクト URI] を設定します。[詳細設定を表示] をクリックします。[スコープ] セクションで、アプリケーションがアクセスできる情報の種類を選択します。その後、[保存] をクリックします。

    説明

    リダイレクト URI パラメーターを http://<CLB-instance-IP>/oauth2/callback に設定します。<CLB-instance-IP> は、イングレスゲートウェイにバインドされている CLB インスタンスの IP アドレスに置き換えてください。

  7. OIDC アプリケーションの詳細ページで、[サインイン] をクリックし、次に [アプリケーション権限の付与] タブをクリックします。[アプリケーション権限の付与] タブで、[承認] をクリックします。

  8. [承認]」ダイアログボックスで、ステップ 1 で作成したアカウントを承認し、[確認] をクリックします。

OIDC アプリケーションの設定後、次の値を記録します。これらの値は、ASM インスタンスで SSO を設定する際に必要になります。

場所
発行者OIDC アプリケーション詳細ページの [SSO] タブの [アプリケーション設定] セクション。Issuer
client_id と client_secret[一般]OIDC アプリケーション詳細ページの タブ。id

ステップ 3:テストアプリケーションのデプロイとイングレスゲートウェイ経由での公開

SSO の設定を検証するために、httpbin アプリケーションをデプロイします。httpbin は、認証後に IdP が付加する ID 情報を含むリクエストの詳細を表示します。

httpbin アプリケーションのデプロイ

次の内容で YAML ファイルを作成し、ACK クラスターの default 名前空間に適用します。

apiVersion: v1
kind: ServiceAccount
metadata:
  name: httpbin
---
apiVersion: v1
kind: Service
metadata:
  name: httpbin
  labels:
    app: httpbin
    service: httpbin
spec:
  ports:
  - name: http
    port: 8000
    targetPort: 80
  selector:
    app: httpbin
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: httpbin
spec:
  replicas: 1
  selector:
    matchLabels:
      app: httpbin
      version: v1
  template:
    metadata:
      labels:
        app: httpbin
        version: v1
    spec:
      serviceAccountName: httpbin
      containers:
      - image: docker.io/kennethreitz/httpbin
        imagePullPolicy: IfNotPresent
        name: httpbin
        ports:
        - containerPort: 80

Istio ゲートウェイの設定

次の内容で YAML ファイルを作成し、ASM インスタンスの Istio ゲートウェイを設定します。詳細については、「Istio ゲートウェイの管理」をご参照ください。

apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: ingressgateway
  namespace: istio-system
spec:
  selector:
    app: istio-ingressgateway
  servers:
    - hosts:
        - '*'
      port:
        name: http
        number: 80
        protocol: HTTP

仮想サービスの作成

次の内容で YAML ファイルを作成し、httpbin アプリケーションにトラフィックをルーティングします。詳細については、「仮想サービスの管理」をご参照ください。

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: ingressgateway-vs
  namespace: istio-system
spec:
  gateways:
    - ingressgateway
  hosts:
    - '*'
  http:
    - name: default
      route:
        - destination:
            host: httpbin.default.svc.cluster.local
            port:
              number: 8000

デプロイメントの検証

次のコマンドを実行して、httpbin がイングレスゲートウェイ経由でアクセス可能であることを確認します。

curl -I http://<ingress-gateway-IP>:80

<ingress-gateway-IP> をご利用のイングレスゲートウェイの IP アドレスに置き換えます。期待される出力は、次のような HTTP 200 応答です。

HTTP/1.1 200 OK
server: istio-envoy
httpbin

ステップ 4:カスタム権限付与サービスの登録と OIDC SSO の設定

OIDC 権限付与サービスの登録

  1. ASM コンソール」にログインします。左側のナビゲーションウィンドウで、Service Meshメッシュ管理 を選択します。

  2. メッシュ管理]ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、[メッシュセキュリティセンター] > [カスタム認可サービス]を選択します。表示されたページで、[カスタム認可サービスの定義]をクリックします。

  3. [カスタム認可サービスの登録] ページで、[OIDC 認可・認証サービス] タブをクリックし、パラメーターを構成してから [作成] をクリックします。 ステップ 2 の Issuer、client_id、および client_secret の値を使用します。 リダイレクト URL をイングレスゲートウェイの IP アドレスに設定します。 cookie シークレットの生成の詳細については、Cookie シークレットの生成をご参照ください。

権限付与サービスのドメイン名の取得

kubeconfig ファイルを使用してデータプレーン上の ACK クラスターに接続し、次のコマンドを実行します。

kubectl get svc -n istio-system | grep oauth2proxy | awk -F' ' '{print $1}'

出力は OIDC 権限付与サービスのドメイン名です。例:

oauth2proxy-xxxx

次のステップのためにこの値を記録しておきます。

認証リクエスト用の仮想サービスの作成

イングレスゲートウェイから OIDC 権限付与サービスへの認証リクエストをルーティングするための仮想サービスを作成します。<OIDC-authorization-service-domain-name> を前のステップで取得したドメイン名に置き換えます。

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: oauth2-vs
  namespace: istio-system
spec:
  gateways:
    - ingressgateway
  hosts:
    - '*'
  http:
    - match:
        - uri:
            prefix: /oauth2
      name: oauth2
      route:
        - destination:
            host: <OIDC-authorization-service-domain-name>
            port:
              number: 4180
重要

他の仮想サービスのルーティングルールで、マッチングプレフィックスを /oauth2 に設定しないでください。これにより、仮想サービス間の競合を防ぐことができます。

ステップ 5:権限付与ポリシーの作成

イングレスゲートウェイを通過するすべてのリクエストに OIDC 認証を強制する権限付与ポリシーを適用します。

  1. ASM インスタンスの詳細ページで、左側のナビゲーションウィンドウから [Mesh Security Center] > [AuthorizationPolicy] を選択します。表示されるページで、[YAML から作成] をクリックします。

  2. [作成] ページで、istio-system 名前空間を選択し、テンプレートを選択し、次の YAML をコードエディタに貼り付け、[作成] をクリックします。

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: oidc
  namespace: istio-system
spec:
  action: CUSTOM
  provider:
    name: httpextauth-oidc  # ステップ 4 で登録した権限付与サービスの名前。
  rules:
    - {}
  selector:
    matchLabels:
      istio: ingressgateway
説明

この権限付与ポリシーは、イングレスゲートウェイに送信されるすべてのリクエストに適用されます。

ステップ 6:SSO の検証

  1. ブラウザで http://<ingress-gateway-IP>:80 を開きます。<ingress-gateway-IP> をご利用のイングレスゲートウェイの IP アドレスに置き換えます。SSO が正しく設定されている場合、次のページが表示されます。

    1

  2. [OpenID Connectでサインイン]をクリックします。Alibaba Cloud IDaaS ログインページが表示されます。

    Alibaba Cloud IDaaS

  3. 手順 1 のテストアカウントとパスワードを入力し、[ログオン] をクリックします。認証後、httpbin アプリケーションページが表示されます:

    httpbin

  4. [検査のリクエスト] をクリックし、次に [/headers] > [試す] > [実行] を選択します。レスポンスヘッダーには、IDaaS によって発行された JWT が含まれます:

    12

  5. JWT (応答内の Bearer の後の文字列) をコピーし、JWT デバッガーに貼り付けてトークンをデコードします。デコードされた JWT には、IDaaS に保存されているユーザー情報が含まれています。この JWT は ASM によって検証されます。

    JWT