4

Problem:

I want to programmatically fetch a quicksight dashboard URL through the SDK, (dashboard in region: eu-west-1) however whenever I use the following regions I get the following errors when I use the following regions:

Example Code:

Note: Credentials added for brevity, but are loaded from profile. Have also tried in Java SDK.

const AWS = require('aws-sdk')
const dotenv = require('dotenv').config()

const init = async () => {
  AWS.config.credentials = {accessKeyId: process.env.ACCESS_KEY_ID, secretAccessKey: process.env.SECRET_ACCESS_KEY}
  AWS.config.region = 'us-east-1'
  // AWS.config.region = 'eu-west-1'

  const quicksight = new AWS.QuickSight()

  const embedUrlParams = {
    AwsAccountId: '111122223333',
    DashboardId: '11111111-2222-3333-4444-555555555555',
    IdentityType: 'QUICKSIGHT',
    UserArn: 'arn:aws:quicksight:us-east-1:111122223333:user/default/quicksight-user-1111'
  }
  const embedUrlRes = await quicksight.getDashboardEmbedUrl(embedUrlParams).promise()
  console.log('embedUrlRes', embedUrlRes)
}

init()

CLI:

When I envoke exactly the same through CLI, eg:

aws quicksight get-dashboard-embed-url --aws-account-id 111122223333 --dashboard-id 11111111-2222-3333-4444-555555555555 --identity-type QUICKSIGHT --user-arn "arn:aws:quicksight:us-east-1:111122223333:user/default/quicksight-user-1111" --profile my-quicksight-profile

I get the a perfectly valid embed url in eu-west-1 that embeds perfect through the browser:

https://eu-west-1.quicksight.aws.amazon.com/embed/XXXXXXXX&identityprovider=quicksight&isauthcode=true

So:

I imaging that the SDK is not behaving as the CLI is in the respect of assuming roles, but I've tried this with little success, as well as pointing to quicksight regional endpoints.

Before I go down the rabbit hole, it would be good to see if anyone has experienced the same and how they resolved it.

Thanks!

1 Answers1

1

For people who endup here, While generating and embedded link using sdk if your dashboard is in a different region you have to update quicksight parameters of the sdk to that region

something like the following

// Previous code blocks..
quicksight = new AWS.QuickSight({ region: targetRegion })
quicksight.getDashboardEmbedUrl(Params,function (error, embeddedLink){})

Also you have to whitelist domain on each region since quicksight considers each region as seperate entity

Ajmal Ahamed
  • 31
  • 1
  • 6