こんにちはサイオステクノロジーの前田です。
OpenShiftを複数人で利用する環境では、ユーザー管理が必要です。KubernetesにあるサービスアカウントではなくユーザーというOpenShift独自機能があります。OpenShiftのブラウザ操作時の利用や、クライアント操作時の認証として利用します。初期構築ではユーザ管理機能のIDPはなく、IDPといわれても聞きなれなくてどうしたらいいか悩んでしまいます。全体を話すとさらに混乱が進むことも多いのでわかりやすさを重視していきます。
OpenShiftのユーザー管理
OpenShiftのユーザー管理と一口に言っても色々考えたり理解しないといけないことがあるため、初期知識についてまとめます。
OpenShift(Kubernetes含む) ユーザーについて
UserはOpenShiftクラスタにログインするための認証情報を持つ人間のユーザーであり、ServiceAccountはOpenShiftクラスタ内のアプリケーションコンテナがOpenShiftのAPIサーバーに対してリクエストを送信するための認証情報を持つアカウントであります。下記に比較した表を記載します。
リソース名 |
ServiceAccount |
User |
機能の有無 | Kubernetes、OpenShift両方に存在 | OpenShiftのみの機能 |
利用用途 |
APIサーバに対してリクエストを送信するアカウント podをデプロイするときの認証情報や設定で利用 |
ユーザーが操作、GUIやクラスターへの設定等で利用 |
アカウント or ユーザー 管理元 | OCPクラスタ | IDP |
備考 | プロジェクト作成時に自動生成されるアカウントあり | 初期構築時にkubeadmin User作成 |
OpenShift ユーザーにかかわる用語
OpenShiftのUserに関する用語について説明します。
IDP | OAuth | Group | User | Role | Rolebinding | |
---|---|---|---|---|---|---|
概要 | ユーザーのアイデンティティを認証するためのシステム | OpenShiftのIDPを設定するリソース | OpenShiftのユーザーをグループ分けするための機能 | OpenShiftにログインするための認証情報を持つユーザー | OpenShiftのユーザーがアクセス可能なリソースを制御するための機能 | RoleとUser/Groupを関連付け、アクセス制御を設定する機能 |
目的 | ユーザー認証 | OpenShiftのユーザー認証を設定 | OpenShiftユーザーのグループ分け | OpenShiftにログインするための認証 | リソースへのアクセス権限を制御 | RoleとUser/Groupを関連付け、アクセス制御を設定 |
特徴 | 外部システムにユーザー認証を委託 | OpenShiftの認証設定を行う | 複数のユーザーをグループ化 | OpenShiftクラスターにログインするために必要 | リソースへのアクセス権限を指定する | RoleとUser/Groupを関連付けることで、アクセス制御を簡単に設定可能 |
例 | Active Directory、LDAP、RHSSO | Active Directory、LDAP、RHSSOの設定 | Developers、Operators | John、Jane、Bob | Admin、Edit、View | AdminRoleにJohnを割り当てる |
IDPだけはOpenShiftのリソースではなく、OAuthに設定するパラメータの一つになります。IDPはOpenID Connectで連携できるため、既存のユーザ管理と連携して利用することが可能です。
OpenShift 簡単なIDPの設定
実際に設定してみましょう。HTPasswd形式のIDPを設定していきます。HTPasswdはwebのベーシック認証のような形で、htpasswdの内容をSecretとしてOpenShiftに保存します。ユーザ情報とパスワードはそのSeceret内容を利用してログインを行います。
設定の流れ
- htpasswdコマンドを利用してユーザとパスワード情報を作成
- OpenShiftのOAuthにHTPasswdのIDP連携設定を追加
- 自分専用のプロジェクトを作成 (もしくは権限追加)
- 環境情報
- OpenShift環境
- OCP 4.12
- AWS基盤を利用
- クライアント端末
- Linux
- htpasswardインストール済み
- OpenShift環境
htpasswardコマンドがない場合は、下記等でインストールしてください
yum install httpd-tools
初期設定
クライアント端末(linux)とWebブラウザを利用して設定していきます。CLI操作で設定する場合はリンクを参考にしてください。
■1. ユーザ情報作成
ユーザ情報を作成します。ユーザをtestパスワードをtest123で作成します。今回はわかりやすいように標準出力するモードで設定します。OpenShiftではセキュリティが高いBオプションが必要になります。
htpasswd -n -bB test test123
test:$2y$05$G8RtGVeCnmH5LYZfDvi96.VhX.2SQ./kmpaJBW96AJGgcHaB5fxnW
上記内容が、認証情報になりOpenShiftのIDP設定に利用します。複数ある場合等はファイルに作成して登録します。
■2. IDPの設定
OpenShiftの管理コンソールにcluster-adminロールの権限を持つユーザでログインして、操作していきます。
OpenShiftにログインしてAdministoration → Cluster Settings を選択します.
設定 → OAuthを選択します。
アイデンティティ―プロバイダーの 『追加』を選択後、HTpasswdを選択します。
Htpasswdファイルの下の記入欄に先ほど作成した認証情報の内容を貼り付けます。
追加を選択して、OCPクラスタに反映されるまで少し待ちます。
■補足 設定反映の待ち時間の確認
反映される間の待ち時間に設定を確認するためYAMLタブを選択します。
spec.identityProviders.htpasswd.fileData.nameに書かれている内容はopenshift-configプロジェクト内のsecretになります。パスワードやユーザ情報を変更するときはこちらの内容を編集してください。
■3. 作成ユーザでログイン
画面右上からログアウトします。ログインするときに二つの選択肢がでます。『htpasswd』を選択したあと、設定するユーザ名『test』とパスワードは『test123』と入力します。
権限が違うのでログイン画面が少し違います。スキップを選択します。
『新規プロジェクトを作成します』を選択します。名前にtestprojectと入力して、作成を選択します。
project(namespace)の開発補助画面が表示されます。
この画面が出たら、後は開発者に渡したりサンプルデプロイ等を行いましょう。
■4. 権限追加
権限を設定していきます。プロジェクトを作成したら作成した人にプロジェクトのadmin権限が付与されます。初期構築の設定のkubeadminと同等の権限(cluster-admin)を設定していきます。
確認コマンド
oc get rolebindings.authorization.openshift.io
上記でtestprojectには初期状態で複数のroleの設定がされていることがわかります。
権限を追加するたため下記コマンド実施します。
oc adm policy add-cluster-role-to-user cluster-admin test
先ほどした確認コマンドには表示されません。プロジェクトへのロールバインディングとクラスターのロールバインディングは違うので、表示されないので驚きます。そんなもんだと考えてください。CLIでは醜いのでGUIを利用して確認していきます。
プロジェクトにadmin権限とクラスター全体へcluster-admin権限が付与されていることを確認してください。
最後に
OpenShiftのIDP設定は初期設定時に悩む項目の一つです。初期設定のDay1構築終わってほっとしたときに『ユーザー管理機能ついてないの!!』っと驚きます。商用設定の場合はAzureADとの連携やRedHatSSOとの連携等を考える必要があります。本記事で全部を記載すると頭がパンクしてしまうため簡単なIDPの設定と基本的な権限設定について記載しました。本記事がOpenShift導入時の運用負担を減らす一助になれば幸いです。