OpenShiftでCryostat 2.1にログインする方法:SSOを使う

Red Hat で Java Platform Advocate として OpenJDK を担当している伊藤ちひろ(@chiroito)です。

この記事は、Red Hat Developerのブログ記事、How to log into Cryostat 2.1 on OpenShift: SSO for all | Red Hat Developer の翻訳記事です。


https://developers.redhat.com/sites/default/files/styles/article_feature/public/2020_Java_ContainerJFR_Featured_Article__A-01.png?itok=K_g-UdJY

Kubernetes上でJDK Flight Recorderのデータを管理するツールであるCryostatは、Cryostat 2.1の技術プレビューリリースとして、Red Hat OpenShift上の組み込みOAuthサーバーに統合されました。OpenShift上のCryostatにログインすると、OpenShiftのログインページにリダイレクトされ、OpenShiftのユーザーアカウントに対応するユーザー名とパスワードを入力するよう促されます。成功すると、複数のセッションでログイン状態を維持できます(デフォルトで24時間)。

CryostatはOpenShiftの認証を何に使っているのですか?

Cryostatがコンテナ化されたJava仮想マシン(JVM)で動作するJavaアプリケーションを監視するために、CryostatはCryostatがデプロイされている同じ名前空間内でターゲットアプリケーションを検索します。これは、Cryostat が Pod やデプロイメントなどの Kubernetes オブジェクトを検出するために、OpenShift ユーザーアカウントからの権限が必要であることを意味します。ユーザがターゲットアプリケーション上で JDK フライトレコーディングを開始、停止、または保存するリクエストを行うたびに、Cryostat はユーザのリクエストが同じ名前空間から来ること、およびユーザが各ターゲットアプリケーション上の JDK フライトレコーディングを表示および管理するアクセス権を持っていることを確認します。

Cryostat 2.0からのCryostat認証の変更点

Cryostat 2.0では、ユーザーはOpenShiftコンソールからCryostatログインページに認証トークンを貼り付け、ブラウザセッションの更新時にトークンを再入力する必要がありました。

Cryostat 2.1では、OpenShiftのOAuthサーバとCryostatのRBAC権限を組み合わせ、OpenShiftのユーザアカウントごとに設定可能な権限をユーザに与えています。デフォルトでは、各Webブラウザセッションは24時間継続します。

Cryostat 2.1へのログイン方法

この記事は、OpenShift 4.6+のクラスタでCryostatのインスタンスが動作していることを想定しています。Cryostat のインストール方法については、Getting started with Cryostat 2.1 を参照してください。

Cryostatのインスタンスが稼働したら、OpenShiftのWebコンソールにログインし、Installed Operatorsに移動し、Cryostat Operatorを選択します。そこから、[Cryostat]タブで目的のCryostatインスタンスを選択します。[Application URL] リンクをクリックしてログイン画面にアクセスし、OpenShift ユーザアカウントのユーザ名とパスワードを入力します。

Cryostatのすべての機能にアクセスするには、OpenShiftのユーザアカウントにRBAC権限を要求する必要があるかもしれません。制限された権限を持つユーザーは、それらが許可されているCryostatの機能のみにアクセスできます。例えば、読み取り専用権限を持つユーザは、他のユーザが作成したJDKフライトレコーディングを見れますが、レコーディングを作成したり削除できません。この記事の執筆時点では、Cryostat の全機能にアクセスするためには以下の権限を持つユーザが必要です。

- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - create
  - get
- apiGroups:
  - ""
  resources:
  - replicationcontrollers
  - endpoints
  verbs:
  - get
- apiGroups:
  - operator.cryostat.io
  resources:
  - cryostats
  verbs:
  - create
  - delete
  - get
- apiGroups:
  - operator.cryostat.io
  resources:
  - flightrecorders
  - recordings
  verbs:
  - create
  - delete
  - get
  - patch
- apiGroups:
  - apps
  resources:
  - deployments
  verbs:
  - create
  - get
- apiGroups:
  - apps
  resources:
  - daemonsets
  - replicasets
  - statefulsets
  verbs:
  - get

CryostatのRBAC権限の概要

複数のユーザーが一つの名前空間でCryostatを使用してJDKフライトレコーディングを管理しており、各ユーザにCryostatの機能に対する特定の権限を与えたい場合、希望のCryostat固有のRBAC権限を持つロールを作成し、そのロールを希望のユーザアカウントに紐付けます。

一般的に、Cryostatは前のセクションで列挙した apiGroups: ""apiGroups: apps リソースに対して get パーミッションを使用し、名前空間内の任意のターゲットアプリケーションを検出します。Cryostatのflightrecordersrecordingリソースに対するcreatedeletegetpatchパーミッションは、ユーザーがターゲットアプリケーションからJDKフライトレコーディングを作成、削除、取得、保存できるようにします。

まとめ

この記事では、OpenShift 上の Cryostat 2.1 にログインする方法を説明し、ユーザーアカウントに必要な RBAC 権限の概略を説明します。RBAC権限の定義の詳細については、OpenShift Container Platformのドキュメントをご覧ください。Cryostatの詳細については、cryostat.ioを参照してください。質問、コメント、フィードバックについては、Githubで私たちとつながるか、メーリングリストに参加することをお気軽にどうぞ。

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。