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

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

htpasswd アイデンティティープロバイダーを設定して、ユーザーが htpasswd ファイルの認証情報を使用して OpenShift Container Platform にログインできるようにします。

htpasswd ID プロバイダーを定義するには、次のタスクを実行します。

  1. ユーザーおよびパスワード情報を保存するために htpasswd ファイルを作成 します。
  2. htpasswd ファイルを表す シークレットを作成 します。
  3. シークレットを参照する htpasswd ID プロバイダーリソースを定義 します。
  4. デフォルトの OAuth 設定に リソースを適用して、ID プロバイダーを追加します。

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

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

注記

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

7.1.2. htpasswd 認証について

OpenShift Container Platform で htpasswd 認証を使用すると、htpasswd ファイルに基づいてユーザーを識別できます。htpasswd ファイルは、各ユーザーのユーザー名とハッシュ化されたパスワードを含むフラットファイルです。htpasswd ユーティリティーを使用して、このファイルを作成できます。

警告

実稼働環境では、OpenShift Container Platform で htpasswd 認証を使用しないでください。htpasswd 認証は開発環境にのみ使用してください。

7.1.3. htpasswd ファイルの作成

htpasswd ファイルの作成方法は、次のいずれかのセクションを参照してください。

7.1.3.1. Linux を使用した htpasswd ファイルの作成

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

前提条件

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

手順

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

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

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

    以下に例を示します。

    $ htpasswd -c -B -b users.htpasswd <username> <password>

    出力例

    Adding password for user user1

  2. ファイルに対する認証情報の追加またはその更新を継続します。

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

7.1.3.2. Windows を使用した htpasswd ファイルの作成

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

前提条件

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

手順

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

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

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

    以下に例を示します。

    > htpasswd.exe -c -B -b users.htpasswd <username> <password>

    出力例

    Adding password for user user1

  2. ファイルに対する認証情報の追加またはその更新を継続します。

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

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

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

前提条件

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

手順

  • htpasswd ユーザーファイルが含まれる Secret オブジェクトを作成します。

    $ oc create secret generic htpass-secret --from-file=htpasswd=<path_to_users.htpasswd> -n openshift-config 1
    1
    上記のコマンドが示すように、--from-file 引数についてのユーザーファイルを含むシークレットキーには htpasswd という名前を指定する必要があります。
    ヒント

    または、以下の YAML を適用してシークレットを作成できます。

    apiVersion: v1
    kind: Secret
    metadata:
      name: htpass-secret
      namespace: openshift-config
    type: Opaque
    data:
      htpasswd: <base64_encoded_htpasswd_file_contents>

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
このプロバイダーのアイデンティティーと User オブジェクト間にマッピングが確立される方法を制御します。
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 ユーザーファイルが含まれる Secret オブジェクトを作成している。この手順では、htpass-secret という名前であることを前提としています。
  • htpasswd アイデンティティープロバイダーを設定している。この手順では、my_htpasswd_provider という名前であることを前提としています。
  • htpasswd ユーティリティーへのアクセスがある。Red Hat Enterprise Linux では、これは httpd-tools パッケージをインストールして利用できます。
  • クラスター管理者の権限がある。

手順

  1. htpasswd ファイルを htpass-secret Secret オブジェクトから取得し、ファイルをお使いのファイルシステムに保存します。

    $ oc get secret htpass-secret -ojsonpath={.data.htpasswd} -n openshift-config | base64 --decode > 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 Secret オブジェクトを、users.htpasswd ファイルの更新されたユーザーに置き換えます。

    $ oc create secret generic htpass-secret --from-file=htpasswd=users.htpasswd --dry-run=client -o yaml -n openshift-config | oc replace -f -
    ヒント

    または、以下の YAML を適用して Operator を置き換えることもできます。

    apiVersion: v1
    kind: Secret
    metadata:
      name: htpass-secret
      namespace: openshift-config
    type: Opaque
    data:
      htpasswd: <base64_encoded_htpasswd_file_contents>
  4. 複数のユーザーを削除した場合は、追加でユーザーごとに既存のリソースを削除する必要があります。

    1. User オブジェクトを削除します。

      $ oc delete user <username>

      出力例

      user.user.openshift.io "<username>" deleted

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

    2. ユーザーの Identity オブジェクトを削除します。

      $ 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. Configuration タブで、OAuth をクリックします。
  3. Identity Providers セクションで、Add ドロップダウンメニューからアイデンティティープロバイダーを選択します。
注記

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