Skip to content

Commit 6f984e8

Browse files
authored
(DOCSP-44997) [Atlas Architecture] Second Draft: Auth Page (#85)
* (DOCSP-44997) Edits. * (DOCSP-44997) Edits.
1 parent 4a9a7c4 commit 6f984e8

File tree

1 file changed

+84
-58
lines changed

1 file changed

+84
-58
lines changed

source/auth.txt

Lines changed: 84 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ Authorization and Authentication
2020
:depth: 2
2121
:class: onecol
2222

23-
Authentication is the process of verifying the identity of a client.
24-
When access control (authorization) is enabled, |service| requires all
25-
clients to authenticate themselves in order to determine their access.
23+
Authentication is the process of verifying the identity of a user.
24+
|service| requires all users to authenticate themselves in order
25+
to determine their access.
2626

2727
Although authentication and authorization are closely connected,
2828
authentication is distinct from authorization:
@@ -52,16 +52,15 @@ Features
5252
|service-fullname| supports a variety of authentication methods to
5353
ensure robust security.
5454

55-
- The best practice for user authentication, |service| integrates
56-
seamlessly with identity
57-
providers (IdP) using federated authentication through OpenID Connect
58-
(OIDC) or SAML 2.0, and enhances security with Multi-Factor
59-
Authentication (MFA) ensuring a modern authentication and security posture.
55+
- The best practice for user authentication is utilizing |service|'s
56+
seamless integration with identity providers using federated authentication
57+
through OpenID Connect (OIDC) or SAML 2.0, and enhancing security with Multi-Factor
58+
Authentication (MFA) to ensure a modern authentication and security posture.
6059
- For workload authentication, |service| supports OAuth2.0, allowing
6160
seamless compatibility with authorization services and integration
6261
into your federated :abbr:`IdP (Identity Provider)`.
6362

64-
|service| requires all clients to authenticate to access {+atlas-ui+},
63+
|service| requires all users to authenticate to access {+atlas-ui+},
6564
|service| database, and {+atlas-admin-api+}. The following
6665
authentication methods for each |service| resource ensure that
6766
authentication is both secure and adaptable. |service| provides the
@@ -104,15 +103,13 @@ central identity provider. For UI access, |service| supports workforce
104103
identity federation using :abbr:`SAML (Security Assertion Markup
105104
Language)` 2.0. You can use any :abbr:`SAML (Security Assertion
106105
Markup Language)` compatible identity provider such as Okta, Microsoft
107-
Entra ID, or PingOne to enforce security policies such as password
106+
Entra ID, or Ping Identity to enforce security policies such as password
108107
complexity, credential rotation, and :abbr:`MFA (Multi-Factor
109108
Authentication)` within your identity provider. |service| also supports
110109
Google or Github account authentication.
111110

112-
{+atlas-ui+} manages user identities in a MongoDB-controlled Okta
113-
instance, encrypted and stored securely. You must also configure the IP
114-
access list to allow only connections from IP ranges that include your
115-
users and application servers.
111+
You must configure the IP access list in the {+atlas-ui+} to allow only connections
112+
from IP ranges that include your users and application servers.
116113

117114
To learn more, see :ref:`atlas-federated-authentication`.
118115

@@ -139,35 +136,29 @@ To learn more, see :ref:`atlas-enable-mfa`.
139136
Recommendations for |service| Database
140137
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
141138

142-
|service| supports the following options for |service| database
143-
authentication. In development and test environments, create a separate
144-
project with {+cluster+} and grant users ``Project Data Access
145-
Admin`` roles. In staging and production environments, we recommend
146-
granting only programmatic access by using :atlas:`Workforce Identity
147-
Federation </workforce-oidc/>`.
139+
|service| supports various database authentication mechanisms.
148140

149-
|service| also supports creating temporary database users
150-
that automatically expire after the predefined times. A user can be
151-
created for the following periods:
141+
To configure workforce (human user) access to your |service|
142+
database via tools such as {+mongodbsh+} and Compass,
143+
use :ref:`Workforce Identity Federation <oidc-authentication-workforce>` with {+oidc+}.
152144

153-
- 6 hours
154-
- 1 day
155-
- 1 week
145+
To configure workload (application) access to your |service|
146+
database using MongoDB drivers, use :ref:`Workload Identity Federation <oidc-authentication-workload>`,
147+
AWS-IAM authentication, or X.509 certificate authentication.
156148

157-
We recommend using a secrets manager like `HashiCorp Vault
158-
<https://developer.hashicorp.com/vault/docs/secrets/databases/mongodbatlas>`__
159-
to generate database credentials dynamically based on configured
160-
roles for |service| databases. To learn more, see :website:`Manage
161-
MongoDB Atlas Database Secrets in HashiCorp Vault
162-
</blog/post/manage-atlas-database-secrets-hashicorp-vault>`.
149+
We recommend :manual:`SCRAM </core/security-scram>`
150+
password authentication only for use in development or testing environments.
151+
152+
|Service| also supports creating temporary database users to configure just-in-time
153+
database access.
163154

164155
Workforce Identity Federation
165156
`````````````````````````````
166157

167158
Workforce Identity Federation allows you to manage all authentication to
168159
the |service| database through your identity provider. For database
169-
access, we recommend :abbr:`OIDC (OpenID Connect)`-compatible identity
170-
provider such as Okta, Microsoft Entra ID, or PingOne to enforce
160+
access, we recommend {+oidc+}-compatible identity
161+
providers such as Okta, Microsoft Entra ID, or Ping Identity to enforce
171162
security policies such as password complexity, credential rotation, and
172163
:abbr:`MFA (Multi-Factor Authentication)` within your identity provider.
173164

@@ -176,16 +167,17 @@ To learn more, see :ref:`oidc-authentication-workforce`.
176167
Workload Identity Federation
177168
````````````````````````````
178169

179-
Workload identity federation enables applications running in cloud
170+
Workload Identity Federation enables applications running in cloud
180171
environments like |aws|, |azure|, and Google Cloud to authenticate with
181172
|service| without the need to manage separate database user credentials.
182-
With workload identity federation, you can manage |service| database
173+
With Workload Identity Federation, you can manage |service| database
183174
users using |azure| Managed Identities, Google Service Accounts, or any
184175
OAuth 2.0-compliant service. You can also use |aws| workload federation
185176
through |aws| |iam| roles. These authentication mechanisms simplify
186177
management and enhance security by allowing for passwordless access to
187178
the |service| database.
188-
We recommend workload identity federation for all applications running in
179+
180+
We recommend Workload Identity Federation for all applications running in
189181
production. You shouldn't allow human users to connect except in the most
190182
extreme break-glass emergency scenarios.
191183

@@ -197,29 +189,64 @@ To learn more, see the following:
197189
X.509 Client Certificates and SCRAM
198190
```````````````````````````````````
199191

200-
We recommend that you leverage a third-party federated identity provider
201-
for accessing all aspects of the |service| control and data plane.
202-
|service| {+clusters+} do support :manual:`x.509
203-
</core/security-x.509/>` client certificates and :manual:`SCRAM
204-
</core/security-scram/>` for user authentication, but you should use these
205-
only if you don't have an identity provider for federation.
192+
We recommend that you use Workforce or Workload Identity Federation
193+
through an identity provider for security and ease of access to all aspects of the
194+
|service| control and data plane.
195+
196+
If you don't have an identity provider for federation, then
197+
|service| {+clusters+} also support X.509 client certificates for
198+
user authentication. X.509 certificates provide the security of mutual TLS,
199+
making them suitable for staging and production environments.
206200

207-
If you
208-
leverage x.509 or SCRAM authentication, we recommend that you use complex
209-
passwords and store credentials in a third-party secrets manager like
201+
|service| {+clusters+} also support SCRAM password authentication for user authentication,
202+
but we only recommend SCRAM for use in development and test environments.
203+
204+
If you leverage X.509 or SCRAM authentication, we recommend that you use
205+
third-party secrets manager like
210206
`HashiCorp Vault <https://developer.hashicorp.com/vault/docs/secrets/databases/mongodbatlas>`__
211-
or |aws|. Alternatively, implement automatic credential rotation or
212-
create a one-time password through your PAM system for each access.
207+
or |aws| Secrets Manager to generate and store complex database credentials.
208+
209+
To learn more, see the following manual pages:
210+
211+
- :manual:`X.509 </core/security-x.509/>`
212+
- :manual:`SCRAM </core/security-scram/>`
213+
214+
Just-in-Time Access
215+
```````````````````
216+
217+
|service| also supports creating temporary database users
218+
that automatically expire after the predefined times. A user can be
219+
created for the following periods:
220+
221+
- 6 hours
222+
- 1 day
223+
- 1 week
224+
225+
To learn more, see :ref:`mongodb-users`.
226+
227+
Secrets Management
228+
``````````````````
229+
230+
We recommend using a third-party secrets manager like `HashiCorp Vault
231+
<https://developer.hashicorp.com/vault/docs/secrets/databases/mongodbatlas>`__
232+
or |aws| Secrets Manager to generate and store complex database credentials.
233+
A secrets manager can generate database credentials dynamically based on configured
234+
roles for |service| databases.
235+
236+
To learn more, see the blog :website:`Manage
237+
MongoDB Atlas Database Secrets in HashiCorp Vault
238+
</blog/post/manage-atlas-database-secrets-hashicorp-vault>`.
239+
213240

214241
Recommendations for {+atlas-admin-api+}
215242
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
216243

217244
|service| provides |api| key-based authentication to securely manage
218-
programmatic access. It uses |http| Digest to protect requests, where
219-
the |api| public key functions as the username, and the corresponding
245+
programmatic access. It uses |http| Digest authentication to protect requests.
246+
The |api| public key functions as the username, and the corresponding
220247
private key serves as the password.
221248
You should store these keys in a third party secrets management system,
222-
such as |aws| or {+vault+}. To learn how to securely store these
249+
such as |aws| Secrets Manager or {+vault+}. To learn how to securely store these
223250
keys in Vault, see the blog
224251
`Manage MongoDB Atlas Database Secrets in HashiCorp Vault <https://www.mongodb.com/blog/post/manage-atlas-database-secrets-hashicorp-vault>`__.
225252

@@ -247,7 +274,7 @@ to the data access required for the role to perform its function.
247274
This approach enables you to follow the principle of least privilege.
248275

249276
Additionally, by integrating |service| with a federated identity provider,
250-
you can map identity provider groups automatically to |service| roles.
277+
you can use just-in-time provisioning by mapping identity provider groups to |service| roles.
251278
This streamlines access management and ensures secure and organized role
252279
assignments throughout the platform. You can grant access programmatically
253280
based on the provisioning process of your orchestration layer.
@@ -266,7 +293,7 @@ both. Use Identity Federation to manage access by linking your identity
266293
provider groups to |service| roles through group-role mappings.
267294

268295
We recommend that you use a modern federated Identity Provider (IdP) that
269-
provides SSO, OIDC, and SAML login such as Azure Entra ID, Okta, or Ping
296+
provides SSO with SAML such as Azure Entra ID, Okta, or Ping Identity
270297
as this makes the authorization process more secure and supports the
271298
flexibility needed to programmatically assign :abbr:`IdP (Identity Provider)`
272299
groups to |service| roles. You should restrict your company's domain from
@@ -319,8 +346,9 @@ commonly used roles can serve as a general guideline:
319346
Don't allow this role in production environments. It has the
320347
ability to view and edit data, including creating and dropping databases,
321348
collections, and indexes on the {+cluster+}, which is useful for rapid
322-
experimentation and development. If you are uncomfortable giving
323-
development teams this level of access in the development environment, you
349+
experimentation and development. To grant read-only access to the {+cluster+}'s
350+
data in production environments, use the ``Project Observability Viewer`` role.
351+
If you are uncomfortable giving development teams this level of access in the development environment, you
324352
can grant them read-only access to the {+cluster+}\'s data and performance
325353
statistics with the ``Project Data Access Read Only`` role.
326354

@@ -337,9 +365,7 @@ access management by linking your Identity Provider (IdP) to |service|
337365
for a more modern and streamlined authentication and authorization flow
338366
for data access.
339367

340-
Only allow workload authentication in production. You can leverage workforce
341-
authentication during development and in lower environments. By configuring
342-
:atlas:`Group Membership </workforce-oidc/>` in your :abbr:`IdP (Identity
368+
By configuring :atlas:`Group Membership </workforce-oidc/>` in your :abbr:`IdP (Identity
343369
Provider)`, you can map groups to database users, simplifying access
344370
control within the :abbr:`IdP (Identity Provider)`. However, for
345371
workload identities, we recommend assigning roles directly using the

0 commit comments

Comments
 (0)