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

:Alibaba Cloud IDaaS と ASM を統合してシングルサインオンを実装する

最終更新日:Jan 15, 2025

このトピックでは、Service Mesh (ASM) 内のアプリケーションへのシングルサインオン (SSO) を実装する方法について説明します。

前提条件

背景情報

ほとんどの場合、アクセス制御メカニズムのため、アプリケーションにアクセスするにはログオンする必要があります。システムには多くのアプリケーションが存在する可能性があります。SSO を使用すると、1 つのログオン資格情報のセットですべてのアプリケーションにアクセスできます。資格情報を一度送信し、カスタム認証サービスを使用してコードを変更することなく、ASM インスタンス内のすべてのアプリケーションにアクセスできます。

この機能は、アプリケーションの変換と O&M のコストを削減するのに役立ちます。この例では、Alibaba Cloud IDaaS インスタンスを ID プロバイダー (IdP) として使用して、ASM インスタンス内のすべてのアプリケーションへの SSO を実装します。メッシュ内のアプリケーションの認証メカニズムを実装する必要はありません。代わりに、Alibaba Cloud IDaaS インスタンスまたは任意の OpenID Connect (OIDC) IdP を ASM のカスタム認証サービスに登録することで、認証を IdP に委任できます。ユーザーが IdP によって認証されると、IdP は認証の詳細とユーザーリクエストをアプリケーションに送信し、信頼されたユーザーがアプリケーションにアクセスできるようにします。

概念

概念

説明

IdP

IdP は、デジタル ID を保存および検証するシステムです。たとえば、アカウントとパスワードを使用して ID を検証できます。Alipay アカウントとパスワードを使用して Youku にログオンする場合、Alipay が IdP です。

OIDC

OIDC は、OAuth 2.0 プロトコルに基づく標準 ID 認証プロトコルです。詳細については、OpenID 公式 Web サイト をご参照ください。

スコープ

スコープは OIDC の概念です。各 IdP は、メールアドレスなど、さまざまな種類のユーザー情報を保存します。各タイプはスコープに対応しています。IdP を使用してアプリケーションにアクセスするための ID を検証する場合、アプリケーションは指定された種類の情報のみを取得できます。

手順 1:IDaaS インスタンスとテストアカウントを作成する

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

    IDaaS インスタンスは独立したアカウントシステムと見なされます。

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

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

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

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

手順 2:OIDC アプリケーションを追加および設定する

SSO を実装するために IDaaS インスタンスを公開するインターフェースとして、IDaaS インスタンスにアプリケーションを追加できます。IDaaS はさまざまな種類のアプリケーションをサポートしています。この例では、OIDC アプリケーションを使用します。

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

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

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

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

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

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

    説明

    この例では、リダイレクト URI パラメーターを http://${イングレスゲートウェイにバインドされている CLB インスタンスの IP アドレス}/oauth2/callback に設定します。${} プレースホルダーを、イングレスゲートウェイにバインドされている SLB インスタンスの実際の IP アドレスに置き換えます。

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

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

OIDC アプリケーションが設定されています。発行者client_id、および client_secret の値を記録します。これらの値は、ASM インスタンスで SSO を設定するときに使用されます。

  • 発行者:発行者の値を取得するには、OIDC アプリケーションの詳細ページの [SSO] タブに移動し、[アプリケーション設定] セクションを表示します。Issuer

  • client_id および client_secret:client_id および client_secret の値を取得するには、OIDC アプリケーションの詳細ページの [一般] タブに移動します。id

手順 3:テストアプリケーションをデプロイし、イングレスゲートウェイを使用して公開する

この例では、httpbin アプリケーションがデプロイされています。このアプリケーションを使用すると、ログオン認証中に IdP から取得した情報を含むリクエストコンテンツを表示できます。

  1. ACK クラスターのデフォルトの名前空間に httpbin アプリケーションをデプロイするために、次のコンテンツを含む YAML ファイルを作成します。

    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
  2. ASM インスタンスの Istio ゲートウェイを設定するために、次のコンテンツを含む YAML ファイルを作成します。詳細については、「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
  3. ASM インスタンスの仮想サービスを作成するために、次のコンテンツを含む 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
  4. curl -I http://${イングレスゲートウェイの IP アドレス:80} コマンドを実行して、httpbin アプリケーションにアクセスします。

    出力例:httpbin

手順 4:カスタム認証サービスを登録し、ASM インスタンスで OIDC SSO を設定する

  1. ASM コンソール にログオンします。左側のナビゲーションペインで、[service Mesh] > [メッシュ管理] を選択します。

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

  3. [カスタム認証サービスの登録] ページで、[OIDC Authz And Authn Service] タブをクリックし、パラメーターを設定して、[作成] をクリックします。

    手順 2 で作成した OIDC アプリケーションの情報に基づいてパラメーターを設定します。ログオン試行をイングレスゲートウェイの IP アドレスにリダイレクトできます。Cookie シークレットの詳細については、「Cookie シークレットの生成」をご参照ください。

  4. kubeconfig ファイルを使用してデータプレーン上の ACK クラスターに接続し、次のコマンドを実行して OIDC 認証サービスのドメイン名を取得します。

    kubectl get svc -n istio-system|grep oauth2proxy|awk -F' ' '{print $1}'
  5. イングレスゲートウェイからの認証リクエストを受信する仮想サービスを作成します。次のサンプルコードは、仮想サービスを作成する方法を示しています。

    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 認証サービスのドメイン名。
                port:
                  number: 4180
    重要

    他の仮想サービスで定義されているルーティングルールで、一致するプレフィックスを /oauth2 に設定しないでください。これにより、仮想サービス間の競合を防ぎます。

手順 5:認証ポリシーを作成する

  1. ASM インスタンスの詳細ページで、左側のナビゲーションペインの [メッシュセキュリティセンター] > [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://${イングレスゲートウェイの IP アドレス:80} にアクセスします。

    次のページが表示された場合は、SSO が有効になっていることを示します。1

  2. [openid Connect でサインイン] をクリックします。

    予期される結果:Alibaba Cloud IDaaS

  3. [alibaba Cloud Idaas] のログオンページで、手順 1 で作成したテストアカウントとパスワードを入力し、[ログオン] をクリックします。

    予期される結果:httpbin

  4. [リクエスト検査] をクリックし、[/headers] > [試してみる] > [実行] を選択します。

    予期される結果:12

  5. JWT デバッガーで JSON Web トークン (JWT) を解析します。JWT はリクエストを認証するために使用され、前手順で返されたレスポンスの Bearer の後に表示されます。

    JWT デバッガーの詳細については、JWT 公式 Web サイト をご参照ください。

    予期される結果:JWT前の図の情報は、JWT の解析後に表示されます。これには、IDaaS に保存されているユーザー情報が含まれます。JWT は ASM によって検証されます。