OpenShiftの運用_ユーザ管理_IDP_クラスタローカル設定HTPasswd

こんにちはサイオステクノロジーの前田です。

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内容を利用してログインを行います。

設定の流れ

  1. htpasswdコマンドを利用してユーザとパスワード情報を作成
  2. OpenShiftのOAuthにHTPasswdのIDP連携設定を追加
  3. 自分専用のプロジェクトを作成 (もしくは権限追加)
  • 環境情報
    • OpenShift環境
      • OCP 4.12
      • AWS基盤を利用
    • クライアント端末
      • Linux
      • htpasswardインストール済み

 

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を利用して確認していきます。

    管理コンソールに再度ログインします。画面左上の開発者向け表示を選択し、管理者向け表示を選択します。画面が変わり管理者向け表示が出るためユーザ管理 → Userの順で選択します。

    プロジェクトにadmin権限とクラスター全体へcluster-admin権限が付与されていることを確認してください。

    最後に

    OpenShiftのIDP設定は初期設定時に悩む項目の一つです。初期設定のDay1構築終わってほっとしたときに『ユーザー管理機能ついてないの!!』っと驚きます。商用設定の場合はAzureADとの連携やRedHatSSOとの連携等を考える必要があります。本記事で全部を記載すると頭がパンクしてしまうため簡単なIDPの設定と基本的な権限設定について記載しました。本記事がOpenShift導入時の運用負担を減らす一助になれば幸いです。

    ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

    役に立った 役に立たなかった

    0人がこの投稿は役に立ったと言っています。

    コメントを残す

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