0

I'm using MongoDB Atlas to host my MongoDB database and I want to use the MONGODB-AWS authentication mechanism for authentication. When I'm trying it locally with my personal IAM user it works as it should, however when it runs in production I get the error MongoError: bad auth : aws sts call has response 403. I run my Node.js application inside an AWS EKS cluster and I have added the NodeInstanceRole used in EKS to MonogDB Atlas. I use fromNodeProviderChain() from AWS SDK v3 to get my secret access key and access key id and have verified that I indeed get credentials.

Code to get the MongoDB URI:

import { fromNodeProviderChain } from '@aws-sdk/credential-providers'

async function getMongoUri(config){
    const provider = fromNodeProviderChain()
    const awsCredentials = await provider()

    const accessKeyId = encodeURIComponent(awsCredentials.accessKeyId)
    const secretAccessKey = encodeURIComponent(awsCredentials.secretAccessKey)
    const clusterUrl = config.MONGODB_CLUSTER_URL

    return `mongodb+srv://${accessKeyId}:${secretAccessKey}@${clusterUrl}/authSource=%24external&authMechanism=MONGODB-AWS`
}

Do I have to add some STS permissions for the node instance role or are the credentials I get from fromNodeProviderChain() not the same as the node instance role?

quieri
  • 345
  • 3
  • 19

0 Answers0