Oktaを使用してOIDCベースの認証でK10を構成する方法


K10は、Kubernetes専用のデータ管理プラットフォームです。運用時のバックアップ/リストア、災害対策DRや開発したKubernetesアプリケーションのKubernetes環境間での移動(モビリティ)を実現する、使いやすくスケーラブルで安全なシステムです。この記事では、Okta、Google、Dex、Keycloak、Ping IDなどの有名なプロバイダーとのOpenID接続(OIDC)ベースの認証を有効にすることで、より使いやすく、安全にご利用いただく方法をご紹介します。

OIDCベースの認証を使用してKubernetes環境にアプリを既にデプロイしている場合、使い慣れた認証ワークフローを使用してK10をデプロイし、便利にご利用いただけます。
またOIDCを初めて使用する企業も、このブログのように、OIDCを簡単に採用できます。いずれの場合も、OIDCを使用してK10などのアプリを展開する場合、きめ細かいロールベースのアクセス制御を使用できることは非常に魅力的です。

今回の投稿では以下を紹介しています:

  • OpenID接続(OIDC)
  • 認証コードフロー
  • Okta開発者アカウントを使用してOIDCプロバイダーをセットアップするためのチュートリアル、およびOIDCを使用してK10をセットアップするためのチュートリアル。

OpenIDConnect-OIDC

OpenID Connect 1.0は、OAuth2.0プロトコルの上のシンプルなIDレイヤーです。これにより、クライアントは、認証サーバーによって実行された認証に基づいてエンドユーザーのIDを確認し、連携のためにRESTのような方法でエンドユーザーに関する基本的なプロファイル情報を取得できます。

認証フロー

この図は、ユーザーがK10のダッシュボードにアクセスした際の一連のイベントを示しています。フローに関係するエンティティ(ブラウザ、K10の認証サービス、およびOIDCプロバイダー)を示しています。

  1. ブラウザからのすべてのリクエストは、K10の認証サービスに到達します。ブラウザからの最初のリクエストは、トークンを含むCookieなしで 到達 します。このサービスは、ユーザーを認証されていないとみなし、OIDCプロバイダーにリダイレクトします。
  2. K10の認証サービスは、プロバイダーの/authorizeエンドポイントを呼び出します。K10の認証サービスのコールバックURLはhttps://example.com/k10/auth-svc/v0/oidc/redirectです。これは/authorizeHTTPリクエストに含まれます。
  3. OIDCプロバイダーは、K10のコールバックURLをOIDCプロバイダーに登録されているものと比較します。それらが一致する場合にのみ、OIDCプロバイダーはフローを続行し、ログインウィンドウを表示します。
  4. リクエストのコールバックとプロバイダーに登録されているコールバックが一致しない場合、OIDCプロバイダーはリダイレクトURLが一致しなかったことを示すエラーでK10の認証サービスにリダイレクトします。
  5. 一致した場合、K10の認証サービスがJSON Web Token(JWT)の要求を行うときにプロバイダーから返された「コード」を使用します。
  6. 次に、OIDCプロバイダーはJWTでK10の認証サービスに応答します。
  7. 次に、K10の認証サービスがトークンの検証を要求します。検証が成功すると、ユーザーはK10のダッシュボードにリダイレクトされます。
  8. ブラウザからの後続のリクエストは、リクエスト内のトークンを使用してK10の認証サービスに到達します。このトークンは有効であるため、認証サービスはOIDCプロバイダーにリダイレクトしなくなります。これは、トークンの有効期限が切れるまで続きます。

OIDCプロバイダーをセットアップする

このチュートリアルでは、Okta開発者アカウントを作成する必要があります。アカウントの作成については、https://developer.okta.com/を参照してください。

開発者アカウントにログインして「Application」セクションに移動すると、次のようなページが表示されます。「Add Application」をクリックします。

次に、アプリケーションの種類を「Web」として選択し、「Next」をクリックします。

次のページには、デフォルト値のアプリケーション設定が表示されます。

  • このアプリケーションの名前を設定します。
  • Login redirect URIs」をhttp://127.0.0.1:8080/k10/#/に設定します。
  • Authorization code」チェックボックスが有効になっていることを確認します。
  • Done」をクリックしてアプリケーションを作成します

注:このチュートリアルでは、「ログインリダイレクトURI」フィールドをhttp://127.0.0.1:8080/k10/#に設定する必要があります。

アプリケーションの作成後、「Client ID」と「Client sercret」を書き留めます。これは、次のセクションでK10をインストールするときに使用します。

OIDCを使用してK10をセットアップする

このセクションで使用されるツールは次のとおりです。

  • kubectl —Kubernetesクライアント
  • helm v3

helmを使用してインストールする際の、Kasten K10に関するドキュメントはここ参照してください。このチュートリアルを開始する前に、上記の前提条件のツールを構成してください。

KastenのK10 Helmチャートを使用して、Helm v3でKubernetesクラスターにK10をインストールします。

helm repo update 

helm repo add kasten https://charts.kasten.io/

K10アプリケーションをデプロイするための名前空間を作成します。

kubectl create namespace kasten-io

以下のコマンドを使用して、kasten-io名前空間にK10をインストールします

このチュートリアルを実行している間、次のフィールドを変更する必要があります。

  • プロバイダーのURLは、Okta開発者アカウントのURLを指している必要があります。
  • https://<アカウント>.okta.com/oauth2/default
  • Oktaのセットアップに関する前のセクションで書き留めたクライアントIDとクライアントシークレット
  • 残りのフィールドは変更しなくとも問題ありません。
helm install k10 kasten/k10 --namespace=kasten-io \

--set auth.oidcAuth.enabled=true \

--set auth.oidcAuth.providerURL="https://dev-270657.okta.com/oauth2/default" \

--set auth.oidcAuth.redirectURL="http://127.0.0.1:8080" \

--set auth.oidcAuth.scopes="profile email" \

--set auth.oidcAuth.prompt="select_account" \

--set auth.oidcAuth.clientID="0oa64t6tmtpMTOkZH5d7" \

--set auth.oidcAuth.clientSecret="RCXC9yLY0nrmNOZMmvuJn4Geo6Ld8vnkaHe5ee0f" \

--set auth.oidcAuth.usernameClaim="email"

Helm installは複数のデプロイメントとサービスを作成し、次のコマンドでインストールを検証できます。

kubectl get pods -n kasten-io -watch

ポッドが実行状態になったら、次のコマンドを実行した後、http://127.0.0.1:8080/k10/#/でK10ダッシュボードにアクセスできます。

kubectl --namespace kasten-io port-forward service/gateway 8080:8000 

初めてダッシュボードにアクセスすると、以下のようなOktaログインページにリダイレクトされます。

Oktaで正常にログインすると、以下に示すようにK10ダッシュボードにリダイレクトされます。

右上隅のユーザー名にカーソルを合わせると、ユーザー名全体とこのユーザーの権限が表示されます。これは、管理者ユーザーの場合は「unrestricted」、非管理者ユーザーの場合は「 limited access 」となります。

RBAC —役割ベースのアクセス制御

このチュートリアルのユーザー名には、K10への無制限の管理者アクセス権があることに注意してください。これらは、「onkarbhat13@gmail.com」の管理者アクセスを有効にするために使用されるコマンドです。

kubectl create clusterrolebinding onkar-crb --clusterrole=k10-admin --user=onkarbhat13@gmail.com
 

kubectl create rolebinding onkar-rb --role=k10-ns-admin --user=onkarbhat13@gmail.com --namespace=kasten-io 

RBACについては、今後の記事で詳しく説明します。K10のRBACについて詳しく知りたい場合は、こちらのドキュメントを参照してください。

結論

このチュートリアルでは、OIDC用のOktaアカウントを設定し、OIDCベースの認証を使用してK10をインストールする手順について説明しました。

OIDC認証コードフローはよく知られた標準に従っているため、K10のOIDC統合はどのOIDCプロバイダーでも機能します。

関連トピックス

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

 

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください