3.9. バケット管理

ストレージ管理者は、Ceph Object Gateway を使用する場合、ユーザー間で移動して名前を変更することでバケットを管理することができます。Ceph Object Gateway 内で孤立したオブジェクトまたはリークオブジェクトを見つけることもできます。これはストレージクラスターのライフタイム時に発生する可能性があります。

さらに、バケットにマルチファクター認証(MFA)を設定できます。MFA は、ユーザーがバケットからデータを削除する前に標準認証に加えてワンタイムパスワードトークンの入力を要求することにより、誤ってデータ損失に対してセキュリティー層を追加します。

3.9.1. バケットの移動

radosgw-admin bucket ユーティリティーは、ユーザー間でバケットを移行する機能を提供します。これを行うには、バケットを新規ユーザーにリンクし、バケットの所有権を新しいユーザーに変更します。

バケットは移動できます。

3.9.1.1. 前提条件

  • 稼働中の Red Hat Ceph Storage クラスター
  • Ceph Object Gateway がインストールされている。
  • バケット
  • さまざまなテナントユーザーおよびテナントのないユーザー

3.9.1.2. テナントのないユーザー間でのバケットの移動

radosgw-admin bucket chown コマンドは、バケットとそれに含まれるすべてのオブジェクトの所有権をあるユーザーから別のユーザーに変更する機能を提供します。これを行うには、現行ユーザーからバケットのリンクを解除し、新しいユーザーにリンクして、バケットの所有権を新しいユーザーに変更します。

手順

  1. バケットを新規ユーザーにリンクします。

    radosgw-admin bucket link --uid=user --bucket=bucket

    以下を置き換えます。

    • user を、バケットをリンクするユーザーのユーザー名に
    • bucket を、名前を持つバケットに

    たとえば、data バケットを user2 という名前のユーザーにリンクするには、以下を実行します。

    # radosgw-admin bucket link --uid=user2 --bucket=data
  2. バケットが user2 に正常にリンクされていることを確認します。

    # radosgw-admin bucket list --uid=user2
    [
        "data"
    ]
  3. バケットの所有権を新規ユーザーに変更します。

    radosgw-admin bucket chown --uid=user --bucket=bucket

    以下を置き換えます。

    • user を、バケットの所有権を変更するユーザーのユーザー名に
    • bucket を、名前を持つバケットに

    たとえば、データ バケットの所有権を user2 に変更するには、以下を実行します。

    # radosgw-admin bucket chown --uid=user2 --bucket=data
  4. 次のコマンドの出力で owner 行を確認して、data バケットの所有権が正常に変更されたことを確認します。

    # radosgw-admin bucket list --bucket=data

3.9.1.3. テナントされたユーザー間でのバケットの移動

テナントされたユーザー間でバケットを別のユーザーに移動できます。

手順

  1. バケットを新規ユーザーにリンクします。

    radosgw-admin bucket link --bucket=current-tenant/bucket --uid=new-tenant$user

    置き換え:

    • current-tenant を、バケットのテナントの名前に
    • bucket リンクするバケットの名前に
    • new-tenant を、新規ユーザーがあるテナントの名前に置き換えます。
    • user を、新しいユーザーのユーザー名に

    たとえば、data バケットを、test テナントから、test2 テナントの user2 という名前のユーザーにリンクします。

    # radosgw-admin bucket link --bucket=test/data --uid=test2$user2
  2. バケットが user2 に正常にリンクされていることを確認します。

    # radosgw-admin bucket list --uid=test$user2
    [
        "data"
    ]
  3. バケットの所有権を新規ユーザーに変更します。

    radosgw-admin bucket chown --bucket=new-tenant/bucket --uid=new-tenant$user

    以下を置き換えます。

    • bucket リンクするバケットの名前に
    • new-tenant を、新規ユーザーがあるテナントの名前に置き換えます。
    • user を、新しいユーザーのユーザー名に

    たとえば、data バケットの所有権を test2 テナント内の user2 に変更するには、次のようにします。

    # radosgw-admin bucket chown --bucket='test2/data' --uid='test$tuser2'
  4. 次のコマンドの出力で owner 行を確認して、data バケットの所有権が正常に変更されたことを確認します。

    # radosgw-admin bucket list --bucket=test2/data

3.9.1.4. テナントのないユーザーからテナントユーザーへのバケットの移動

バケットをテナント以外のユーザーからテナントユーザーに移動できます。

手順

  1. 任意です。まだ複数のテナントがない場合は、rgw_keystone_implicit_tenants を有効にして、外部テナントから Ceph Object Gateway にアクセスすることでテナントを作成できます。

    Ceph 設定ファイル (デフォルトでは /etc/ceph/ceph.conf) を開き、編集します。rgw_keystone_implicit_tenants オプションを有効にします。

    rgw_keystone_implicit_tenants = true

    s3cmd コマンドまたは swift コマンドのいずれかを使用して、一時テナントから Ceph Object Gateway にアクセスします。

    # swift list

    または、s3cmd を使用します。

    # s3cmd ls

    外部テナントから最初にアクセスすると、同等の Ceph Object Gateway ユーザーが作成されます。

  2. バケットをテナントユーザーに移動します。

    radosgw-admin bucket link --bucket=/bucket --uid='tenant$user'

    置き換え:

    • bucket を、名前を持つバケットに
    • tenant を、新規ユーザーがあるテナントの名前に
    • user を、新しいユーザーのユーザー名に

    たとえば、data バケットを test テナント内の tenanted-user に移動するには、以下を実行します。

    # radosgw-admin bucket link --bucket=/data --uid='test$tenanted-user'
  3. data バケットが tenanted-user に正常にリンクされていることを確認します。

    # radosgw-admin bucket list --uid='test$tenanted-user'
    [
        "data"
    ]
  4. バケットの所有権を新規ユーザーに変更します。

    radosgw-admin bucket chown --bucket='tenant/bucket name' --uid='tenant$user'

    置き換え:

    • bucket を、名前を持つバケットに
    • tenant を、新規ユーザーがあるテナントの名前に
    • user を、新しいユーザーのユーザー名に

    たとえば、data バケットの所有権を、test テナント内にある tenanted-user に変更するには、以下を実行します。

    # radosgw-admin bucket chown --bucket='test/data' --uid='test$tenanted-user'
  5. 次のコマンドの出力で owner 行を確認して、data バケットの所有権が正常に変更されたことを確認します。

    # radosgw-admin bucket list --bucket=test/data

3.9.2. バケットの名前変更

バケットの名前を変更することができます。

前提条件

  • 稼働中の Red Hat Ceph Storage クラスター
  • Ceph Object Gateway がインストールされている。
  • バケット。

手順

  1. バケットを一覧表示します。

    radosgw-admin bucket list

    たとえば、出力のバケットを書き留めます。

    # radosgw-admin bucket list
    [
        "34150b2e9174475db8e191c188e920f6/swcontainer",
        "s3bucket1",
        "34150b2e9174475db8e191c188e920f6/swimpfalse",
        "c278edd68cfb4705bb3e07837c7ad1a8/ec2container",
        "c278edd68cfb4705bb3e07837c7ad1a8/demoten1",
        "c278edd68cfb4705bb3e07837c7ad1a8/demo-ct",
        "c278edd68cfb4705bb3e07837c7ad1a8/demopostup",
        "34150b2e9174475db8e191c188e920f6/postimpfalse",
        "c278edd68cfb4705bb3e07837c7ad1a8/demoten2",
        "c278edd68cfb4705bb3e07837c7ad1a8/postupsw"
    ]
  2. バケットの名前を変更します。

    radosgw-admin bucket link --bucket=original-name --bucket-new-name=new-name --uid=user-ID

    たとえば、s3bucket1 バケットの名前を s3newb に変更するには、以下を実行します。

    # radosgw-admin bucket link --bucket=s3bucket1 --bucket-new-name=s3newb --uid=testuser

    バケットがテナント内にある場合は、テナントも指定します。

    radosgw-admin bucket link --bucket=tenant/original-name --bucket-new-name=new-name --uid=tenant$user-ID

    以下に例を示します。

    # radosgw-admin bucket link --bucket=test/s3bucket1 --bucket-new-name=s3newb --uid=test$testuser
  3. バケットの名前が変更されたことを確認します。

    radosgw-admin bucket list

    たとえば、s3newb という名前のバケットが存在するようになりました。

    # radosgw-admin bucket list
    [
        "34150b2e9174475db8e191c188e920f6/swcontainer",
        "34150b2e9174475db8e191c188e920f6/swimpfalse",
        "c278edd68cfb4705bb3e07837c7ad1a8/ec2container",
        "s3newb",
        "c278edd68cfb4705bb3e07837c7ad1a8/demoten1",
        "c278edd68cfb4705bb3e07837c7ad1a8/demo-ct",
        "c278edd68cfb4705bb3e07837c7ad1a8/demopostup",
        "34150b2e9174475db8e191c188e920f6/postimpfalse",
        "c278edd68cfb4705bb3e07837c7ad1a8/demoten2",
        "c278edd68cfb4705bb3e07837c7ad1a8/postupsw"
    ]

3.9.3. 孤立したオブジェクトおよびリークオブジェクトの検索

正常なストレージクラスターには孤立したオブジェクトやリークオブジェクトがありませんが、場合によっては孤立したオブジェクトやリークオブジェクトが発生することがあります。たとえば、Ceph Object Gateway が操作の途中でダウンすると、一部のオブジェクトが孤立する可能性があります。また、検出されていないバグにより、孤立したオブジェクトが発生する可能性があります。

Red Hat Ceph Storage 4.1 以降、ストレージ管理者は Ceph Object Gateway オブジェクトが RADOS オブジェクトにマッピングする方法を確認することができます。radosgw-admin コマンドは、これらの潜在的な孤立オブジェクトまたはリークオブジェクトの一覧を検索して生成するための新しいツールを提供します。radoslist サブコマンドを使用すると、バケット内またはストレージクラスター内のすべてのバケットに保存されているオブジェクトが表示されます。rgw-orphan-list スクリプトは、プール内の孤立したオブジェクトを表示します。

重要

radoslist サブコマンドは、非推奨の orphans find サブコマンドおよび orphans finish サブコマンドを置き換えます。

前提条件

  • 稼働中の Red Hat Ceph Storage クラスター
  • 稼働中の Ceph Object Gateway。

手順

  1. バケット内でデータを保持するオブジェクトの一覧を生成するには、以下を実行します。

    構文

    radosgw-admin bucket radoslist --bucket BUCKET_NAME

    [root@rgw ~]# radosgw-admin bucket radoslist --bucket mybucket

    注記

    BUCKET_NAME を省略すると、すべてのバケット内のすべてのオブジェクトが表示されます。

  2. プールの孤立した一覧を生成するには、以下を実行します。

    [root@rgw ~]# rgw-orphan-list

    Available pools:
        .rgw.root
        default.rgw.control
        default.rgw.meta
        default.rgw.log
        default.rgw.buckets.index
        default.rgw.buckets.data
        rbd
        default.rgw.buckets.non-ec
        ma.rgw.control
        ma.rgw.meta
        ma.rgw.log
        ma.rgw.buckets.index
        ma.rgw.buckets.data
        ma.rgw.buckets.non-ec
    Which pool do you want to search for orphans?

    孤立を検索する場合はプール名を入力します。

    重要

    メタデータプールではなく、rgw-orphan-list コマンドを使用する場合は、データプールを指定する必要があります。

  3. 一覧で孤立したオブジェクトを確認します。
  4. 孤立したオブジェクトを削除するには、以下を実行します。

    構文

    rados -p POOL_NAME rm OBJECT_NAME

    [root@rgw ~]# rados -p default.rgw.buckets.data rm myobject

    警告

    正しいオブジェクトを削除していることを確認します。rados rm コマンドを実行すると、ストレージクラスターからデータが削除されます。

関連情報

  • レガシーの radosgw-admin orphans find サブコマンドの詳細は、『Red Hat Ceph Storage 3 Object Gateway 管理ガイド』「孤立オブジェクトの検出」を参照してください。

3.9.4. マルチファクター認証用のトークンの設定

Ceph Object Gateway は S3 マルチファクター認証(MFA)をサポートします。MFA 対応バケットでは、データを削除する前に、標準の S3 認証に加えて、ユーザーは時間ベースのワンタイムパスワード(TOTP)トークンを入力する必要があります。これにより、バケットからのデータが正しくない削除に対してセキュリティーが強化されます。

注記

S3 API を使用してバケットの MFA およびバージョン管理を有効にします。

注記

MFA ID はユーザーのメタデータに設定されますが、実際の MFA ワンタイムパスワード設定はローカルゾーンの OSD にあります。マルチサイト環境では、ゾーンごとに異なるトークンを使用します。

前提条件

  • バージョン管理および MFA が有効にされているバケット。
  • Ceph Object Gateway ノードに oathtool パッケージがインストールされている。
  • Ceph Object Gateway へのルートレベルのアクセス。
  • Google Authenticator または FreeOTP などの認証ツール。

手順

  1. 秘密シードを生成します。

    構文

    SEED=$(head -10 /dev/urandom | sha512sum | cut -b 1-30)
    echo $SEED

    [root@rgw ~]# SEED=$(head -10 /dev/urandom | sha512sum | cut -b 1-30)
    [root@rgw ~]# echo $SEED
    4fe2d015680b1b88f787d83339925c

  2. シード値をコピーします。
  3. oathtool を起動し、コピーした値を Hex secret フィールドに貼り付けます。

    構文

    oathtool -v -d6 $SEED

    [root@rgw ~]# oathtool -v -d6 $SEED
    Hex secret: 4fe2d015680b1b88f787d83339925c
    Base32 secret: J7RNAFLIBMNYR54H3AZTTES4
    Digits: 6
    Window size: 0
    Start counter: 0x0 (0)
    
    315849

  4. Base32 シークレットと 6 桁の PIN を書き留めておきます。
  5. オーセンティケーターソフトウェアで + を選択し、Manual entry を選択します。
  6. ユーザーのメールを Account フィールドに追加します。
  7. Base32 シークレットを Key フィールドに入力します。

    注記

    Base32 シークレットをオーセンティケーターソフトウェアに入力する代わりに、qrencode を使用して QR コードを生成し、それをオーセンティケーターソフトウェアにインポートできます。qrencode の使用に関する詳細は、qrencode 多要素認証の設定」を参照してください。

  8. radosgw-admin を使用して、ユーザーの RGW に MFA トークンを作成します。

    構文

    radosgw-admin mfa create --uid=UID --totp-serial=TOTP-ID --totp-seed=SEED

    UID はユーザー ID です。

    TOTP_ID は、TOTP トークン用に作成する名前です。

    SEED は、以前に生成したシード値と 16 進数シークレットです。

    [root@rgw ~]# radosgw-admin mfa create --uid=hari --totp-serial=MFAtest --totp-seed=4fe2d015680b1b88f787d83339925c
    [root@rgw ~]# radosgw-admin mfa list --uid=hari
    {
        "entries": [
            {
                "type": 2,
                "id": "MFAtest",
                "seed": "4fe2d015680b1b88f787d83339925c",
                "seed_type": "hex",
                "time_ofs": 0,
                "step_size": 30,
                "window": 2
            }
        ]
    }

  9. オーセンティケーターの現在の 6 桁の PIN を書き留めておきます。
  10. 前と現在の 6 桁の PIN を入力して、トークンを再同期します。

    構文

    radosgw-admin mfa resync --uid=UID --totp-serial=TOTP_ID --debug_ms=0 --totp-pin=OLD_PIN --totp-pin=NEW_PIN

    [root@rgw ~]# radosgw-admin mfa resync --uid=hari --totp-serial=MFAtest --debug_ms=0 --totp-pin=440024 --totp-pin=245763

  11. google オーセンティケーターの現在のピンを確認します。

    構文

    radosgw-admin mfa check --uid=UID --totp-serial=TOTP_ID --debug_ms=0 --totp-pin=NEW_PIN

    [root@rgw ~]# radosgw-admin mfa check --uid=hari --totp-serial=MFAtest --debug_ms=0 --totp-pin=937498
    ok

    注記

    新規または現在の PIN を入力する前に、オーセンティケーターを常に確認してください。前の手順と現在のステップの間で PIN が変更された可能性があります。

正しくない PIN を入力すると、radosgw-admin がエラーを生成します。

+ .例

[root@rgw ~]# radosgw-admin mfa check --uid=hari --totp-serial=MFAtest --debug_ms=0 --totp-pin=123456
MFA check failed, error: (13) Permission denied

関連情報

3.9.5. qrencodeを使用したマルチファクター認証の設定

Base32 シークレットをオーセンティケーターソフトウェアに入力する代わりに、qrencode を使用して QR コードを生成し、それをオーセンティケーターソフトウェアにインポートできます。

注記

マルチファクター認証(MFA)ID はユーザーのメタデータに設定されますが、実際の MFA ワンタイムパスワード設定はローカルゾーンの OSD にあります。マルチサイト環境では、ゾーンごとに異なるトークンを使用します。

前提条件

  • バージョン管理および MFA が有効にされているバケット。
  • Ceph Object Gateway ノードに oathtool パッケージおよび qrencode パッケージがインストールされている。
  • Ceph Object Gateway へのルートレベルのアクセス。
  • Google Authenticator または FreeOTP などの認証ツール。

手順

  1. 秘密シードを生成します。

    構文

    SEED=$(head -10 /dev/urandom | sha512sum | cut -b 1-30)
    echo $SEED

    [root@rgw ~]# SEED=$(head -10 /dev/urandom | sha512sum | cut -b 1-30)
    [root@rgw ~]# echo $SEED
    4fe2d015680b1b88f787d83339925c

  2. シード値をコピーします。
  3. oathtool を起動し、コピーした値を Hex secret フィールドに貼り付けます。

    構文

    oathtool -v -d6 $SEED

    [root@rgw ~]# oathtool -v -d6 $SEED
    Hex secret: 4fe2d015680b1b88f787d83339925c
    Base32 secret: J7RNAFLIBMNYR54H3AZTTES4
    Digits: 6
    Window size: 0
    Start counter: 0x0 (0)
    
    315849

  4. Base32 シークレットと 6 桁の PIN を書き留めておきます。
  5. QR コードを生成します。

    構文

    qrencode -o /tmp/user.png 'otpauth://totp/TOTP_ID?secret=SEED'

    TOTP_ID は、TOTP トークン用に作成する名前です。

    SEED は、以前に生成したシード値と 16 進数シークレットです。

    [root@rgw ~]# qrencode -o /tmp/user.png 'otpauth://totp/MFAtest?secret=J7RNAFLIBMNYR54H3AZTTES4'

  6. オーセンティケーターソフトウェアで + を選択し、Scan barcode を選択します。
  7. バーコードをオーセンティケーターにスキャンします。
  8. radosgw-admin を使用して、ユーザーの RGW に MFA トークンを作成します。

    構文

    radosgw-admin mfa create --uid=UID --totp-serial=TOTP-ID --totp-seed=SEED

    UID はユーザー ID です。

    TOTP_ID は、TOTP トークン用に作成する名前です。

    SEED は、以前に生成したシード値と 16 進数シークレットです。

    [root@rgw ~]# radosgw-admin mfa create --uid=hari --totp-serial=MFAtest --totp-seed=4fe2d015680b1b88f787d83339925c
    [root@rgw ~]# radosgw-admin mfa list --uid=hari
    {
        "entries": [
            {
                "type": 2,
                "id": "MFAtest",
                "seed": "4fe2d015680b1b88f787d83339925c",
                "seed_type": "hex",
                "time_ofs": 0,
                "step_size": 30,
                "window": 2
            }
        ]
    }

  9. オーセンティケーターの現在の 6 桁の PIN を書き留めておきます。
  10. 前と現在の 6 桁の PIN を入力して、トークンを再同期します。

    構文

    radosgw-admin mfa resync --uid=UID --totp-serial=TOTP_ID --debug_ms=0 --totp-pin=OLD_PIN --totp-pin=NEW_PIN

    [root@rgw ~]# radosgw-admin mfa resync --uid=hari --totp-serial=MFAtest --debug_ms=0 --totp-pin=440024 --totp-pin=245763

  11. google オーセンティケーターの現在のピンを確認します。

    構文

    radosgw-admin mfa check --uid=UID --totp-serial=TOTP_ID --debug_ms=0 --totp-pin=NEW_PIN

    [root@rgw ~]# radosgw-admin mfa check --uid=hari --totp-serial=MFAtest --debug_ms=0 --totp-pin=937498
    ok

    注記

    新規または現在の PIN を入力する前に、オーセンティケーターを常に確認してください。前の手順と現在のステップの間で PIN が変更された可能性があります。

正しくない PIN を入力すると、radosgw-admin がエラーを生成します。

+ .例

[root@rgw ~]# radosgw-admin mfa check --uid=hari --totp-serial=MFAtest --debug_ms=0 --totp-pin=123456
MFA check failed, error: (13) Permission denied

3.9.6. バケットの通知

バケット通知により、バケットで特定のイベントが発生した場合に Ceph Object Gateway から情報を送信することができます。バケット通知は HTTP、AMQP0.9.1、および Kafka エンドポイントに送信できます。

特定のバケットおよび特定のトピックにイベントについてのバケット通知を送信するには、通知エントリーを作成する必要があります。バケット通知は、イベントタイプのサブセットに作成するか、すべてのイベントタイプについてデフォルトで作成できます。バケット通知は、キープレフィックスまたはサフィックス、キーに一致する正規表現、オブジェクトに割り当てられたメタデータ属性、またはオブジェクトタグに基づいてイベントをフィルターできます。バケット通知には、バケット通知メカニズムの設定および制御インターフェースを提供する REST API があります。

関連情報

3.9.7. バケット通知の作成

バケットレベルでバケット通知を作成します。通知設定には、Red Hat Ceph Storage Object Gateway S3イベント (ObjectCreated および ObjectRemoved) があります。バケット通知を送信するには、これらの公開と宛先が必要です。バケット通知は S3 操作です。

前提条件

  • 稼働中の Red Hat Ceph Storage クラスター
  • ルートレベルのアクセス。
  • Red Hat Ceph Storage Object Gateway のインストール
  • ユーザーアクセスキーおよびシークレットキー。
  • エンドポイントパラメーター。
重要

Red Hat は、ObjectCreate イベント (例: putpostmultipartUpload、および copy) をサポートします。また、Red Hat は、object_deletes3_multi_object_delete などの ObjectRemove イベントをサポートしています。

手順

  1. HTTP サーバー、RabbitMQ サーバー、または Kafka サーバーを起動します。
  2. S3 バケットを作成します。
  3. httpamqp、または kafka プロトコルに SNS トピックを作成します。
  4. s3:objectCreate および s3:objectRemove イベントの s3 バケット通知を作成します。

    client.put_bucket_notification_configuration(
       Bucket=bucket_name,
       NotificationConfiguration={
           'TopicConfigurations': [
               {
                   'Id': notification_name,
                   'TopicArn': topic_arn,
                   'Events': ['s3:ObjectCreated:*', 's3:ObjectRemoved:*']
               }]})

  5. バケットに S3 オブジェクトを作成します。
  6. レシーバー httprabbitmq、または kafka でのオブジェクト作成イベントを確認します。
  7. オブジェクトを削除します。
  8. レシーバー httprabbitmq、または kafka でオブジェクトの削除イベントを確認します。

3.9.8. 関連情報