8.2. サービスディスカバリーを有効にするための OpenShift 設定

3scale の管理者は、Open Authorization (OAuth) サーバーの使用/不使用とは独立に、サービスディスカバリーを設定することができます。

OAuth サーバーと共に 3scale サービスディスカバリーを設定する場合、ユーザーが 3scale にサインインした際のフローは以下のとおりです。

  • ユーザーが OAuth サーバーにリダイレクトされる。
  • ユーザーがまだ OAuth サーバーにログインしていなければ、ログインを求められる。
  • ユーザーが 3scale のサービスディスカバリーと SSO の組み合わせを初めて実装する場合には、OAuth サーバーは必要なアクションを実行するために承認を要求する。
  • ユーザーが再度 3scale にリダイレクトされる。

OAuth サーバー と組み合わせてサービスディスカバリーを設定する場合には、以下のオプションがあります。

OAuth サーバーと組み合わせずにサービスディスカバリーを設定する 場合、ユーザーが 3scale にサインインしてもリダイレクトされません。その代わりに、サービスディスカバリーのために、3scale Single Service Account がクラスターに対してシームレスに認証を行います。3scale を通じて API サービスを検出する間、すべての 3scale テナント管理ユーザーはクラスターに対して同じアクセスレベルを持ちます。

8.2.1. OpenShift OAuth サーバーと組み合わせたサービスディスカバリーの設定

3scale のシステム管理者は、ユーザーが OpenShift の組み込み OAuth サーバーを使用して、個別に認証、3scale を承認して API を検出するのを許可することができます。

前提条件

  • OpenShift クラスター (バージョン 3.11 以降) に 3scale 2.8 をデプロイしている必要があります。
  • 3scale を OpenShift にデプロイするには、3scale-amp-openshift-templates を使用する必要があります。
  • 3scale でサービスディスカバリーを使用する 3scale ユーザーは、OpenShift クラスターにアクセスできる必要があります。

手順

  1. 3scale 用の OpenShift OAuth クライアントを作成します。詳細は、OpenShift の認証に関するドキュメント を参照してください。以下の例で、<provide-a-client-secret> を生成するシークレットに、<3scale-master-domain-route> を 3scale マスター管理ポータルにアクセスするための URL に、それぞれ置き換えます。

        $ oc project default
        $ cat <<-EOF | oc create -f -
        kind: OAuthClient
        apiVersion: v1
        metadata:
         name: 3scale
        secret: "<provide-a-client-secret>"
        redirectURIs:
         - "<3scale-master-domain-route>"
        grantMethod: prompt
        EOF
  2. 3scale サービスディスカバリーの設定ファイルを開きます。

        $ oc project <3scale-project>
        $ oc edit configmap system
  3. 以下のように設定します。

        service_discovery.yml:
          production:
            enabled: true
            authentication_method: oauth
            oauth_server_type: builtin
            client_id: '3scale'
            client_secret: '<choose-a-client-secret>'
  4. ユーザーが適切なアクセス権限を持ち、検出可能なサービスが含まれるクラスタープロジェクトを表示できるようにしてください。

    <user> で表される管理ユーザーに、検出されるサービスが含まれる <namespace> プロジェクトを表示する権限を付与するには、以下のコマンドを使用します。

    oc adm policy add-role-to-user view <user> -n <namespace>
  5. configmap を変更したら、system-app および system-sidekiq Pod を再デプロイし、変更を適用する必要があります。

    oc rollout latest dc/system-app
    oc rollout latest dc/system-sidekiq
  6. ロールアウトのステータスをチェックし、完了したことを確認します。

    oc rollout status dc/system-app
    oc rollout status dc/system-sidekiq

補足説明

OpenShift OAuth トークンについての詳細は、『認証』の「内部 OAuth サーバーの設定」を参照してください。

8.2.2. RH-SSO サーバー (Keycloak) と組み合わせたサービスディスカバリーの設定

システム管理者は、ユーザーが OpenShift 向け Red Hat Single Sign-On を使用して、個別に認証、3scale を承認してサービスを検出するのを許可することができます。

OpenShift の承認ゲートウェイとして RH-SSO デプロイメントを使用する OpenShift の設定例については、この ワークフロー を参照してください

前提条件

  • OpenShift クラスター (バージョン 3.11 以降) に 3scale 2.8 をデプロイしている必要があります。
  • 3scale を OpenShift にデプロイするには、3scale-amp-openshift-templates を使用する必要があります。
  • 3scale でサービスディスカバリーを使用する 3scale ユーザーは、OpenShift クラスターにアクセスできる必要があります。

手順

  1. Red Hat OAuth サーバー (Keycloak) に、3scale 用の OAuth クライアントを作成します。

    注記

    クライアント設定で、OpenShift がアカウントをリンクすることができるように、usernamepreferred_username にマッピングされていることを確認します。

  2. 3scale サービスディスカバリーの設定を編集します。

        $ oc project <3scale-project>
        $ oc edit configmap system
  3. 以下のように設定されていることを確認します。ここで、<the-client-secret-from-Keycloak> は、OAuth クライアントの作成時に Keycloak が自動生成した値です。

        service_discovery.yml:
          production:
            enabled: true
            authentication_method: oauth
            oauth_server_type: rh_sso
            client_id: '3scale'
            client_secret: '<the-client-secret-from-Keycloak>'
  4. ユーザーが適切なアクセス権限を持ち、検出可能なサービスが含まれるクラスタープロジェクトを表示できるようにしてください。

    たとえば、<user><namespace> プロジェクトを表示する権限を付与するには、以下のコマンドを使用します。

    oc adm policy add-role-to-user view <user> -n <namespace>
  5. configmap を変更したら、system-app および system-sidekiq Pod を再デプロイし、変更を適用する必要があります。

補足説明:

  • トークンの有効期限:『Keycloak Server Administration Guide』の「Session and Token Timeouts」に記載されるように、デフォルトではセッショントークンの有効期限は 1 分です。ただし、タイムアウトを妥当な値 (たとえば 1 日) に設定することを推奨します。

8.2.3. OAuth サーバーと組み合わせないサービスディスカバリーの設定

OAuth サーバーを使用しない状況で 3scale のサービスディスカバリーを設定する場合には、3scale Single Service Account を使用して OpenShift API サービスに対する認証を行うことができます。

前提条件

  • OpenShift クラスター (バージョン 3.11 以降) に 3scale 2.8 をデプロイしている必要があります。
  • 3scale を OpenShift にデプロイするには、3scale-amp-openshift-templates を使用する必要があります。
  • 3scale でサービスディスカバリーを使用する 3scale ユーザーは、OpenShift クラスターにアクセスできる必要があります。

手順

  1. 3scale プロジェクトをアクティブなプロジェクトにします。

       $ oc project <3scale-project>
  2. エディターで 3scale サービスディスカバリーの設定を開きます。

       $ oc edit configmap system
  3. 以下のように設定されていることを確認します。

    service_discovery.yml:
       production:
          enabled: <%= cluster_token_file_exists = File.exists?(cluster_token_file_path = '/var/run/secrets/kubernetes.io/serviceaccount/token') %>
          bearer_token: "<%= File.read(cluster_token_file_path) if cluster_token_file_exists %>"
          authentication_method: service_account
  4. 以下のいずれかのオプションに従って、3scale デプロイメントの amp サービスアカウントに、検出可能なサービスが含まれるプロジェクトを表示するための適切な権限を付与します。

    • 3scale デプロイメントの amp サービスアカウントに、クラスターレベルの 表示 権限を付与する。

      oc adm policy add-cluster-role-to-user view system:serviceaccount:<3scale-project>:amp
    • 『Developer Guide』の「Service Accounts」で説明するように、より厳しいポリシーを適用する。