Skip to content

Commit d043877

Browse files
DOCSP-28794 AWS Auth Mechanisms (#251)
1 parent 5244f83 commit d043877

File tree

4 files changed

+122
-40
lines changed

4 files changed

+122
-40
lines changed

source/fundamentals/auth.txt

Lines changed: 86 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -189,59 +189,105 @@ username and password to authenticate your user.
189189

190190
.. important::
191191

192-
The MONGODB-AWS authentication mechanism is only available in MongoDB
192+
The MONGODB-AWS authentication mechanism is available only in MongoDB
193193
versions 4.4 and later.
194194

195195
The ``MONGODB-AWS`` authentication mechanism uses your Amazon Web Services
196196
Identity and Access Management (AWS IAM) credentials to authenticate your
197197
user.
198198

199-
To specify the ``MONGODB-AWS`` authentication mechanism, perform the
200-
following:
199+
To connect to a MongoDB instance with ``MONGODB-AWS`` authentication enabled,
200+
specify the ``MONGODB-AWS`` authentication mechanism.
201201

202-
- Assign the ``AuthMechanism`` option the value ``MONGODB-AWS``
203-
- Assign the ``Username`` option the value of your ``accessKeyID``
204-
- Assign the ``Password`` option the value of your ``secretAccessKey``
202+
The driver checks for your credentials in the following sources in the order
203+
they are listed:
205204

206-
.. code-block:: go
207-
:emphasize-lines: 3, 5-6
205+
1. Connection string
206+
#. Environment variables
207+
#. Web identity token file
208+
#. AWS ECS endpoint specified in the ``AWS_CONTAINER_CREDENTIALS_RELATIVE_URI``
209+
environment variable
210+
#. AWS EC2 endpoint. For more information, see `IAM Roles for Tasks
211+
<https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html>`_.
208212

209-
var accessKeyID, secretAccessKey string
210-
awsCredential := options.Credential{
211-
AuthMechanism: "MONGODB-AWS",
212-
AuthSource: "<authenticationDb>",
213-
Username: "<accessKeyID>",
214-
Password: "<secretAccessKey>",
215-
}
216-
awsIAMClient, err := mongo.Connect(
217-
context.TODO(),
218-
options.Client().SetAuth(awsCredential))
219-
if err != nil {
220-
panic(err)
221-
}
222-
_ = awsIAMClient
213+
.. important::
214+
215+
The driver obtains the credentials only from the first source in which they are found.
216+
For example, if you specify your AWS credentials in the connection string, the
217+
driver ignores any credentials that you have specified in environment variables.
223218

224-
If you need to specify an AWS session token, use the temporary
225-
credentials returned from an assume role request.
219+
.. tabs::
226220

227-
To use temporary credentials, assign the ``AuthMechanismProperties``
228-
option the value of your ``sessionToken``:
221+
.. tab:: Connection String
222+
:tabid: connection string
229223

230-
.. code-block:: go
231-
:emphasize-lines: 7-9
224+
.. tip::
232225

233-
var sessionToken string
234-
assumeRoleCredential := options.Credential{
235-
AuthMechanism: "MONGODB-AWS",
236-
AuthSource: "<authenticationDb>",
237-
Username: "<accessKeyID>",
238-
Password: "<secretAccessKey>",
239-
AuthMechanismProperties: map[string]string{
240-
"AWS_SESSION_TOKEN": "<sessionToken>",
241-
},
242-
}
243-
assumeRoleClient, err := mongo.Connect(context.TODO(),
244-
options.Client().SetAuth(assumeRoleCredential))
226+
The following examples set the appropriate credentials by using the ``SetAuth()``
227+
method. You can also specify these credentials by using the ``ApplyURI()``
228+
method. If you use the ``ApplyURI()`` method you must URL encode the username
229+
and password to ensure they are correctly parsed.
230+
231+
To connect to your MongoDB instance using your AWS IAM credentials, perform the
232+
following steps:
233+
234+
- Assign the ``AuthMechanism`` option the value ``MONGODB-AWS``
235+
- Assign the ``Username`` option the value of your ``accessKeyID``
236+
- Assign the ``Password`` option the value of your ``secretAccessKey``
237+
238+
.. literalinclude:: /includes/fundamentals/code-snippets/authentication/aws-connection-string.go
239+
:language: go
240+
241+
If you need to specify an AWS session token, use the temporary
242+
credentials returned from an `assume role request <https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html>`__.
243+
244+
To use temporary credentials, assign the value of your ``sessionToken`` to
245+
the ``AuthMechanismProperties`` option:
246+
247+
.. literalinclude:: /includes/fundamentals/code-snippets/authentication/aws-connection-string-session-token.go
248+
:language: go
249+
250+
.. tab:: Environment Variables
251+
:tabid: environment variables
252+
253+
To authenticate to your MongoDB instance using AWS credentials stored in
254+
environment variables, use a shell to set the variables as follows:
255+
256+
.. code-block:: bash
257+
258+
export AWS_ACCESS_KEY_ID=<awsKeyId>
259+
export AWS_SECRET_ACCESS_KEY=<awsSecretKey>
260+
export AWS_SESSION_TOKEN=<awsSessionToken>
261+
262+
.. note::
263+
264+
If you don't need an AWS session token for the role you're
265+
authenticating with, omit the line containing ``AWS_SESSION_TOKEN`` .
266+
267+
After you've set the preceding environment variables, specify the ``MONGODB-AWS``
268+
authentication mechanism as shown in the following example:
269+
270+
.. literalinclude:: /includes/fundamentals/code-snippets/authentication/aws-environment-variables.go
271+
:language: go
272+
273+
.. tab:: Web Identity Token File
274+
:tabid: web-identity-token-file
275+
276+
You can use the OpenID Connect (OIDC) token obtained from a web identity provider to authenticate
277+
to Amazon Elastic Kubernetes Service (EKS) or other services.
278+
To use an OIDC token, create a file that contains your token, then
279+
set the absolute path to this file in an environment variable by using
280+
a shell as shown in the following example:
281+
282+
.. code-block:: bash
283+
284+
export AWS_WEB_IDENTITY_TOKEN_FILE=<absolute path to file containing your OIDC token>
285+
286+
After you've set the preceding environment variable, specify the ``MONGODB-AWS``
287+
authentication mechanism as shown in the following example:
288+
289+
.. literalinclude:: /includes/fundamentals/code-snippets/authentication/aws-environment-variables.go
290+
:language: go
245291

246292
.. _golang-x509:
247293

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
var accessKeyID, secretAccessKey, sessionToken string
2+
assumeRoleCredential := options.Credential{
3+
AuthMechanism: "MONGODB-AWS",
4+
AuthSource: "<authenticationDb>",
5+
Username: "<accessKeyID>",
6+
Password: "<secretAccessKey>",
7+
AuthMechanismProperties: map[string]string{
8+
"AWS_SESSION_TOKEN": "<sessionToken>",
9+
},
10+
}
11+
assumeRoleClient, err := mongo.Connect(context.TODO(),
12+
options.Client().SetAuth(assumeRoleCredential))
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
var accessKeyID, secretAccessKey string
2+
awsCredential := options.Credential{
3+
AuthMechanism: "MONGODB-AWS",
4+
AuthSource: "<authenticationDb>",
5+
Username: "<accessKeyID>",
6+
Password: "<secretAccessKey>",
7+
}
8+
awsIAMClient, err := mongo.Connect(
9+
context.TODO(),
10+
options.Client().SetAuth(awsCredential))
11+
if err != nil {
12+
panic(err)
13+
}
14+
_ = awsIAMClient
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
envVariablesCredential := options.Credential{
2+
AuthMechanism: "MONGODB-AWS",
3+
}
4+
envVariablesClient, err := mongo.Connect(
5+
context.TODO(),
6+
options.Client().SetAuth(envVariablesCredential))
7+
if err != nil {
8+
panic(err)
9+
}
10+
_ = envVariablesClient

0 commit comments

Comments
 (0)