Search code examples
node.jsamazon-dynamodbenvironment-variablesaws-sdkamazon-kms

AWS global configuration update conflict


The problem is when I feed Dynamodb config endpoint some value the AWS Key Management Service stops working altogether.

1. DynamoDB

    const awsConfig = {
        region: process.env.REGION,
        endpoint: process.env.ENDPOINT, //this stops AWS KMS
        accessKeyId: process.env.ACCESS_KEY_ID,
        secretAccessKey: process.env.ACCESS_KEY,
    };

    aws.config.update(awsConfig);

2. AWS KMS

    constructor() {
        this.#KEYAWS = keyAws;
        this.#region = process.env.REGION;
        this.#secretName = process.env.SECRET_NAME;
        this.#secret = process.env.ACCESS_KEY;
        this.#_AWS_KEY_ACCESS_KEY_ID = process.env.ACCESS_KEY_ID;
    }

    async #getPrivateKey() {
        this.#KEYAWS.config.update({
            accessKeyId: this.#_AWS_KEY_ACCESS_KEY_ID,
            secretAccessKey: this.#secret,
        });

        var client = new this.#KEYAWS.SecretsManager({
            region: this.#region,
        });
    }

When I comment out the endpoint in Dynamo config, the KMS works properly

Note: A VPC endpoint for DynamoDB enables Amazon EC2 instances in your VPC to use their private IP addresses to access DynamoDB with no exposure to the public internet.


Solution

  • This happened because of adding endpoint: process.env.ENDPOINT to global configuration Object. AWS SDK Global Configuration

    I removed the endpoint option from global configuration and specifically passed it to dynamodb service aws.DynamoDB.DocumentClient({endpoint: process.env.ENDPOINT})

    So, the take here is that whenever you have a conflict, exclude those options from Global Configuration.

    Check this How to set multiple aws credentials in nodejs aws-sdk module?