第7章 アイデンティティープロバイダーの設定

7.1. HTPasswd アイデンティティープロバイダーの設定

7.1.1. OpenShift Container Platform のアイデンティティープロバイダーについて

デフォルトでは、kubeadmin ユーザーのみがクラスターに存在します。アイデンティティープロバイダーを指定するには、アイデンティティープロバイダーを記述し、これをクラスターに追加するカスタムリソースを作成する必要があります。

注記

/:、および % を含む OpenShift Container Platform ユーザー名はサポートされません。

HTPasswd アイデンティティープロバイダーを定義するには、以下の手順を実行する必要があります。

  1. ユーザーおよびパスワード情報を保存するために htpasswd ファイルを作成します。Linux および Windows用の手順が説明されます。
  2. htpasswd ファイルを表すために OpenShift Container Platform シークレットを作成します 。
  3. HTPasswd アイデンティティープロバイダーリソースを定義します
  4. リソースをデフォルトの OAuth 設定に適用します

7.1.2. Linux を使用した HTPasswd ファイルの作成

HTPasswd アイデンティティープロバイダーを使用するには、htpasswdを使用してクラスターのユーザー名およびパスワードを含むフラットファイルを生成する必要があります。

前提条件

  • htpasswd ユーティリティーへのアクセスがあること。Red Hat Enterprise Linux では、これは httpd-tools パッケージをインストールして利用できます。

手順

  1. ユーザー名およびハッシュされたパスワードを含むフラットファイルを作成します。

    $ htpasswd -c -B -b </path/to/users.htpasswd> <user_name> <password>

    コマンドにより、ハッシュされたバージョンのパスワードが生成されます。

    以下は例になります。

    $ htpasswd -c -B -b users.htpasswd user1 MyPassword!
    
    Adding password for user user1
  2. ファイルに対する認証情報の追加またはその更新を継続します。

    $ htpasswd -B -b </path/to/users.htpasswd> <user_name> <password>

7.1.3. Windows を使用した HTPasswd ファイルの作成

HTPasswd アイデンティティープロバイダーを使用するには、htpasswdを使用してクラスターのユーザー名およびパスワードを含むフラットファイルを生成する必要があります。

前提条件

  • htpasswd.exe へのアクセスがあること。このファイルは、数多くの Apache httpd ディストリビューションの \bin ディレクトリーに含まれます。

手順

  1. ユーザー名およびハッシュされたパスワードを含むフラットファイルを作成します。

    > htpasswd.exe -c -B -b <\path\to\users.htpasswd> <user_name> <password>

    コマンドにより、ハッシュされたバージョンのパスワードが生成されます。

    以下は例になります。

    > htpasswd.exe -c -B -b users.htpasswd user1 MyPassword!
    
    Adding password for user user1
  2. ファイルに対する認証情報の追加またはその更新を継続します。

    > htpasswd.exe -b <\path\to\users.htpasswd> <user_name> <password>

7.1.4. HTPasswd シークレットの作成

HTPasswd アイデンティティープロバイダーを使用するには、HTPasswd ユーザーファイルが含まれるシークレットを定義する必要があります。

前提条件

  • HTPasswd ファイルを作成します。

手順

  • HTPasswd ユーザーファイルが含まれる OpenShift Container Platform シークレットを作成します。

    $ oc create secret generic htpass-secret --from-file=htpasswd=</path/to/users.htpasswd> -n openshift-config
    注記

    上記のコマンドが示すように、--from-file 引数についてのユーザーファイルを含むシークレットキーには htpasswd という名前を指定する必要があります。

7.1.5. HTPasswd CR のサンプル

以下のカスタムリソース (CR) は、HTPasswd アイデンティティープロバイダーのパラメーターおよび許可される値を示します。

HTPasswd CR

apiVersion: config.openshift.io/v1
kind: OAuth
metadata:
  name: cluster
spec:
  identityProviders:
  - name: my_htpasswd_provider 1
    mappingMethod: claim 2
    type: HTPasswd
    htpasswd:
      fileData:
        name: htpass-secret 3

1
このプロバイダー名は、プロバイダーのユーザー名にプレフィックスとして付加され、アイデンティティー名が作成されます。
2
このプロバイダーのアイデンティティーとユーザーオブジェクト間にマッピングが確立される方法を制御します。
3
htpasswdを使用して生成されたファイルが含まれる既存のシークレットです。

7.1.6. アイデンティティープロバイダーのクラスターへの追加

クラスターのインストール後に、アイデンティティープロバイダーをそのクラスターに追加し、ユーザーの認証を実行できるようにします。

前提条件

  • OpenShift Container Platform クラスターを作成します。
  • アイデンティティープロバイダーのカスタムリソース (CR) を作成します。
  • 管理者としてログインしている必要があります。

手順

  1. 定義された CR を適用します。

    $ oc apply -f </path/to/CR>
    注記

    CR が存在しない場合、oc apply は新規 CR を作成し、さらに以下の警告をトリガーする可能性があります。Warning: oc apply should be used on resources created by either oc create --save-config or oc applyこの場合は、この警告を無視しても問題ありません。

  2. アイデンティティープロバイダーのユーザーとしてクラスターにログインし、プロンプトが出されたらパスワードを入力します。

    $ oc login -u <username>
  3. ユーザーが正常にログインされていることを確認し、ユーザー名を表示します。

    $ oc whoami

7.1.7. HTPasswd アイデンティティープロバイダーの更新

既存の HTPasswd アイデンティティープロバイダーにユーザーを追加したり、既存の HTPasswd アイデンティティープロバイダーからユーザーを削除したりできます。

前提条件

  • HTPasswd ユーザーファイルが含まれるシークレットを作成している。この手順では、htpass-secret という名前であることを前提としています。
  • HTPasswd アイデンティティープロバイダーを設定している。この手順では、my_htpasswd_provider という名前であることを前提としています。
  • htpasswd ユーティリティーへのアクセスがある。Red Hat Enterprise Linux では、これは httpd-tools パッケージをインストールして利用できます。
  • クラスター管理者の権限がある。

手順

  1. HTPasswd ファイルを htpass-secret シークレットから取得し、ファイルをお使いのファイルシステムに保存します。

    $ oc get secret htpass-secret -ojsonpath={.data.htpasswd} -n openshift-config | base64 -d > users.htpasswd
  2. users.htpasswd ファイルからユーザーを追加したり、削除したりします。

    • 新規ユーザーを追加するには、以下を実行します。

      $ htpasswd -bB users.htpasswd <username> <password>
      Adding password for user <username>
    • 既存ユーザーを削除するには、以下を実行します。

      $ htpasswd -D users.htpasswd <username>
      Deleting password for user <username>
  3. htpass-secret シークレットを、users.htpasswd ファイルの更新されたユーザーに置き換えます。

    $ oc create secret generic htpass-secret --from-file=htpasswd=users.htpasswd --dry-run -o yaml -n openshift-config | oc replace -f -
  4. 複数のユーザーを削除した場合は、追加でユーザーごとに既存のリソースを削除する必要があります。

    1. ユーザーを削除します。

      $ oc delete user <username>
      user.user.openshift.io "<username>" deleted

      ユーザーを必ず削除してください。削除しない場合、ユーザーは期限切れでない限り、トークンを引き続き使用できます。

    2. ユーザーのアイデンティティーを削除します。

      $ oc delete identity my_htpasswd_provider:<username>
      identity.user.openshift.io "my_htpasswd_provider:<username>" deleted

7.1.8. Web コンソールを使用したアイデンティティープロバイダーの設定

CLI ではなく Web コンソールを使用してアイデンティティープロバイダー (IDP) を設定します。

前提条件

  • クラスター管理者として Web コンソールにログインしている必要があります。

手順

  1. AdministrationCluster Settings に移動します。
  2. Global Configuration タブで、OAuth をクリックします。
  3. Identity Providers セクションで、Add ドロップダウンメニューからアイデンティティープロバイダーを選択します。
注記

既存の IDP を上書きすることなく、Web コンソールで複数の IDP を指定することができます。