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. ゲートウェイユーザーの追加

LDAP を使用する Ceph Object Gateway ユーザーを作成します。

手順

  1. Ceph Object Gateway の LDAP ユーザーを作成し、binddn を書き留めます。Ceph オブジェクトゲートウェイは ceph ユーザーを使用するため、ceph をユーザー名として使用することを検討してください。ユーザーに、ディレクトリーを検索するパーミッションが必要です。Ceph Object Gateway は、rgw_ldap_binddn での指定に従ってこのユーザーにバインドします。
  2. ユーザーの作成が正常に機能することをテストします。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'
  3. 各ゲートウェイノードで、ユーザーのシークレットのファイルを作成します。たとえば、シークレットは /etc/bindpass という名前のファイルに保存される場合があります。セキュリティー上の理由から、このファイルの所有者を ceph ユーザーおよびグループに変更し、グローバルに読み取りができないようにします。
  4. rgw_ldap_secret オプションを追加します。

    構文

    ceph config set client.rgw OPTION VALUE

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

  5. バインドパスワードファイルを Ceph Object Gateway コンテナーにパッチし、Ceph Object Gateway 仕様を再適用します。

    service_type: rgw
    service_id: rgw.1
    service_name: rgw.rgw.1
    placement:
      label: rgw
      extra_container_args:
      - -v
      - /etc/bindpass:/etc/bindpass

    注記

    /etc/bindpass は Red Hat Ceph Storage に自動的には同梱されないため、考えられるすべての Ceph Object Gateway インスタンスノードでコンテンツが利用可能であることを確認する必要があります。

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

  1. すべての Ceph ノードで次のコマンドを使用して Ceph 設定を変更します。

    構文

    ceph config set client.rgw OPTION VALUE

    [ceph: root@host01 /]# ceph config set client.rgw rgw_ldap_uri ldaps://:636
    [ceph: root@host01 /]# ceph config set client.rgw rgw_ldap_binddn "ou=poc,dc=example,dc=local"
    [ceph: root@host01 /]# ceph config set client.rgw rgw_ldap_searchdn "ou=poc,dc=example,dc=local"
    [ceph: root@host01 /]# ceph config set client.rgw rgw_ldap_dnattr "uid"
    [ceph: root@host01 /]# ceph config set client.rgw rgw_s3_auth_use_ldap true

  2. 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 設定を使用すると、ユーザーアクセスを制限するカスタム検索フィルターを作成できます。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 クライアントで設定をテストします。

手順

  1. RGW_ACCESS_KEY_ID 環境変数を使用して、Ceph Object Gateway クライアントを設定します。あるいは、Base-64 でエンコードされた文字列をコピーし、それをアクセスキーとして指定することもできます。以下は、設定された S3 クライアントの例です。

    cat .aws/credentials
    
    [default]
    aws_access_key_id = ewogICaGbnjlwe9UT0tFTiI6IHsKICAgICAgICAidmVyc2lvbiI6IDEsCiAgICAgICAgInR5cGUiOiAiYWQiLAogICAgICAgICJpZCI6ICJjZXBoIiwKICAgICAgICAia2V5IjogInBhc3M0Q2VwaCIKICAgIH0KfQo=
    aws_secret_access_key =

    注記

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

  2. aws s3 ls コマンドを実行してユーザーを確認します。

    [root@host01 ~]# aws s3 ls --endpoint http://host03
    
    2023-12-11 17:08:50 mybucket
    2023-12-24 14:55:44 mybucket2

  3. オプション: radosgw-admin user コマンドを実行して、ディレクトリー内のユーザーを確認することもできます。

    [root@host01 ~]# radosgw-admin user info --uid dir1
    {
        "user_id": "dir1",
        "display_name": "dir1",
        "email": "",
        "suspended": 0,
        "max_buckets": 1000,
        "subusers": [],
        "keys": [],
        "swift_keys": [],
        "caps": [],
        "op_mask": "read, write, delete",
        "default_placement": "",
        "default_storage_class": "",
        "placement_tags": [],
        "bucket_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "user_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "temp_url_keys": [],
        "type": "ldap",
        "mfa_ids": []
    }