Skip to content

Commit 7222591

Browse files
authored
(DOCSP-45900) Revises per explicit edits from v1 review. (#53)
* (DOCSP-45900) Revises per explicit edits from v1 review. * Revises per copy review.
1 parent 10083e9 commit 7222591

File tree

1 file changed

+157
-73
lines changed

1 file changed

+157
-73
lines changed

source/auth.txt

Lines changed: 157 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -43,57 +43,6 @@ authentication is distinct from authorization:
4343
user's access to database resources and operations. Outside of role
4444
assignments, the user has no access to the system.
4545

46-
{+service+} Features and Recommendations for Authorization
47-
----------------------------------------------------------
48-
49-
Features
50-
~~~~~~~~
51-
52-
You must implement |service|' robust Role-Based Access Control (RBAC)
53-
to effectively manage access across all resources. |service| includes
54-
built-in roles that provide different levels of access commonly needed
55-
in a database system. You must assign and customize roles for all
56-
users to ensure security and flexibility. By utilizing fine-grained
57-
custom or built-in roles with granular scoping to address specific
58-
needs, you can exert precise control over operations on |service|
59-
resources. Always create custom roles following the principle of least
60-
privilege and assign those roles to the users.
61-
62-
Additionally, by integrating |service| with identity providers to map
63-
identity provider groups to |service| roles, you can streamline access
64-
management and ensure secure, organized role assignments throughout the
65-
platform.
66-
67-
Recommendations for {+atlas-ui+} and {+atlas-admin-api+}
68-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
69-
70-
You can assign users and API keys to predefined roles, specifying the
71-
actions they can perform within |service| organizations, projects, or
72-
both. Use Identity Federation to manage access by linking your identity
73-
provider groups to |service| roles through group-role mappings.
74-
75-
To learn more, see :ref:`user-roles`.
76-
77-
Recommendations for Database
78-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
79-
80-
Workforce and workload users can be assigned fine-grained database
81-
roles, predefined or custom, with permissions tailored to specific
82-
projects or individual {+clusters+}. In staging and production
83-
environments, use Identity Federation to streamline access management by
84-
linking your Identity Provider (IdP) to |service|. By configuring
85-
'Group Membership' in your :abbr:`IdP (Identity Provider)`, you can map
86-
groups to database users, simplifying access control within the
87-
:abbr:`IdP (Identity Provider)`. However, for workload identities, we
88-
recommend assigning roles directly using the 'users' claim instead of
89-
'groups.' In development and test environments, assign users the
90-
``readWriteAny`` role.
91-
92-
To learn more, see the following:
93-
94-
- :ref:`mongodb-users-roles-and-privileges`
95-
- :ref:`mongodb-roles`
96-
9746
{+service+} Features and Recommendations for Authentication
9847
-----------------------------------------------------------
9948

@@ -103,16 +52,14 @@ Features
10352
|service-fullname| supports a variety of authentication methods to
10453
ensure robust security.
10554

106-
- For user authentication, |service| integrates seamlessly with identity
55+
- The best practice for user authentication, |service| integrates
56+
seamlessly with identity
10757
providers (IdP) using federated authentication through OpenID Connect
10858
(OIDC) or SAML 2.0, and enhances security with Multi-Factor
109-
Authentication (MFA). You can also configure username-password
110-
authentication by using SCRAM-SHA.
59+
Authentication (MFA) ensuring a modern authentication and security posture.
11160
- For workload authentication, |service| supports OAuth2.0, allowing
112-
seamless compatibility with authorization services. Additionally, to
113-
meet diverse technical needs, you can utilize x.509 certificates for
114-
authentication, following best practices such as credential rotation
115-
to maintain a secure environment.
61+
seamless compatibility with authorization services and integration
62+
into your federated :abbr:`IdP (Identity Provider)`.
11663

11764
|service| requires all clients to authenticate to access {+atlas-ui+},
11865
|service| database, and {+atlas-admin-api+}. The following
@@ -123,17 +70,25 @@ following authentication mechanisms:
12370
Recommendations for Deployment
12471
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
12572

126-
In a shared deployment, multiple users and applications share the same
127-
physical resources (CPU, memory, storage) on the {+cluster+}. If you use
128-
shared deployment, you must ensure strong isolation and security
129-
measures to prevent unauthorized access to data and resources. Use this
130-
model only for cost efficiency and collaboration in development and test
131-
environments.
132-
13373
In a dedicated deployment, resources are allocated exclusively. We
13474
recommend this as it provides high security and performance. However,
13575
you must configure strict access controls.
13676

77+
We recommend using a dedicated {+cluster+} deployment for each
78+
application as this ensures that resources are allocated exclusively
79+
to a single access point and provides isolation for both security and
80+
performance.
81+
82+
While a shared deployment model--where multiple applications and
83+
development teams share a multi-tenant {+cluster+}--can increase the
84+
cost efficiency of the deployment, it requires tight coordination
85+
between the applications' data models and access patterns. These must
86+
be integrated into the provisioning process of the {+cluster+} to
87+
ensure that fine-grained custom roles are programmatically configured,
88+
providing strong isolation between the access of different applications
89+
and teams. As a result, this pattern is generally used
90+
in development environments where the risk of exposure is lower.
91+
13792
Recommendations for {+atlas-ui+}
13893
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
13994

@@ -164,10 +119,10 @@ To learn more, see :ref:`atlas-federated-authentication`.
164119
Multi-Factor authentication
165120
```````````````````````````
166121

167-
|service| supports authentication using credentials and :abbr:`MFA (Multi-Factor
168-
Authentication)` for enhanced security. When :abbr:`MFA (Multi-Factor
169-
Authentication)` is enabled, |service| requires two forms of
170-
identification:
122+
For any human user that has access to the |service| control plane, we recommend
123+
that you require :abbr:`MFA (Multi-Factor Authentication)` for enhanced security.
124+
When :abbr:`MFA (Multi-Factor Authentication)` is enabled, |service| requires
125+
two forms of identification:
171126

172127
- The user's credentials
173128
- One of the following recommended factors:
@@ -197,8 +152,6 @@ times. A user can be created for the following periods:
197152
- 1 day
198153
- 1 week
199154

200-
You can create these types of users for temporary access.
201-
202155
Workforce Identity Federation
203156
`````````````````````````````
204157

@@ -223,6 +176,9 @@ OAuth 2.0-compliant service. You can also use |aws| workload federation
223176
through |aws| |iam| roles. These authentication mechanisms simplify
224177
management and enhance security by allowing for passwordless access to
225178
the |service| database.
179+
We recommend workload identity federation for all applications running in
180+
production. You shouldn't allow human users to connect except in the most
181+
extreme break-glass emergency scenarios.
226182

227183
To learn more, see the following:
228184

@@ -262,12 +218,140 @@ Recommendations for {+atlas-admin-api+}
262218
|service| provides |api| key-based authentication to securely manage
263219
programmatic access. It uses |http| Digest to protect requests, where
264220
the |api| public key functions as the username, and the corresponding
265-
private key serves as the password. To further enhance security and
221+
private key serves as the password.
222+
You should store these keys in a third party secrets management system,
223+
such as |aws| or {+vault+}. To learn how to securely store these
224+
keys in Vault, see the blog
225+
`Manage MongoDB Atlas Database Secrets in HashiCorp Vault <https://www.mongodb.com/blog/post/manage-atlas-database-secrets-hashicorp-vault>`__.
226+
227+
To further enhance security and
266228
minimize the risk of unauthorized access, follow best practices for
267-
rotating |api| keys regularly.
229+
rotating |api| keys regularly. To learn how to rotate these keys with
230+
{+vault+}, see
231+
`the Hashicorp documentation <https://developer.hashicorp.com/vault/docs/secrets/mongodbatlas>`__.
268232

269233
To learn more, see :ref:`api-authentication`.
270234

235+
{+service+} Features and Recommendations for Authorization
236+
----------------------------------------------------------
237+
238+
Features
239+
~~~~~~~~
240+
241+
You must implement |service|'s robust Role-Based Access Control (RBAC)
242+
to effectively manage access across all resources. |service| includes
243+
built-in roles that provide different levels of access commonly needed
244+
for managing the |service| control plane. For connecting to |service|
245+
{+clusters+} in the data plane, we recommend using database
246+
fine-grained custom roles to provide granular scoping based on the access
247+
to the data access required for the role to perform its function.
248+
This approach enables you to follow the principle of least privilege.
249+
250+
Additionally, by integrating |service| with a federated identity provider,
251+
you can map identity provider groups automatically to |service| roles.
252+
This streamlines access management and ensures secure and organized role
253+
assignments throughout the platform. You can grant access programmatically
254+
based on the provisioning process of your orchestration layer.
255+
256+
In general, it is a best practice to always restrict access to upper
257+
environments to only programmatic service accounts with scripts that
258+
are tested for security and deterministic outcomes. Human access should
259+
only be allowed in lower environments during development and testing.
260+
261+
Recommendations for {+atlas-ui+} and {+atlas-admin-api+} (Control Plane)
262+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
263+
264+
You can assign users and API keys to predefined roles, specifying the
265+
actions they can perform within |service| organizations, projects, or
266+
both. Use Identity Federation to manage access by linking your identity
267+
provider groups to |service| roles through group-role mappings.
268+
269+
We recommend that you use a modern federated Identity Provider (IdP) that
270+
provides SSO, OIDC, and SAML login such as Azure Entra ID, Okta, or Ping
271+
as this makes the authorization process more secure and supports the
272+
flexibility needed to programmatically assign :abbr:`IdP (Identity Provider)`
273+
groups to |service| roles. You should restrict your company's domain from
274+
preventing users from logging into |service| when they are not authorized
275+
for access, which you can do by following the procedure in
276+
`Manage Domain Mapping for Federated Authentication <https://www.mongodb.com/docs/atlas/security/manage-domain-mapping/>`__. From here, we recommend that you map your
277+
:abbr:`IdP (Identity Provider)` groups to |service| roles as shown in
278+
`Role Mapping Process <https://www.mongodb.com/docs/atlas/security/manage-role-mapping/#role-mapping-process>`__.
279+
280+
If you have followed the standard |service| hierarchy of a single billing
281+
organization with a linked organization for each {+BU+} or department, then
282+
you should restrict organization users to the operations or platform team admins.
283+
In contrast, you should assign project roles to the development or product teams
284+
responsible for building applications. Only programmatic access should be
285+
allowed in upper environments. The following recommendations for the most
286+
commonly used roles can serve as a general guideline:
287+
288+
* The ``Organization Owner`` role should be heavily restricted and not assigned
289+
to a human, as it has the ability to change organization-wide settings and delete
290+
configurations. This role should be assigned to a service account which you use
291+
only to initially set up and configure the organization. Minimize configuration
292+
changes after the initial creation.
293+
294+
* The ``Organization Member`` role should be for admins on the operations and
295+
platform team that can view settings and configuration for the organization.
296+
297+
* The ``Organization Project Creator`` role should be a programmatic service
298+
account used to create projects on behalf of new applications for development
299+
and product teams.
300+
301+
* The ``Organization Billing Admin`` role should be a programmatic service
302+
account used to pull invoices programmatically from the Billing API
303+
and feed them into your FinOps tool. This same service account should have
304+
access to all linked organizations for which it is responsible for reporting usage.
305+
306+
* The ``Project Owner`` role should be used for governance enforced by the
307+
operations and provisioning team. Assign this role to a programmatic service
308+
account, as it has the ability to create and delete {+clusters+}. For sandbox
309+
environments, you may consider granting a user ``Project Owner`` access to
310+
enable them to quickly provision {+clusters+} for testing code and use cases
311+
without going through the orchestration deployment pipeline.
312+
313+
* In lower environments, use the ``Project Data Access Admin`` role to
314+
grant access to the development team building the application so they can
315+
access the query and performance metrics of the {+cluster+} during
316+
development and testing. This access allows them to debug data issues
317+
with the Data Explorer.
318+
Don't allow this role in production environments. It has the
319+
ability to view and edit data, including creating and dropping databases,
320+
collections, and indexes on the {+cluster+}, which is useful for rapid
321+
experimentation and development. If you are uncomfortable giving
322+
development teams this level of access in the development environment, you
323+
can grant them read-only access to the {+cluster+}\'s data and performance
324+
statistics with the ``Project Data Access Read Only`` role.
325+
326+
To learn more, see :ref:`user-roles`.
327+
328+
Recommendations for Database
329+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
330+
331+
Workforce and workload users can be assigned fine-grained database
332+
roles, predefined or custom, with permissions tailored to specific
333+
projects or individual {+clusters+}. In staging and production
334+
environments, we recommend using Identity Federation to streamline
335+
access management by linking your Identity Provider (IdP) to |service|
336+
for a more modern and
337+
streamlined authentication and authorization flow for data access.
338+
339+
Only allow workload authentication in production. You can leverage workforce
340+
authentication during development and in lower environments. By configuring
341+
'Group Membership' in your :abbr:`IdP (Identity Provider)`, you can map
342+
groups to database users, simplifying access control within the
343+
:abbr:`IdP (Identity Provider)`. However, for workload identities, we
344+
recommend assigning roles directly using the 'users' claim instead of
345+
'groups.' In development and test environments, you can default to the
346+
predefined ``readWriteAny`` role to simplify the development and testing process. When moving the application to higher environments, you should build a custom
347+
role to restrict the access that the application server has based on the
348+
principle of least privilege.
349+
350+
To learn more, see the following:
351+
352+
- :ref:`mongodb-users-roles-and-privileges`
353+
- :ref:`mongodb-roles`
354+
271355
Examples
272356
--------
273357

0 commit comments

Comments
 (0)