3.6. ユーザー管理

Ceph Object Storage のユーザー管理とは、Ceph Object Storage サービスのクライアントアプリケーションであるユーザーを指します。Ceph Storage クラスターのクライアントアプリケーションとしての Ceph Object Gateway はサポートされません。クライアントアプリケーションが Ceph Object Gateway サービスと対話できるようにするには、ユーザー、アクセスキー、およびシークレットを作成する必要があります。

ユーザータイプは 2 つあります。

  • User: 「user」という用語は、S3 インターフェースのユーザーを反映しています。
  • Subuser: 「subuser」という用語は、Swift インターフェースのユーザーを反映しています。サブユーザーはユーザーに関連付けられます。

ユーザーおよびサブユーザーの作成、変更、表示、一時停止、および削除を行うことができます。

重要

マルチサイトデプロイメントでユーザーを管理する場合は、常にマスターゾーングループのマスターゾーン内の Ceph Object Gateway ノードで radosgw-admin コマンドを実行して、ユーザーがマルチサイトクラスター全体で同期するようにします。セカンダリーゾーンまたはセカンダリーゾーングループから、マルチサイトクラスターでユーザーを作成、変更、または削除しないでください。このドキュメントでは、マスターゾーングループのマスターゾーンにあるホストのコマンドライン規則として [root@master-zone]# を使用しています。

ユーザー ID およびサブユーザー ID を作成する他に、ユーザーの表示名とメールアドレスを追加することもできます。キーおよびシークレットを指定するか、鍵とシークレットを自動的に生成できます。キーの生成または指定時に、ユーザー ID は S3 キータイプに対応し、サブユーザー ID は swift キータイプに対応することに注意してください。Swift キーには、アクセスレベルの readwritereadwrite、および full もあります。

ユーザー管理コマンドライン構文は、通常、パターン user <command> <user-id> に従います。ここで、<user-id> は、--uid= オプションの後にユーザーID (S3) が続くか、--subuser= オプションの後にユーザー名 (Swift) が続きます。以下に例を示します。

[root@master-zone]# radosgw-admin user <create|modify|info|rm|suspend|enable|check|stats> <--uid={id}|--subuser={name}> [other-options]

実行するコマンドによっては、追加オプションが必要になる場合があります。

3.6.1. マルチテナンシー

Red Hat Ceph Storage 2 以降では、Ceph Object Gateway は S3 および Swift API の両方のマルチテナンシーをサポートします。この場合、各ユーザーとバケットは「テナント」の下にあります。 マルチテナンシーは、「test」、「main」など、複数のテナントが共通のバケット名を使用している場合に namespace の競合を防ぎます。

各ユーザーとバケットはテナントの下に存在します。後方互換性を確保するために、空の名前を持つ「レガシー」テナントが追加されます。テナントを指定せずにバケットを参照すると、Swift API は「レガシー」テナントを想定します。既存のユーザーはレガシーテナントにも保管されるため、以前のリリースと同様にバケットとオブジェクトにアクセスできます。

このようなテナントには操作がありません。ユーザーが管理されると、必要に応じて表示され、非表示になります。明示的なテナントを持つユーザーを作成、変更、および削除するには、追加のオプション --tenant を指定するか、radosgw-admin コマンドのパラメーターで構文 "<tenant>$<user>" を使用します。

S3 用のユーザー testx$tester を作成するには、以下を実行します。

[root@master-zone]# radosgw-admin --tenant testx --uid tester \
                    --display-name "Test User" --access_key TESTER \
                    --secret test123 user create

Swift のユーザー testx$tester を作成するには、以下のいずれかを実行します。

[root@master-zone]# radosgw-admin --tenant testx --uid tester \
                    --display-name "Test User" --subuser tester:swift \
                    --key-type swift --access full subuser create

[root@master-zone]# radosgw-admin key create --subuser 'testx$tester:swift' \
                    --key-type swift --secret test123
注記

明示的なテナントを持つサブユーザーは、シェルで引用符で囲む必要があります。

3.6.2. ユーザーの作成

user create コマンドを使用して S3-interface ユーザーを作成します。MUST は、ユーザー ID と表示名を指定します。メールアドレスを指定することもできます。key または secret を指定しないと、radosgw-admin によって自動的に生成されます。ただし、生成されたキー/シークレットのペアを使用しない場合は、キーとシークレットを指定できます。

[root@master-zone]# radosgw-admin user create --uid=<id> \
[--key-type=<type>] [--gen-access-key|--access-key=<key>]\
[--gen-secret | --secret=<key>] \
[--email=<email>] --display-name=<name>

以下に例を示します。

[root@master-zone]# radosgw-admin user create --uid=janedoe --display-name="Jane Doe" --email=jane@example.com
{ "user_id": "janedoe",
  "display_name": "Jane Doe",
  "email": "jane@example.com",
  "suspended": 0,
  "max_buckets": 1000,
  "auid": 0,
  "subusers": [],
  "keys": [
        { "user": "janedoe",
          "access_key": "11BS02LGFB6AL6H1ADMW",
          "secret_key": "vzCEkuryfn060dfee4fgQPqFrncKEIkh3ZcdOANY"}],
  "swift_keys": [],
  "caps": [],
  "op_mask": "read, write, delete",
  "default_placement": "",
  "placement_tags": [],
  "bucket_quota": { "enabled": false,
      "max_size_kb": -1,
      "max_objects": -1},
  "user_quota": { "enabled": false,
      "max_size_kb": -1,
      "max_objects": -1},
  "temp_url_keys": []}
重要

キー出力を確認します。radosgw-admin が JSON エスケープ (\) 文字を生成することがあり、一部のクライアントは JSON エスケープ文字の処理方法を知りません。対処法には、JSON エスケープ文字 (\) の削除、文字列の引用符でのカプセル化、キーの再生成、JSON エスケープ文字が含まれていないことの確認、またはキーとシークレットの手動指定が含まれます。

3.6.3. サブユーザーの作成

サブユーザー (Swiftインターフェース) を作成するには、ユーザーID (--uid={username})、サブユーザー ID、およびサブユーザーのアクセスレベルを指定する必要があります。key または secret を指定しないと、radosgw-admin によって自動的に生成されます。ただし、生成されたキー/シークレットのペアを使用しない場合は、キーとシークレットを指定できます。

注記

アクセス制御ポリシーも含まれるため、fullreadwrite ではありません。

[root@master-zone]# radosgw-admin subuser create --uid={uid} --subuser={uid} --access=[ read | write | readwrite | full ]

以下に例を示します。

[root@master-zone]# radosgw-admin subuser create --uid=janedoe --subuser=janedoe:swift --access=full
{ "user_id": "janedoe",
  "display_name": "Jane Doe",
  "email": "jane@example.com",
  "suspended": 0,
  "max_buckets": 1000,
  "auid": 0,
  "subusers": [
        { "id": "janedoe:swift",
          "permissions": "full-control"}],
  "keys": [
        { "user": "janedoe",
          "access_key": "11BS02LGFB6AL6H1ADMW",
          "secret_key": "vzCEkuryfn060dfee4fgQPqFrncKEIkh3ZcdOANY"}],
  "swift_keys": [],
  "caps": [],
  "op_mask": "read, write, delete",
  "default_placement": "",
  "placement_tags": [],
  "bucket_quota": { "enabled": false,
      "max_size_kb": -1,
      "max_objects": -1},
  "user_quota": { "enabled": false,
      "max_size_kb": -1,
      "max_objects": -1},
  "temp_url_keys": []}

3.6.4. ユーザー情報の取得

ユーザーに関する情報を取得するには、user info ユーザー ID (--uid={username}) を指定します。

[root@master-zone]# radosgw-admin user info --uid=janedoe

テナントされたユーザーに関する情報を取得するには、ユーザー ID とテナントの名前の両方を指定します。

[root@master-zone]# radosgw-admin user info --uid=janedoe --tenant=test

3.6.5. ユーザー情報の変更

ユーザーに関する情報を変更するには、ユーザーID (--uid={username}) と変更する属性を指定する必要があります。一般的な変更は、キーおよびシークレット、メールアドレス、表示名、およびアクセスレベルです。以下に例を示します。

[root@master-zone]# radosgw-admin user modify --uid=janedoe / --display-name="Jane E. Doe"

サブユーザーの値を変更するには、subuser modify とサブユーザー ID を指定します。以下に例を示します。

[root@master-zone]# radosgw-admin subuser modify --subuser=janedoe:swift / --access=full

3.6.6. ユーザーの有効化および一時停止

ユーザーを作成すると、ユーザーはデフォルトで有効になっています。ただし、ユーザー権限を一時停止し、後で再度有効にすることができます。ユーザーを一時停止するには、user suspend とユーザー ID を指定します。

[root@master-zone]# radosgw-admin user suspend --uid=johndoe

一時停止ユーザーを再度有効にするには、user enable とユーザー ID を指定します。

[root@master-zone]# radosgw-admin user enable --uid=johndoe
注記

ユーザーを無効にすると、サブユーザーが無効になります。

3.6.7. ユーザーの削除

ユーザーを削除すると、ユーザーとサブユーザーがシステムから削除されます。ただし、必要に応じてサブユーザーのみを削除できます。ユーザー (およびサブユーザー) を削除するには、user rm とユーザー ID を指定します。

[root@master-zone]# radosgw-admin user rm --uid=<uid> [--purge-keys] [--purge-data]

以下に例を示します。

[root@master-zone]# radosgw-admin user rm --uid=johndoe --purge-data

サブユーザーのみを削除するには、subuser rm およびサブユーザー名を指定します。

[root@master-zone]# radosgw-admin subuser rm --subuser=johndoe:swift --purge-keys

オプションは次のとおりです。

  • データのパージ: --purge-data オプションは、UID に関連付けられたすべてのデータをパージします。
  • Purge Keys: --purge-keys オプションは、UID に関連付けられたすべてのキーをパージします。

3.6.8. サブユーザーの削除

サブユーザーを削除すると、Swift インターフェースへのアクセスが削除されます。ユーザーはシステム内に残ります。Ceph Object Gateway: サブユーザーを削除するには、subuser rm およびサブユーザー ID を指定します。

[root@master-zone]# radosgw-admin subuser rm --subuser=johndoe:test

オプションは次のとおりです。

  • Purge Keys: --purge-keys オプションは、UID に関連付けられたすべてのキーをパージします。

3.6.9. ユーザーの名前を変更

ユーザーの名前を変更するには、radosgw-admin user rename コマンドを使用します。このコマンドの所要時間は、ユーザーが持つバケットとオブジェクトの数によって異なります。この数字が大きい場合、Red Hat は、screen パッケージが提供する Screen ユーティリティーでコマンドを使用することを推奨します。

前提条件

  • 稼働中の Ceph クラスター
  • root または sudo アクセス
  • Ceph Object Gateway がインストールされていること。

手順

  1. ユーザーの名前を変更します。

    radosgw-admin user rename --uid=current-user-name --new-uid=new-user-name

    たとえば、名前 user1user2 に変更するには、以下を実行します。

    # radosgw-admin user rename --uid=user1 --new-uid=user2
    
    {
        "user_id": "user2",
        "display_name": "user 2",
        "email": "",
        "suspended": 0,
        "max_buckets": 1000,
        "auid": 0,
        "subusers": [],
        "keys": [
            {
                "user": "user2",
                "access_key": "59EKHI6AI9F8WOW8JQZJ",
                "secret_key": "XH0uY3rKCUcuL73X0ftjXbZqUbk0cavD11rD8MsA"
            }
        ],
        "swift_keys": [],
        "caps": [],
        "op_mask": "read, write, delete",
        "default_placement": "",
        "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": "rgw"
    }

    ユーザーがテナント内にある場合は、ユーザー名とテナントの両方を指定します。

    構文

    radosgw-admin user rename --uid user-name --new-uid new-user-name --tenant tenant

    たとえば、test テナント内の user1 の名前を user2 に変更するには、以下を実行します。

    # radosgw-admin user rename --uid=test$user1 --new-uid=test$user2 --tenant test
    
    1000 objects processed in tvtester1. Next marker 80_tVtester1_99
    2000 objects processed in tvtester1. Next marker 64_tVtester1_44
    3000 objects processed in tvtester1. Next marker 48_tVtester1_28
    4000 objects processed in tvtester1. Next marker 2_tVtester1_74
    5000 objects processed in tvtester1. Next marker 14_tVtester1_53
    6000 objects processed in tvtester1. Next marker 87_tVtester1_61
    7000 objects processed in tvtester1. Next marker 6_tVtester1_57
    8000 objects processed in tvtester1. Next marker 52_tVtester1_91
    9000 objects processed in tvtester1. Next marker 34_tVtester1_74
    9900 objects processed in tvtester1. Next marker 9_tVtester1_95
    1000 objects processed in tvtester2. Next marker 82_tVtester2_93
    2000 objects processed in tvtester2. Next marker 64_tVtester2_9
    3000 objects processed in tvtester2. Next marker 48_tVtester2_22
    4000 objects processed in tvtester2. Next marker 32_tVtester2_42
    5000 objects processed in tvtester2. Next marker 16_tVtester2_36
    6000 objects processed in tvtester2. Next marker 89_tVtester2_46
    7000 objects processed in tvtester2. Next marker 70_tVtester2_78
    8000 objects processed in tvtester2. Next marker 51_tVtester2_41
    9000 objects processed in tvtester2. Next marker 33_tVtester2_32
    9900 objects processed in tvtester2. Next marker 9_tVtester2_83
    {
        "user_id": "test$user2",
        "display_name": "User 2",
        "email": "",
        "suspended": 0,
        "max_buckets": 1000,
        "auid": 0,
        "subusers": [],
        "keys": [
            {
                "user": "test$user2",
                "access_key": "user2",
                "secret_key": "123456789"
            }
        ],
        "swift_keys": [],
        "caps": [],
        "op_mask": "read, write, delete",
        "default_placement": "",
        "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": "rgw"
    }

  2. ユーザーの名前が正常に変更されたことを確認します。

    構文

    radosgw-admin user info --uid=new-user-name

    以下に例を示します。

    # radosgw-admin user info --uid=user2

    ユーザーがテナント内にある場合は、tenant$user-name 形式を使用します。

    radosgw-admin user info --uid=tenant$new-user-name
    # radosgw-admin user info --uid=test$user2

関連情報

  • man ページの screen(1)

3.6.10. キーの作成

ユーザーのキーを作成するには、key create を指定する必要があります。ユーザーには、ユーザー ID と s3 キータイプを指定します。サブユーザーのキーを作成するには、サブユーザー ID と swift キータイプを指定する必要があります。以下に例を示します。

[root@master-zone]# radosgw-admin key create --subuser=johndoe:swift --key-type=swift --gen-secret
{ "user_id": "johndoe",
  "rados_uid": 0,
  "display_name": "John Doe",
  "email": "john@example.com",
  "suspended": 0,
  "subusers": [
     { "id": "johndoe:swift",
       "permissions": "full-control"}],
  "keys": [
    { "user": "johndoe",
      "access_key": "QFAMEDSJP5DEKJO0DDXY",
      "secret_key": "iaSFLDVvDdQt6lkNzHyW4fPLZugBAI1g17LO0+87"}],
  "swift_keys": [
    { "user": "johndoe:swift",
      "secret_key": "E9T2rUZNu2gxUjcwUBO8n\/Ev4KX6\/GprEuH4qhu1"}]}

3.6.11. アクセスキーの追加および削除

S3 インターフェースおよび Swift インターフェースを使用するには、ユーザーとサブユーザーにアクセスキーが必要です。ユーザーまたはサブユーザーを作成し、アクセスキーおよびシークレットを指定しないと、キーとシークレットは自動的に生成されます。キーを作成して、アクセスキーやシークレットを指定するか、またはシークレットを生成します。アクセスキーおよびシークレットを削除することもできます。オプションは次のとおりです。

  • --secret=<key> は、秘密鍵を指定します (例: 手動で生成)。
  • --geen-access-key は、ランダムなアクセスキーを生成します (デフォルトでは S3 ユーザー用)。
  • --geen-secret は、ランダムな秘密鍵を生成します。
  • --key-type=<type> は、キータイプを指定します。オプションは swift、s3 です。

キーを追加するには、ユーザーを指定します。

[root@master-zone]# radosgw-admin key create --uid=johndoe --key-type=s3 --gen-access-key --gen-secret

キーとシークレットを指定することもできます。

アクセスキーを削除するには、ユーザーとキーを指定する必要があります。

  1. 特定のユーザーのアクセスキーを見つけます。

    [root@master-zone]# radosgw-admin user info --uid=<testid>

    アクセスキーは、出力の "access_key" 値になります。以下に例を示します。

    $ radosgw-admin user info --uid=johndoe
    {
        "user_id": "johndoe",
        ...
        "keys": [
            {
                "user": "johndoe",
                "access_key": "0555b35654ad1656d804",
                "secret_key": "h7GhxuBLTrlhVUyxSPUKUV8r/2EI4ngqJxD7iBdBYLhwluN30JaT3Q=="
            }
        ],
        ...
    }
  2. 前のステップでユーザー ID とアクセスキーを指定して、アクセスキーを削除します。

    [root@master-zone]# radosgw-admin key rm --uid=<user_id> --access-key <access_key>

    以下に例を示します。

    [root@master-zone]# radosgw-admin key rm --uid=johndoe --access-key 0555b35654ad1656d804

3.6.12. 管理機能の追加および削除

Ceph Storage Cluster は管理 API を提供し、ユーザーが REST API 経由で管理機能を実行できるようにします。デフォルトでは、ユーザーはこの API にアクセスできません。ユーザーが管理機能を実行できるようにするには、ユーザーに管理機能を提供します。

ユーザーに管理機能を追加するには、以下を実行します。

[root@master-zone]# radosgw-admin caps add --uid={uid} --caps={caps}

ユーザー、バケット、メタデータ、および使用方法(使用率)に読み取り、書き込み、またはすべての機能を追加できます。以下に例を示します。

--caps="[users|buckets|metadata|usage|zone]=[*|read|write|read, write]"

以下に例を示します。

[root@master-zone]# radosgw-admin caps add --uid=johndoe --caps="users=*"

ユーザーから管理機能を削除するには、以下のコマンドを実行します。

[root@master-zone]# radosgw-admin caps remove --uid=johndoe --caps={caps}