5.3. LDAP および Ceph Object Gateway の設定

Ceph Object Gateway ユーザーを認証するように Red Hat Directory Server を設定するには、以下の手順を実施します。

5.3.1. Red Hat Directory Server のインストール

Java Swing GUI Directory および管理コンソールを使用するには、グラフィカルユーザーインターフェイス (GUI) を使用する Red Hat Enterprise Linux 8 に Red Hat Directory Server をインストールする必要があります。ただし、Red Hat Directory Server にはコマンドラインインターフェイス (CLI) から排他的にサービスを提供できます。

前提条件

  • Red Hat Enterprise Linux (RHEL) がサーバーにインストールされている。
  • Directory Server ノードの FQDN は、DNS または /etc/hosts ファイルを使用して解決可能です。
  • Directory Server ノードを Red Hat サブスクリプション管理サービスに登録します。
  • お使いの Red Hat アカウントに有効な Red Hat Directory Server サブスクリプションが利用できます。

手順

  • Red Hat Directory Server インストールガイド第 1 章 および 第 2 章 の指示に従ってください。

関連情報

5.3.2. Directory Server ファイアウォールの設定

LDAP ホストで、LDAP クライアントが Directory Server にアクセスできるように、ファイアウォールが Directory Server のセキュアな (636) ポートにアクセスできることを確認します。デフォルトのセキュアでないポート (389) を閉じたままにしておきます。

# firewall-cmd --zone=public --add-port=636/tcp
# firewall-cmd --zone=public --add-port=636/tcp --permanent

5.3.3. SELinux のラベルポート

SELinux が要求をブロックしないようにするには、SELinux のポートにラベルを付けます。詳細は、Red Hat Directory Server 10 のAdministration GuideChanging Directory Server Port Numbers を参照してください。

5.3.4. LDAPS の設定

Ceph Object Gateway は単純な ID およびパスワードを使用して LDAP サーバーとの認証を行うため、接続には LDAP の SSL 証明書が必要です。LDAP 用 Directory Server を設定するには、Red Hat Directory Server 11 の Administration GuideConfiguring Secure Connections の章を参照してください。

LDAP が動作したら、Ceph Object Gateway サーバーが Directory Server の証明書を信頼するように設定します。

  1. LDAP サーバーの SSL 証明書に署名した認証局 (CA) の PEM 形式の証明書を抽出/ダウンロードします。
  2. /etc/openldap/ldap.confTLS_REQCERT が設定されていないことを確認します。
  3. /etc/openldap/ldap.confTLS_CACERTDIR /etc/openldap/certs 設定が含まれていることを確認します。
  4. certutil コマンドを使用して、AD CA を /etc/openldap/certs のストアに追加します。たとえば、CA が msad-frog-MSAD-FROG-CA で、PEM 形式の CA ファイルが ldap.pem の場合は、以下のコマンドを使用します。

    # certutil -d /etc/openldap/certs -A -t "TC,," -n "msad-frog-MSAD-FROG-CA" -i /path/to/ldap.pem

  5. すべてのリモート LDAP サイトで SELinux を更新します。

    # setsebool -P httpd_can_network_connect on

    注記

    これは、SELinux が Permissive モードであっても、引き続き設定する必要があります。

  6. certs データベースを誰でも読めるようにします。

    # chmod 644 /etc/openldap/certs/*

  7. root 以外のユーザーとして ldapwhoami コマンドを使用してサーバーに接続します。

    $ ldapwhoami -H ldaps://rh-directory-server.example.com -d 9

    -d 9 オプションは、SSL ネゴシエーションで何らかの問題が発生した場合にデバッグ情報を提供します。

5.3.5. ゲートウェイユーザーの有無の確認

ゲートウェイユーザーを作成する前に、Ceph Object Gateway にユーザーがまだ存在していないことを確認してください。

[ceph: root@host01 /]# radosgw-admin metadata list user

このユーザー名は、このユーザー一覧には記載しないでください。

5.3.6. ゲートウェイユーザーの追加

Ceph Object Gateway の LDAP ユーザーを作成し、binddn を書き留めます。Ceph オブジェクトゲートウェイは ceph ユーザーを使用するため、ceph をユーザー名として使用することを検討してください。ユーザーに、ディレクトリーを検索するパーミッションが必要です。

Ceph Object Gateway は、rgw_ldap_binddn で指定したようにこのユーザーにバインドします。

ユーザーの作成が正常に機能することをテストします。cephPeople の下のユーザー ID で、example.com がドメインの場合は、ユーザーの検索を行うことができます。

# ldapsearch -x -D "uid=ceph,ou=People,dc=example,dc=com" -W -H ldaps://example.com -b "ou=People,dc=example,dc=com" -s sub 'uid=ceph'

各ゲートウェイノードで、ユーザーのシークレットのファイルを作成します。たとえば、シークレットは /etc/bindpass という名前のファイルに保存されます。セキュリティー上の理由から、このファイルの所有者を ceph ユーザーおよびグループに変更し、グローバルに読み取りができないようにします。

rgw_ldap_secret オプションを追加します。

構文

ceph config set client.rgw OPTION VALUE

[ceph: root@host01 /]# ceph config set client.rgw rgw_ldap_secret /etc/bindpass

更新された設定ファイルを各 Ceph ノードにコピーします。

構文

scp /etc/ceph/ceph.conf NODE:/etc/ceph

5.3.7. LDAP を使用するようにゲートウェイを設定

  1. Ceph 設定ファイルの [global] セクションに、以下の設定を追加します。以下に例を示します。

    構文

    [global]
    rgw_ldap_uri = ldaps://FQDN:636
    rgw_ldap_binddn = "BINDING_DOMAIN"
    rgw_ldap_secret = "/etc/bindpass"
    rgw_ldap_searchdn = "SEARCH_DOMAIN"
    rgw_ldap_dnattr = "uid"
    rgw_s3_auth_use_ldap = true

    rgw_ldap_uri 設定の場合は、FQDN を LDAP サーバーの完全修飾ドメイン名に置き換えます。複数の LDAP サーバーがある場合には、各ドメインを指定します。

    rgw_ldap_binddn 設定の場合は、<binddn> をバインドドメインに置き換えます。users および accounts の下に example.com のドメインおよび ceph ユーザーが使用されている場合には、以下のようになります。

    rgw_ldap_binddn = "uid=ceph,cn=users,cn=accounts,dc=example,dc=com"

    rgw_ldap_searchdn 設定の場合は、<searchdn> を検索ドメインに置き換えます。users および accounts の下に example.com のドメインおよびユーザーがある場合は、以下のようになります。

    rgw_ldap_searchdn = "cn=users,cn=accounts,dc=example,dc=com"

  2. 更新された設定ファイルを各 Ceph ノードにコピーします。

    構文

    scp /etc/ceph/ceph.conf HOSTNAME:/etc/ceph

  3. Ceph Object Gateway を再起動します。

    注記

    NAME 列の ceph orch ps コマンドの出力を使用して、SERVICE_TYPE.ID 情報を取得します。

    1. ストレージクラスター内の個別のノードで Ceph Object Gateway を再起動するには、以下を実行します。

      構文

      systemctl restart ceph-CLUSTER_ID@SERVICE_TYPE.ID.service

      [root@host01 ~]# systemctl restart ceph-c4b34c6f-8365-11ba-dc31-529020a7702d@rgw.realm.zone.host01.gwasto.service

    2. ストレージクラスター内のすべてのノードで Ceph Object Gateway を再起動するには、以下を実行します。

      構文

      ceph orch restart SERVICE_TYPE

      [ceph: root@host01 /]# ceph orch restart rgw

5.3.8. カスタム検索フィルターの使用

rgw_ldap_searchfilter 設定を使用すると、ユーザーアクセスを制限するカスタム検索フィルターを作成できます。この設定は、Ceph 設定ファイル (/etc/ceph/ceph.conf) の [global] セクションに指定します。rgw_ldap_searchfilter 設定には、2 つの方法があります。

  1. 部分フィルターの指定

    "objectclass=inetorgperson"

    Ceph Object Gateway は、トークンのユーザー名および rgw_ldap_dnattr の値を使用して検索フィルターを生成します。構築されたフィルターは、rgw_ldap_searchfilter の値の一部フィルターと組み合わされます。たとえば、ユーザー名と設定により、最終的な検索フィルターが生成されます。

    "(&(uid=joe)(objectclass=inetorgperson))"

    ユーザー joe は、LDAP ディレクトリーで見つかった場合にのみアクセスが許可され、inetorgperson のオブジェクトクラスがあり、有効なパスワードを指定します。

  2. Complete フィルターの指定

    完全なフィルターには、認証の試行中にユーザー名に置き換えられる USERNAME トークンが含まれている必要があります。この場合、rgw_ldap_dnattr 設定は使用されません。たとえば、有効なユーザーを特定のグループに制限するには、以下のフィルターを使用します。

    "(&(uid=@USERNAME@)(memberOf=cn=ceph-users,ou=groups,dc=mycompany,dc=com))"

5.3.9. S3 ユーザーの LDAP サーバーへの追加

LDAP サーバーの管理コンソールで S3 ユーザーを少なくとも 1 つ作成し、S3 クライアントが LDAP ユーザーの資格情報を使用できるようにします。認証情報を S3 クライアントに渡すときに使用するユーザー名およびシークレットを書き留めておきます。

5.3.10. LDAP トークンのエクスポート

LDAP で Ceph Object Gateway を実行する場合は、アクセストークンのみが必要です。ただし、アクセストークンは、アクセスキーとシークレットキーから作成されます。アクセスキーとシークレットキーを LDAP トークンとしてエクスポートします。

  1. アクセスキーをエクスポートします。

    構文

    export RGW_ACCESS_KEY_ID="USERNAME"

  2. シークレットキーをエクスポートします。

    構文

    export RGW_SECRET_ACCESS_KEY="PASSWORD"

  3. トークンをエクスポートします。LDAP の場合は、トークンタイプ (ttype) に ldap を使用します。

    radosgw-token --encode --ttype=ldap

    Active Directory の場合は、トークンタイプとして ad を使用します。

    radosgw-token --encode --ttype=ad

    結果として、アクセストークンである base-64 でエンコードされた文字列になります。このアクセストークンを、アクセスキーの代わりに S3 クライアントに提供します。シークレットキーは不要になりました。

  4. オプション:S3 クライアントが環境変数を使用している場合は、利便性を高めるために base-64 でエンコードされた文字列を環境変数 RGW_ACCESS_KEY_ID にエクスポートします。

    export RGW_ACCESS_KEY_ID="ewogICAgIlJHV19UT0tFTiI6IHsKICAgICAgICAidmVyc2lvbiI6IDEsCiAgICAgICAgInR5cGUiOiAibGRhcCIsCiAgICAgICAgImlkIjogImNlcGgiLAogICAgICAgICJrZXkiOiAiODAwI0dvcmlsbGEiCiAgICB9Cn0K"

5.3.11. S3 クライアントを使用した設定のテスト

Python Boto などの Ceph Object Gateway クライアントを選択します。RGW_ACCESS_KEY_ID 環境変数を使用するように設定します。base-64 でエンコードされた文字列をコピーし、アクセスキーとして指定できます。次に、Ceph クライアントを実行します。

注記

シークレットキーは不要になりました。