第5章 ユーザー管理
本項では、Ceph クライアントユーザーと、 Red Hat Ceph Storage クラスターを使用した認証および承認について説明します。ユーザーは、Ceph クライアントを使用して Red Hat Ceph Storage クラスターデーモンと対話する個人またはアプリケーションなどのシステムアクターです。
Ceph が認証および承認が有効な状態 (デフォルトでは有効) で実行された場合には、ユーザー名および指定したユーザーの秘密鍵が含まれるキーリングを指定する必要があります (通常はコマンドラインを使用)。ユーザー名を指定しない場合、Ceph は client.admin
管理ユーザーをデフォルトのユーザー名として使用します。キーリングを指定しない場合には、Ceph 設定の keyring
設定を使用してキーリングを探します。たとえば、ユーザーやキーリングを指定せずに ceph health
コマンドを実行する場合は、以下を実行します。
# ceph health
Ceph は以下のようなコマンドを解釈します。
# ceph -n client.admin --keyring=/etc/ceph/ceph.client.admin.keyring health
ユーザー名およびシークレットの再入力を避けるために、CEPH_ARGS
環境変数を使用できます。
Red Hat Ceph Storage クラスターを認証を使用するように設定する方法の詳細は、Red Hat Ceph Storage 3 『Configuration Guide』を参照してください。
5.1. 背景
Ceph クライアントのタイプ (ブロックデバイス、オブジェクトストア、ファイルシステム、ネイティブ API、Ceph コマンドラインなど) に関係なく、Ceph はすべてのデータをプール内のオブジェクトとして保存します。データの読み取りおよび書き込みを行うには、Ceph ユーザーはプールにアクセスできる必要があります。また、管理用 Ceph ユーザーには、Ceph の管理コマンドを実行するパーミッションが必要です。以下の概念は、Ceph ユーザー管理を理解するのに役立ちます。
5.1.1. ユーザー
Red Hat Ceph Storage クラスターのユーザーは、個人またはアプリケーションなどのシステムアクターです。ユーザーを作成すると、ストレージクラスター、そのプール、およびプール内のデータにアクセスできる対象を制御できます。
Ceph の概念にはユーザーの タイプ
があります。ユーザー管理の目的で、タイプは常に client
になります。Cephは、ピリオド (.) で区切られたユーザータイプとユーザーID で構成される形式でユーザーを識別します (例: TYPE.ID
、client.admin
、または client.user1
)。ユーザーの入力は、Ceph Monitor および OSD も Cephx プロトコルを使用しますが、それらはクライアントではないために必要になります。ユーザータイプの分類することにより、クライアントユーザーと他のユーザーを区別でき、アクセス制御、ユーザーの監視および追跡可能性をさらに単純化します。
Ceph コマンドラインを使用すると、コマンドラインでの使用に応じて、タイプを使用せずにユーザーを指定できるため、Ceph のユーザータイプが混乱する場合があります。--user
または --id
を指定した場合は、タイプを省略できます。そのため、client.user1
は user1
として簡単に入力できます。--name
または -n
を指定する場合は、client.user1
などのタイプおよび名前を指定する必要があります。ベストプラクティスとして、可能な限りタイプと名前を使用することが推奨されます。
Red Hat Ceph Storage クラスターのユーザーは、Ceph Object Storage のユーザーとは異なります。オブジェクトゲートウェイは、ゲートウェイデーモンとストレージクラスター間の通信に Red Hat Ceph Storage クラスタユーザーを使用しますが、ゲートウェイにはエンドユーザーのための独自のユーザー管理機能があります。
5.1.2. 承認 (機能)
Ceph では、認証されたユーザーがモニターおよび OSD の機能を実行するために行う承認を「capabilities」(caps) という用語を使用して表現しています。ケイパビリティーは、プール内のデータやプール内の namespace へのアクセスを制限することもできます。ユーザーを作成または更新する際に、Ceph 管理ユーザーはユーザーのケイパビリティーを設定します。
ケイパビリティーの構文は以下の形式に従います。
<daemon_type> 'allow <capability>' [<daemon_type> 'allow <capability>']
Monitor Caps: モニターのケイパビリティーには、
r
、w
、x
、allow profile <cap>
、およびprofile rbd
があります。以下に例を示します。mon 'allow rwx` mon 'allow profile osd'
OSD Caps: OSD ケイパビリティーには、
r
、w
、x
、class-read
、class-write
、profile osd
、profile rbd
、およびprofile rbd-read-only
があります。さらに OSD ケイパビリティーは、プールおよび namespace の設定も許可します。osd 'allow <capability>' [pool=<pool_name>] [namespace=<namespace_name>]
Ceph Object Gateway デーモン (radosgw
) は Ceph Storage Cluster のクライアントであるため、Ceph Storage Cluster のデーモンタイプとしては表示されません。
以下のエントリーは、それぞれのケイパビリティーについて説明します。
| デーモンのアクセス設定の前に使用してください。 |
| ユーザーに読み取り権限を付与します。CRUSH マップを取得するためにモニターで必要です。 |
| ユーザーがオブジェクトへの書き込みアクセス権を付与します。 |
|
クラスメソッド (読み取りおよび書き込みの両方) をユーザーに呼び出し、モニターで |
|
クラスの読み取りメソッドを呼び出すケイパビリティーを提供します。 |
|
クラスの書き込みメソッドを呼び出すケイパビリティーを提供します。 |
| 特定のデーモンまたはプールに対する読み取り、書き込み、実行のパーミッション、および admin コマンドの実行権限をユーザーに付与します。 |
| OSD として他の OSD またはモニターに接続するためのパーミッションをユーザーに付与します。OSD がレプリケーションのハートビートトラフィックおよびステータス報告を処理できるようにするために OSD に付与されました。 |
| OSD のブートストラップ時にキーを追加するパーミッションを持つように、OSD をブートストラップするユーザーパーミッションを付与します。 |
| ユーザーに、Ceph ブロックデバイスへの読み取り/書き込み権限を付与します。 |
| ユーザーに、Ceph ブロックデバイスへの読み取り専用アクセスを付与します。 |
5.1.3. プール
プールは Ceph クライアントのストレージストラテジーを定義し、そのストラテジーの論理パーティションとして機能します。
Ceph デプロイメントでは、さまざまなタイプのユースケース (クラウドボリューム/イメージ、オブジェクトストレージ、ホットストレージ、コールドストレージなど) をサポートするプールを作成するのが一般的です。OpenStack のバックエンドとして Ceph をデプロイする場合、標準的なデプロイメントにはボリューム、イメージ、バックアップと、client.glance
、client.cinder
などユーザーのプールが含まれます。
5.1.4. 名前空間
プール内のオブジェクトは、プール内のオブジェクトの論理グループである namespace に関連付けることができます。ユーザーのプールへのアクセスは、ユーザーによる読み書きが名前空間内でのみ行われるように、その名前空間と関連付けることができます。プール内の名前空間に書き込まれたオブジェクトには、その名前空間にアクセスできるユーザーのみがアクセスできます。
現在、名前空間は、librados
に記述されたアプリケーションにのみ役立ちます。ブロックデバイスやオブジェクトストレージなどの Ceph クライアントでは、この機能は現在サポートされていません。
名前空間の合理的な理由は、各プールが OSD にマッピングされる配置グループのセットを作成するため、プールはユースケース別にデータを分離するために計算量の多い方法になる可能性があるからです。複数のプールが同じ CRUSH 階層とルールセットを使用する場合、OSD のパフォーマンスは負荷の増加に応じて低下する可能性があります。
たとえば、プールには、OSD ごとに約 100 個の配置グループが必要です。そのため、1000 個 の OSD を持つ模範的なクラスタは、1 つのプールに対して 10 万個の配置グループを持つことになります。同じ CRUSH 階層とルールセットにマップされた各プールは、例示的なクラスターにさらに 10 万の配置グループを作成します。一方、namespace にオブジェクトを書き込むと、別のプールの計算オーバーヘッドを排除して、namespace をオブジェクト名に関連付けられます。ユーザーまたはユーザーセットに個別のプールを作成するのではなく、名前空間を使用できます。
現時点では、librados
のみを使用できます。