Skip to content

Commit 5947d0d

Browse files
author
Bob Grabar
committed
DOCS-699 authentication on sharded clusters
1 parent d0fb49c commit 5947d0d

File tree

2 files changed

+123
-46
lines changed

2 files changed

+123
-46
lines changed

source/administration/sharded-clusters.txt

Lines changed: 110 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -286,59 +286,125 @@ To route a query to a :term:`cluster <sharded cluster>`,
286286
Sharded Cluster Security Considerations
287287
---------------------------------------
288288

289-
.. note::
289+
MongoDB controls access to :term:`sharded clusters <sharded cluster>`
290+
through key files that store authentication information. The components
291+
of sharded clusters use key files when authenticating to each other. You
292+
create key files and then point your :program:`mongos` and
293+
:program:`mongod` instances to the files, as described later in this
294+
section.
295+
296+
In addition to the MongoDB security described in this section, you
297+
should run your sharded clusters only in trusted networking environments
298+
that control access to the cluster using network rules. Your networking
299+
environments should use restrictions that ensure only known traffic
300+
reaches your :program:`mongos` and :program:`mongod` instances.
301+
302+
This section describes authentication specific to sharded clusters. For
303+
information on authentication across MongoDB, see
304+
:ref:`security-authentication`.
305+
306+
Access Control Privileges in Sharded Clusters
307+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
308+
309+
In sharded clusters, MongoDB provides separate administrative privileges
310+
for the sharded cluster and for each shard. Aside from that, the
311+
available privileges are the same as for any MongoDB instance, as
312+
described in :ref:`security-authentication`.
313+
314+
For sharded clusters, MongoDB provides these separate administrative privileges:
315+
316+
- Administrative privileges for the sharded cluster. These privileges
317+
provide read-and-write access to the clusters's :term:`admin <admin
318+
database>`, which lets the user run all administrative commands.
319+
Administrative privileges also give the user read-and-write access to
320+
all the cluster's databases.
321+
322+
The credentials for administrative privileges on the cluster reside on
323+
the config servers. To receive admin access to the cluster, you must
324+
authenticate a session while connected to a :program:`mongos` instance
325+
using the admin database.
326+
327+
- Administrative privileges for an individual shard. A shard is a
328+
:program:`mongod` instance for which sharding has been enabled. Each
329+
shard has its own admin database that stores administrative
330+
credentials and access for that shard only. These credentials are
331+
*completely* distinct from the cluster-wide administrative
332+
credentials.
333+
334+
As with all :program:`mongod` instances, MongoDB provides two types of
335+
administrative privileges for a shard:
336+
337+
- Normal administrative privileges, which provide read-and-write
338+
access to the admin database and access to all administrative
339+
commands, and which provide read-and-write accees to all other
340+
databases on that shard.
341+
342+
- Read-only administrative privileges, which provide read-only access
343+
to the admin database and to all other databases on that shard.
344+
345+
Also, as with all :program:`mongod` instances, a MongoDB sharded cluster
346+
provides the following non-administrative user privileges:
347+
348+
- Normal privileges, which provide read-and-write access to a specific
349+
database. Users with normal privilege can add users to the database.
350+
351+
- Read-only privileges, which provide read-only access to a specific
352+
database.
290353

291-
You should always run all :program:`mongod` components in trusted
292-
networking environments that control access to the cluster using
293-
network rules and restrictions to ensure that only known traffic
294-
reaches your :program:`mongod` and :program:`mongos` instances.
354+
For more information on privileges, see :ref:`security-authentication`.
295355

296-
.. warning:: Limitations
356+
Enable Authentication in a Sharded Cluster
357+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
297358

298-
.. versionchanged:: 2.2
299-
Read only authentication is fully supported in shard
300-
clusters. Previously, in version 2.0, sharded clusters would not
301-
enforce read-only limitations.
359+
.. versionadded:: 2.0
360+
Support for authentication with sharded clusters.
302361

303-
.. versionchanged:: 2.0
304-
Sharded clusters support authentication. Previously, in version
305-
1.8, sharded clusters will not support authentication and access
306-
control. You must run your sharded systems in trusted
307-
environments.
362+
To control access to a sharded cluster, you create key files and then
363+
set the :setting:`keyFile` option on *all* components of the sharded
364+
cluster (all :program:`mongos` instances, all config server
365+
:program:`mongod` instances, and all shard :program:`mongod` instances). The content of
366+
the key file is arbitrary but must be the same on all cluster members.
308367

309-
To control access to a sharded cluster, you must set the
310-
:setting:`keyFile` option on all components of the sharded cluster. Use
311-
the :option:`--keyFile <mongos --keyFile>` run-time option or the
312-
:setting:`keyFile` configuration option for all :program:`mongos`,
313-
configuration instances, and shard :program:`mongod` instances.
368+
To enable authentication, do the following:
314369

315-
There are two classes of security credentials in a sharded cluster:
316-
credentials for "admin" users (i.e. for the :term:`admin database`) and
317-
credentials for all other databases. These credentials reside in
318-
different locations within the cluster and have different roles:
370+
1. Generate a key file to store authentication information, as described
371+
in :ref:`generate-key-file`.
319372

320-
- Admin database credentials reside on the config servers, to receive
321-
admin access to the cluster you *must* authenticate a session while
322-
connected to a :program:`mongos` instance using the :term:`admin
323-
database`.
373+
#. On each component in the sharded cluster, enable authentication by
374+
doing one of the following:
324375

325-
- Each shard has its own :term:`admin database`, which stores
326-
administrative credentials and access for that shard only.
376+
- In the configuration file, set the :setting:`keyFile` option to the
377+
key file's path and then start the component.
327378

328-
- Other database credentials reside on the *primary* shard for the
329-
database.
379+
The following is an example :setting:`keyFile` option and path:
330380

331-
This means that you *can* authenticate to these users and databases
332-
while connected directly to the *primary* shard for a database. You
333-
**cannot** authenticate to a database in a sharded cluster that is not
334-
the primary for that database. However, for clarity and consistency
335-
all interactions between the client and the database should use a
336-
:program:`mongos` instance.
381+
.. code-block:: cfg
337382

338-
.. note::
383+
keyFile = /srv/mongodb/keyfile
384+
385+
- When starting the component, set :option:`--keyFile <mongos --keyFile>` option,
386+
which is an option for both :program:`mongos` instances and
387+
:program:`mongod` instances. Set the :option:`--keyFile <mongos --keyFile>`
388+
to the key file's path.
389+
390+
.. note:: The :setting:`keyFile` setting implies :setting:`auth`, which
391+
means in most cases you do not need to set :setting:`auth`.
392+
393+
#. Add the first administrative user and then add subsequent users. See
394+
:ref:`control-access-add-users`.
395+
396+
Access a Sharded Cluster for which Authentication is Enabled
397+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
398+
399+
To access a sharded cluster as an authenticated admin user, see
400+
:ref:`control-access-admin-access`.
401+
402+
To access a sharded cluster as an authenticated, non-admin user, see
403+
either of the following:
404+
405+
- :dbcommand:`authenticate`
406+
407+
- :method:`db.auth()`
339408

340-
Individual shards can store administrative credentials to their
341-
instance, which only permit access to a single shard. MongoDB
342-
stores these credentials in the shards' :term:`admin databases
343-
<admin database>` and these credentials are *completely* distinct
344-
from the cluster-wide administrative credentials.
409+
To terminate an authenticated session, see the :dbcommand:`logout`
410+
command.

source/tutorial/control-access-to-mongodb-with-authentication.txt

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,10 @@ authentication and managing a MongoDB deployment with authentication.
2020
:option:`--keyFile <mongod --keyFile>` options on the command
2121
line.
2222

23-
Adding Users
24-
------------
23+
.. _control-access-add-users:
24+
25+
Add Users
26+
---------
2527

2628
When setting up authentication for the first time you must either:
2729

@@ -100,6 +102,8 @@ the following sequence of operations:
100102
Replace ``<username>`` and ``<password>`` with the credentials for
101103
this user.
102104

105+
.. _control-access-admin-access:
106+
103107
Administrative Access in MongoDB
104108
--------------------------------
105109

@@ -223,9 +227,16 @@ authentication with specific MongoDB deployments:
223227
- :ref:`replica-set-security`
224228
- :ref:`sharding-security`
225229

230+
.. _generate-key-file:
231+
226232
Generate a Key File
227233
-------------------
228234

235+
The key file must be less one kilobyte in size and may only contain
236+
characters in the base64 set. The key file must not have group or "world"
237+
permissions on UNIX systems. Key file permissions are not checked on
238+
Windows systems.
239+
229240
Use the following command at the system shell to generate pseudo-random
230241
content for a key file:
231242

0 commit comments

Comments
 (0)