Search code examples
amazon-web-servicescorsaws-sdk-jsamazon-quicksight

aws-sdk 403 Error for CORS preflight OPTIONS request to Quicksight API


I'm trying to register a temporary quicksight user and generate an embed url to put in my React App. However, when calling the register user api I get a 403 error for the CORS preflight OPTIONS request:

Access to XMLHttpRequest at 'https://quicksight.ap-southeast-2.amazonaws.com/accounts//namespaces/default/users' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource."

I've also tried using us-east-1 as my region, but that also fails.

Users sign into my webapp with Cognito credentials. The identity pool has an associated IAM role, and I've attached a policy to that role giving access to register a new quicksight user and get the embed url. My webapp currently uses the aws-sdk library to assume the role through sts, and then make the subsequent quicksight calls.

The React app is hosted on Amplify

  quicksightRegisterUser(data) {
    var params = {
                   AwsAccountId: 'QQQ',
                   Email: 'XXX',
                   IdentityType: 'IAM' ,
                   Namespace: 'default',
                   UserRole: "READER",
                   IamArn: 'arn:aws:iam::YYY:role/ZZZ',
                   SessionName: 'XXX',
                   UserName:'XXX'
               };

    var quicksight = new QuickSight();
    quicksight.registerUser(params, function (err, data1) {
      if (err) {
        console.log("err register user");
        console.log(err);
    } // an error occurred
      else {
          console.log("Register User1");
          console.log(data1)
      }
    })
  }

Solution

  • As @sideshowbarker mentioned, you can't call the Quicksight API from your webapp.

    The solution I found was to set-up a Lambda to generate the Embedding URL, given the user's Cognito Username and password.

    Full details of the solution, and a step-by-step tutorial, can be found here: https://github.com/aws-samples/amazon-quicksight-embedding-sample