From e3575bb72f307a27d49fedf3692ca661e3d613a5 Mon Sep 17 00:00:00 2001 From: Zac Dover <zac.dover@proton.me> Date: Tue, 18 Apr 2023 22:59:09 +0200 Subject: [PATCH] doc/rados: edit user-management (2 of x) Line-edit doc/rados/user-management.rst (2 of x). Some internal references had to be removed, but these will be repaired when the next part of this file is updated in a future PR. Co-authored-by: Anthony D'Atri <anthony.datri@gmail.com> Signed-off-by: Zac Dover <zac.dover@proton.me> --- doc/rados/operations/user-management.rst | 239 ++++++++++++----------- 1 file changed, 122 insertions(+), 117 deletions(-) diff --git a/doc/rados/operations/user-management.rst b/doc/rados/operations/user-management.rst index d03c33376cd..4220ff11ba2 100644 --- a/doc/rados/operations/user-management.rst +++ b/doc/rados/operations/user-management.rst @@ -337,45 +337,53 @@ Pool A pool is a logical partition where users store data. In Ceph deployments, it is common to create a pool as a logical partition for -similar types of data. For example, when deploying Ceph as a backend for +similar types of data. For example, when deploying Ceph as a back end for OpenStack, a typical deployment would have pools for volumes, images, backups -and virtual machines, and users such as ``client.glance``, ``client.cinder``, -etc. +and virtual machines, and such users as ``client.glance`` and ``client.cinder``. Application Tags ---------------- Access may be restricted to specific pools as defined by their application metadata. The ``*`` wildcard may be used for the ``key`` argument, the -``value`` argument, or both. ``all`` is a synonym for ``*``. +``value`` argument, or both. The ``all`` tag is a synonym for ``*``. Namespace --------- -Objects within a pool can be associated to a namespace--a logical group of +Objects within a pool can be associated to a namespace: that is, to a logical group of objects within the pool. A user's access to a pool can be associated with a -namespace such that reads and writes by the user take place only within the -namespace. Objects written to a namespace within the pool can only be accessed +namespace so that reads and writes by the user can take place only within the +namespace. Objects written to a namespace within the pool can be accessed only by users who have access to the namespace. .. note:: Namespaces are primarily useful for applications written on top of - ``librados`` where the logical grouping can alleviate the need to create - different pools. Ceph Object Gateway (in releases beginning with - Luminous) uses namespaces for various - metadata objects. + ``librados``. In such situations, the logical grouping provided by + namespaces can obviate the need to create different pools. In Luminous and + later releases, Ceph Object Gateway uses namespaces for various metadata + objects. -The rationale for namespaces is that pools can be a computationally expensive -method of segregating data sets for the purposes of authorizing separate sets -of users. For example, a pool should have ~100 placement groups per OSD. So an -exemplary cluster with 1000 OSDs would have 100,000 placement groups for one -pool. Each pool would create another 100,000 placement groups in the exemplary -cluster. By contrast, writing an object to a namespace simply associates the -namespace to the object name with out the computational overhead of a separate -pool. Rather than creating a separate pool for a user or set of users, you may -use a namespace. **Note:** Only available using ``librados`` at this time. +The rationale for namespaces is this: namespaces are relatively less +computationally expensive than pools, which (pools) can be a computationally +expensive method of segregating data sets between different authorized users. -Access may be restricted to specific RADOS namespaces using the ``namespace`` -capability. Limited globbing of namespaces is supported; if the last character +For example, a pool ought to host approximately 100 placement-group replicas +per OSD. This means that a cluster with 1000 OSDs and three 3R replicated pools +would have (in a single pool) 100,000 placement-group replicas, and that means +that it has 33,333 Placement Groups. + +By contrast, writing an object to a namespace simply associates the namespace +to the object name without incurring the computational overhead of a separate +pool. Instead of creating a separate pool for a user or set of users, you can +use a namespace. + +.. note:: + + Namespaces are available only when using ``librados``. + + +Access may be restricted to specific RADOS namespaces by use of the ``namespace`` +capability. Limited globbing of namespaces (that is, use of wildcards (``*``)) is supported: if the last character of the specified namespace is ``*``, then access is granted to any namespace starting with the provided argument. @@ -383,64 +391,60 @@ Managing Users ============== User management functionality provides Ceph Storage Cluster administrators with -the ability to create, update and delete users directly in the Ceph Storage +the ability to create, update, and delete users directly in the Ceph Storage Cluster. -When you create or delete users in the Ceph Storage Cluster, you may need to -distribute keys to clients so that they can be added to keyrings. See `Keyring -Management`_ for details. +When you create or delete users in the Ceph Storage Cluster, you might need to +distribute keys to clients so that they can be added to keyrings. For details, see `Keyring +Management`_. -List Users ----------- +Listing Users +------------- -To list the users in your cluster, execute the following: +To list the users in your cluster, run the following command: .. prompt:: bash $ - ceph auth ls + ceph auth ls -Ceph will list out all users in your cluster. For example, in a two-node -exemplary cluster, ``ceph auth ls`` will output something that looks like -this:: +Ceph will list all users in your cluster. For example, in a two-node +cluster, ``ceph auth ls`` will provide an output that resembles the following:: - installed auth entries: + installed auth entries: - osd.0 - key: AQCvCbtToC6MDhAATtuT70Sl+DymPCfDSsyV4w== - caps: [mon] allow profile osd - caps: [osd] allow * - osd.1 - key: AQC4CbtTCFJBChAAVq5spj0ff4eHZICxIOVZeA== - caps: [mon] allow profile osd - caps: [osd] allow * - client.admin - key: AQBHCbtT6APDHhAA5W00cBchwkQjh3dkKsyPjw== - caps: [mds] allow - caps: [mon] allow * - caps: [osd] allow * - client.bootstrap-mds - key: AQBICbtTOK9uGBAAdbe5zcIGHZL3T/u2g6EBww== - caps: [mon] allow profile bootstrap-mds - client.bootstrap-osd - key: AQBHCbtT4GxqORAADE5u7RkpCN/oo4e5W0uBtw== - caps: [mon] allow profile bootstrap-osd + osd.0 + key: AQCvCbtToC6MDhAATtuT70Sl+DymPCfDSsyV4w== + caps: [mon] allow profile osd + caps: [osd] allow * + osd.1 + key: AQC4CbtTCFJBChAAVq5spj0ff4eHZICxIOVZeA== + caps: [mon] allow profile osd + caps: [osd] allow * + client.admin + key: AQBHCbtT6APDHhAA5W00cBchwkQjh3dkKsyPjw== + caps: [mds] allow + caps: [mon] allow * + caps: [osd] allow * + client.bootstrap-mds + key: AQBICbtTOK9uGBAAdbe5zcIGHZL3T/u2g6EBww== + caps: [mon] allow profile bootstrap-mds + client.bootstrap-osd + key: AQBHCbtT4GxqORAADE5u7RkpCN/oo4e5W0uBtw== + caps: [mon] allow profile bootstrap-osd - -Note that the ``TYPE.ID`` notation for users applies such that ``osd.0`` is a -user of type ``osd`` and its ID is ``0``, ``client.admin`` is a user of type -``client`` and its ID is ``admin`` (i.e., the default ``client.admin`` user). -Note also that each entry has a ``key: <value>`` entry, and one or more +Note that, according to the ``TYPE.ID`` notation for users, ``osd.0`` is a +user of type ``osd`` and an ID of ``0``, and ``client.admin`` is a user of type +``client`` and an ID of ``admin`` (that is, the default ``client.admin`` user). +Note too that each entry has a ``key: <value>`` entry, and also has one or more ``caps:`` entries. -You may use the ``-o {filename}`` option with ``ceph auth ls`` to -save the output to a file. +To save the output of ``ceph auth ls`` to a file, use the ``-o {filename}`` option. -Get a User ----------- +Getting a User +-------------- -To retrieve a specific user, key and capabilities, execute the -following: +To retrieve a specific user, key, and capabilities, run the following command: .. prompt:: bash $ @@ -452,8 +456,7 @@ For example: ceph auth get client.admin -You may also use the ``-o {filename}`` option with ``ceph auth get`` to -save the output to a file. Developers may also execute the following: +To save the output of ``ceph auth get`` to a file, use the ``-o {filename}`` option. Developers may also run the following command: .. prompt:: bash $ @@ -461,42 +464,47 @@ save the output to a file. Developers may also execute the following: The ``auth export`` command is identical to ``auth get``. -Add a User ----------- +Adding a User +------------- -Adding a user creates a username (i.e., ``TYPE.ID``), a secret key and -any capabilities included in the command you use to create the user. +Adding a user creates a user name (that is, ``TYPE.ID``), a secret key, and +any capabilities specified in the command that creates the user. -A user's key enables the user to authenticate with the Ceph Storage Cluster. +A user's key allows the user to authenticate with the Ceph Storage Cluster. The user's capabilities authorize the user to read, write, or execute on Ceph -monitors (``mon``), Ceph OSDs (``osd``) or Ceph Metadata Servers (``mds``). +monitors (``mon``), Ceph OSDs (``osd``) or Ceph Metadata Servers (``mds``). There are a few ways to add a user: - ``ceph auth add``: This command is the canonical way to add a user. It - will create the user, generate a key and add any specified capabilities. + will create the user, generate a key, and add any specified capabilities. - ``ceph auth get-or-create``: This command is often the most convenient way to create a user, because it returns a keyfile format with the user name (in brackets) and the key. If the user already exists, this command - simply returns the user name and key in the keyfile format. You may use the - ``-o {filename}`` option to save the output to a file. + simply returns the user name and key in the keyfile format. To save the output to + a file, use the ``-o {filename}`` option. - ``ceph auth get-or-create-key``: This command is a convenient way to create - a user and return the user's key (only). This is useful for clients that - need the key only (e.g., libvirt). If the user already exists, this command - simply returns the key. You may use the ``-o {filename}`` option to save the - output to a file. + a user and return the user's key and nothing else. This is useful for clients that + need only the key (for example, libvirt). If the user already exists, this command + simply returns the key. To save the output to + a file, use the ``-o {filename}`` option. -When creating client users, you may create a user with no capabilities. A user +It is possible, when creating client users, to create a user with no capabilities. A user with no capabilities is useless beyond mere authentication, because the client -cannot retrieve the cluster map from the monitor. However, you can create a -user with no capabilities if you wish to defer adding capabilities later using -the ``ceph auth caps`` command. +cannot retrieve the cluster map from the monitor. However, you might want to create a user +with no capabilities and wait until later to add capabilities to the user by using the ``ceph auth caps`` comand. A typical user has at least read capabilities on the Ceph monitor and -read and write capability on Ceph OSDs. Additionally, a user's OSD permissions -are often restricted to accessing a particular pool: +read and write capabilities on Ceph OSDs. A user's OSD permissions +are often restricted so that the user can access only one particular pool. +In the following example, the commands (1) add a client named ``john`` that has read capabilities on the Ceph monitor +and read and write capabilities on the pool named ``liverpool``, (2) authorize a client named ``paul`` to have read capabilities on the Ceph monitor and +read and write capabilities on the pool named ``liverpool``, (3) authorize a client named ``george`` to have read capabilities on the Ceph monitor and +read and write capabilities on the pool named ``liverpool`` and use the keyring named ``george.keyring`` to make this authorization, and (4) authorize +a client named ``ringo`` to have read capabilities on the Ceph monitor and read and write capabilities on the pool named ``liverpool`` and use the key +named ``ringo.key`` to make this authorization: .. prompt:: bash $ @@ -505,21 +513,19 @@ are often restricted to accessing a particular pool: ceph auth get-or-create client.george mon 'allow r' osd 'allow rw pool=liverpool' -o george.keyring ceph auth get-or-create-key client.ringo mon 'allow r' osd 'allow rw pool=liverpool' -o ringo.key - -.. important:: If you provide a user with capabilities to OSDs, but you DO NOT - restrict access to particular pools, the user will have access to ALL - pools in the cluster! +.. important:: Any user that has capabilities on OSDs will have access to ALL pools in the cluster + unless that user's access has been restricted to a proper subset of the pools in the cluster. .. _modify-user-capabilities: -Modify User Capabilities ------------------------- +Modifying User Capabilities +--------------------------- -The ``ceph auth caps`` command allows you to specify a user and change the +The ``ceph auth caps`` command allows you to specify a user and change that user's capabilities. Setting new capabilities will overwrite current capabilities. -To view current capabilities run ``ceph auth get USERTYPE.USERID``. To add -capabilities, you should also specify the existing capabilities when using the form: +To view current capabilities, run ``ceph auth get USERTYPE.USERID``. +To add capabilities, run a command of the following form (and be sure to specify the existing capabilities): .. prompt:: bash $ @@ -534,10 +540,10 @@ For example: ceph auth caps client.paul mon 'allow rw' osd 'allow rwx pool=liverpool' ceph auth caps client.brian-manager mon 'allow *' osd 'allow *' -See `Authorization (Capabilities)`_ for additional details on capabilities. +For additional details on capabilities, see `Authorization (Capabilities)`_. -Delete a User -------------- +Deleting a User +--------------- To delete a user, use ``ceph auth del``: @@ -545,34 +551,34 @@ To delete a user, use ``ceph auth del``: ceph auth del {TYPE}.{ID} -Where ``{TYPE}`` is one of ``client``, ``osd``, ``mon``, or ``mds``, -and ``{ID}`` is the user name or ID of the daemon. +Here ``{TYPE}`` is either ``client``, ``osd``, ``mon``, or ``mds``, +and ``{ID}`` is the user name or the ID of the daemon. -Print a User's Key ------------------- +Printing a User's Key +--------------------- -To print a user's authentication key to standard output, execute the following: +To print a user's authentication key to standard output, run the following command: .. prompt:: bash $ ceph auth print-key {TYPE}.{ID} -Where ``{TYPE}`` is one of ``client``, ``osd``, ``mon``, or ``mds``, -and ``{ID}`` is the user name or ID of the daemon. +Here ``{TYPE}`` is either ``client``, ``osd``, ``mon``, or ``mds``, +and ``{ID}`` is the user name or the ID of the daemon. -Printing a user's key is useful when you need to populate client -software with a user's key (e.g., libvirt): +When it is necessary to populate client software with a user's key (as in the case of libvirt), +you can print the user's key by running the following command: .. prompt:: bash $ mount -t ceph serverhost:/ mountpoint -o name=client.user,secret=`ceph auth print-key client.user` -Import a User(s) +Importing a User ---------------- To import one or more users, use ``ceph auth import`` and -specify a keyring: +specify a keyring as follows: .. prompt:: bash $ @@ -584,9 +590,8 @@ For example: sudo ceph auth import -i /etc/ceph/ceph.keyring - -.. note:: The Ceph storage cluster will add new users, their keys and their - capabilities and will update existing users, their keys and their +.. note:: The Ceph storage cluster will add new users, their keys, and their + capabilities and will update existing users, their keys, and their capabilities. Keyring Management @@ -659,11 +664,11 @@ ownership and access. Add a User to a Keyring ----------------------- -When you `Add a User`_ to the Ceph Storage Cluster, you can use the `Get a -User`_ procedure to retrieve a user, key and capabilities and save the user to a +When you add a user to the Ceph Storage Cluster, you can use the Get a +User procedure to retrieve a user, key and capabilities and save the user to a keyring. -When you only want to use one user per keyring, the `Get a User`_ procedure with +When you only want to use one user per keyring, the Get a User procedure with the ``-o`` option will save the output in the keyring file format. For example, to create a keyring for the ``client.admin`` user, execute the following: @@ -684,7 +689,7 @@ For example: Create a User ------------- -Ceph provides the `Add a User`_ function to create a user directly in the Ceph +Ceph provides the Add a User function to create a user directly in the Ceph Storage Cluster. However, you can also create a user, keys and capabilities directly on a Ceph client keyring. Then, you can import the user to the Ceph Storage Cluster. For example: @@ -727,10 +732,10 @@ in the keyring to the user entry in the Ceph Storage Cluster: sudo ceph auth import -i /etc/ceph/ceph.keyring -See `Import a User(s)`_ for details on updating a Ceph Storage Cluster user +See Import a User(s) for details on updating a Ceph Storage Cluster user from a keyring. -You may also `Modify User Capabilities`_ directly in the cluster, store the +You may also Modify User Capabilities directly in the cluster, store the results to a keyring file; then, import the keyring into your main ``ceph.keyring`` file.