Skip to main content
Help & Documentation

Connect to Amazon Redshift

Add a one-sentence summary.

17 min readUpdated November 5, 2026
Tip: How this works — and why there's an AWS step. Golden Analytics connects to Amazon Redshift through the Amazon Redshift Data API, AWS's HTTPS interface for running SQL, rather than through a database driver. Two things follow from that:

- No network setup. Golden never opens a connection to your cluster, so nothing changes in your VPC, security groups, or public-access settings — a private cluster works as-is.
- An AWS identity step. The Data API is an AWS service, so every request must be signed with AWS credentials. It does not accept a database user name and password the way a JDBC or ODBC driver does. Golden therefore needs an IAM user with an access key and a policy allowing the Data API calls; which database user your queries run as is a separate, second choice you make below.

Before you start

You'll need three things:

  • A Redshift data warehouse the Data API supports. Any Amazon Redshift Serverless workgroup, or a provisioned cluster on RA3, DC2, or RG node types. Older DS2 and DC1 clusters don't support the Data API.
  • Someone who can create an IAM policy and IAM user in the AWS account that owns the cluster or workgroup. Golden's IAM user must live in that same account.
  • Someone who can grant privileges in the Redshift database — a superuser or the owner of the schemas you want to analyze.

Set aside about 15 minutes. Steps 1–4 happen in the AWS console, Step 5 in Golden, and Step 6 back in Redshift.

Two layers of access

If you've connected other tools to Redshift with a hostname, user name, and password, expect that single login to split in two here:

LayerWhat it decidesWhere you set it up
AWS (always required)May this caller use the Data API at all, and which database identity may it take on?IAM — a user, an access key, and a policy (Steps 2 and 3)
DatabaseWhich database user do the queries run as, and which schemas and tables can it read?Redshift — a database user (created by you, or automatically) and its GRANTs (Steps 4 and 6)

The AWS layer is the same for everyone. The database layer has three variants, and the Database sign-in setting in Golden is where you pick one.

Choose how Golden signs in to the database

The Database sign-in setting decides which database user your queries run as — and therefore which tables Golden can see. Pick one now; it changes what you do in Steps 2, 4, and 6.

MethodHow it worksChoose it whenWorks with
IAM identity (default)Redshift automatically creates a database user named IAM:golden-analytics (matching the IAM user) and Golden signs in as that user. No database password exists anywhere.You're setting up fresh and want the fewest secrets to manage.Provisioned clusters and Serverless workgroups
Database userGolden signs in as a database user you name (for example golden_reader). AWS issues short-lived credentials for that user on every request, so no password is stored in Golden.You already have a read-only database user with the grants you want.Provisioned clusters only — the option disappears when you enter a Serverless endpoint
Secrets Manager secretGolden signs in with a username and password that you store in AWS Secrets Manager. Golden only ever holds the secret's ARN.Your database user needs to keep a password, or your team standardizes on Secrets Manager.Provisioned clusters and Serverless workgroups

Step 1 — Find your endpoint

Open the Amazon Redshift console.

Provisioned cluster: choose Clusters in the left navigation, click your cluster, and copy the Endpoint from the General information panel. It looks like this:

my-cluster.abc123xyz789.us-east-1.redshift.amazonaws.com:5439/dev

Serverless workgroup: choose Redshift Serverless, then Workgroup configuration, click your workgroup, and copy the Endpoint from General information. It looks like this:

default.123456789012.us-east-1.redshift-serverless.amazonaws.com:5439/dev

You'll paste the whole thing into Golden later — the trailing :5439/dev is fine, Golden trims it.

While you're here, note four values you'll need for the policy in Step 2:

  • Region — the label just before redshift or redshift-serverless in the hostname (us-east-1 above).
  • Cluster identifier or workgroup name — the first label of the hostname (my-cluster or default above).
  • Database name — the part after the slash (dev is Redshift's default).
  • AWS account ID — the 12-digit number in the account menu at the top right of the console.

Step 2 — Create the permissions policy

Rather than attaching AWS's managed AmazonRedshiftDataFullAccess policy, create a small custom one. It is narrower, and for two of the three sign-in methods it is the only one that works (see the note at the end of this step).

  1. Open the IAM console, choose Policies, then Create policy.
  2. Switch to the JSON tab, delete the placeholder, and paste the policy below.
  3. Keep the first two statements as-is. Of the four sign-in statements that follow, keep only the one for your method and delete the other three.
  4. Replace the UPPERCASE placeholders using the table under the policy.
  5. Click Next, name the policy GoldenAnalyticsRedshiftAccess, and click Create policy.
json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "GoldenRedshiftDataApi",
      "Effect": "Allow",
      "Action": [
        "redshift-data:ExecuteStatement",
        "redshift-data:BatchExecuteStatement",
        "redshift-data:DescribeStatement",
        "redshift-data:GetStatementResult",
        "redshift-data:CancelStatement",
        "redshift-data:ListSchemas",
        "redshift-data:ListTables"
      ],
      "Resource": "*"
    },
    {
      "Sid": "GoldenServiceLinkedRole",
      "Effect": "Allow",
      "Action": "iam:CreateServiceLinkedRole",
      "Resource": "arn:aws:iam::ACCOUNT_ID:role/aws-service-role/redshift-data.amazonaws.com/AWSServiceRoleForRedshift",
      "Condition": {
        "StringLike": { "iam:AWSServiceName": "redshift-data.amazonaws.com" }
      }
    },

    {
      "Sid": "SignInIamIdentityProvisionedCluster",
      "Effect": "Allow",
      "Action": "redshift:GetClusterCredentialsWithIAM",
      "Resource": "arn:aws:redshift:REGION:ACCOUNT_ID:dbname:CLUSTER_ID/*"
    },
    {
      "Sid": "SignInIamIdentityServerlessWorkgroup",
      "Effect": "Allow",
      "Action": "redshift-serverless:GetCredentials",
      "Resource": "arn:aws:redshift-serverless:REGION:ACCOUNT_ID:workgroup/*"
    },
    {
      "Sid": "SignInDatabaseUserProvisionedCluster",
      "Effect": "Allow",
      "Action": "redshift:GetClusterCredentials",
      "Resource": [
        "arn:aws:redshift:REGION:ACCOUNT_ID:dbuser:CLUSTER_ID/DB_USER",
        "arn:aws:redshift:REGION:ACCOUNT_ID:dbname:CLUSTER_ID/*"
      ]
    },
    {
      "Sid": "SignInSecretsManager",
      "Effect": "Allow",
      "Action": "secretsmanager:GetSecretValue",
      "Resource": "arn:aws:secretsmanager:REGION:ACCOUNT_ID:secret:golden-analytics/redshift-*"
    }
  ]
}
PlaceholderReplace withExample
REGIONThe region from Step 1us-east-1
ACCOUNT_IDYour 12-digit AWS account ID123456789012
CLUSTER_IDThe cluster identifier — the first label of a provisioned endpointmy-cluster
DB_USERDatabase user method only: the database user Golden will sign in as (you create it in Step 4)golden_reader

The policy doesn't name a database. A connection in Golden targets exactly one database (its Database field), and this one policy covers every connection you make to the cluster or workgroup.

Three optional tightenings: for a provisioned cluster, replace the asterisk in dbname:CLUSTER_ID/* with a single database name to limit the key to that database; for Serverless, replace the asterisk in workgroup/* by pasting the workgroup's full ARN from its configuration page; for Secrets Manager, the resource already matches only a secret named golden-analytics/redshift, which is the name you'll give it in Step 4.

Why not just attach AmazonRedshiftDataFullAccess?
AWS's managed policy is built around its own defaults, and two of them bite here. For the Database user method it only allows a database user literally named redshift_data_api_user. For IAM identity on Serverless it only works if the workgroup itself carries a tag with the key RedshiftDataFullAccess. It also grants more than Golden needs (listing databases, describing tables, reading every tagged secret in the account). If you already use it for other tooling it will work for the IAM identity method on a provisioned cluster, and for Secrets Manager as long as the secret is tagged RedshiftDataFullAccess — but the custom policy above avoids all of these caveats.

Step 3 — Create an IAM user for Golden and an access key

  1. In the IAM console choose Users, then Create user.
  2. For User name enter golden-analytics. Leave Provide user access to the AWS Management Console unchecked and click Next.
  3. Under Permissions options choose Attach policies directly, search for GoldenAnalyticsRedshiftAccess, tick it, click Next, then Create user.
  4. Open the new user, go to the Security credentials tab, scroll to Access keys, and click Create access key.
  5. For the use case choose Third-party service. AWS will suggest alternatives; tick the confirmation box, click Next, then Create access key.
  6. Copy both the Access key and the Secret access key, or click Download .csv file. The secret is shown only once — if you lose it, delete the key and create a new one.
Heads up: Use this dedicated user rather than your own credentials or the account root user. Anyone who can use the connection in Golden is effectively using this key, so its permissions should be exactly the policy above and nothing more. AWS allows two active keys per user, which is what makes rotation possible later (see Good to know).

If you chose IAM identity, the user name matters: Redshift will name the database user IAM: followed by this exact IAM user name. If you pick something other than golden-analytics, substitute it in Step 6.

Step 4 — Prepare the database sign-in

Do only the part for the method you chose.

IAM identity

Nothing to do yet. Redshift creates the database user IAM:golden-analytics automatically the first time Golden connects (Step 5). You'll grant it read access in Step 6.

Database user (provisioned clusters only)

Sign in to the database — with query editor v2 in the Redshift console, or any SQL client — as a superuser or schema owner. Either reuse an existing read-only user, or create one. PASSWORD DISABLE means the user can only be reached through AWS temporary credentials, never with a password:

sql
CREATE USER golden_reader PASSWORD DISABLE;
GRANT USAGE ON SCHEMA public TO golden_reader;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO golden_reader;

Repeat the two GRANT lines for every schema you want to analyze in Golden, connected to the database that holds each schema. The user itself is cluster-wide, so create it only once. Its name must match the DB_USER you put in the policy in Step 2.

Secrets Manager secret

First create a database user with a password and grant it read access (in query editor v2 or any SQL client, as a superuser or schema owner):

sql
CREATE USER golden_reader PASSWORD 'Choose-a-strong-password-1';
GRANT USAGE ON SCHEMA public TO golden_reader;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO golden_reader;

Repeat the two GRANT lines for every schema you want to analyze, connected to the database that holds each schema (the user itself is cluster-wide). Then store those credentials in Secrets Manager:

  1. Open the AWS Secrets Manager console and click Store a new secret.
  2. Provisioned cluster: choose Credentials for Amazon Redshift data warehouse, enter the User name and Password, and select your cluster. Serverless workgroup: choose Other type of secret and add two key/value rows — key username with the user name, and key password with the password.
  3. Click Next. For Secret name enter golden-analytics/redshift (this is the name the policy in Step 2 matches). Under Tags, add a tag with the key RedshiftDataFullAccess and any value.
  4. Click Next past the rotation page (leave automatic rotation off), then Store.
  5. Open the secret and copy its Secret ARN — you'll paste it into Golden in Step 5.
Note: The RedshiftDataFullAccess tag is what AWS's own Redshift tooling looks for on a Data API secret. Golden's custom policy doesn't need it, but adding it keeps the secret usable from the AWS query editor and CLI too. If you encrypt the secret with a customer-managed KMS key rather than the default AWS-managed key, Golden's IAM user also needs kms:Decrypt on that key.

Step 5 — Create the connection in Golden

  1. On the Golden home page click Create Connection (inside a Space, use Create, then Saved connection). In the Add a Connection panel choose Amazon Redshift.
  2. Fill in the form:
FieldWhat to enter
Connection NameAnything your team will recognize, such as "Sales warehouse".
EndpointThe endpoint from Step 1. Pasting it with the :5439/dev tail is fine.
DatabaseThe database name — dev unless you created another.
AWS Access Key IDThe access key from Step 3 (it starts with AKIA).
AWS Secret Access KeyThe secret access key from Step 3.
Database sign-inThe method you chose. IAM identity needs nothing more. Database user reveals a Database User field — enter the name from Step 4 (for example golden_reader, with no prefix). Secrets Manager secret reveals a Secrets Manager secret field — paste the Secret ARN from Step 4.
More options → AWS RegionLeave blank; Golden reads it from the endpoint. Set it only if you connect through a custom domain name.
More options → SchemaThe schema Golden should treat as the default — public unless your tables live elsewhere.
More options → AWS Session TokenLeave blank. This is only for temporary credentials from AWS SSO or STS (access keys starting with ASIA), which expire within hours and aren't suitable for a saved connection.
Save to SpaceWhere the connection lives. Saving it to a shared Space lets other members query through it — see the note below.

Then click Test Connection. Golden runs a one-line query (SELECT 1) through the Data API. When the button reads Connected, your AWS setup is correct.

Finally, click Save Connection.

Note: A connection saved to a shared Space runs every member's queries as this same IAM user and database user. That is by design — it's why Step 3 creates a dedicated, read-only identity — but keep it in mind when you decide which schemas to grant.

Step 6 — Grant read access (IAM identity method)

Skip this step if you chose Database user or Secrets Manager secret — you granted access in Step 4.

With IAM identity, the Test Connection in Step 5 made Redshift create the database user IAM:golden-analytics. It starts with no privileges beyond Redshift's PUBLIC defaults, so until you grant access Golden can connect but will see "permission denied" as soon as it reads a table.

As a superuser or schema owner, run the following. The double quotes are required because of the colon in the user name:

sql
GRANT USAGE ON SCHEMA public TO "IAM:golden-analytics";
GRANT SELECT ON ALL TABLES IN SCHEMA public TO "IAM:golden-analytics";

Repeat for each schema you want available in Golden, connected to the database that holds it. The user is cluster-wide, so other databases need only the grants, not a new user. To have tables you create later picked up automatically, also run:

sql
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO "IAM:golden-analytics";

Then, back in Golden, open the connection and browse its tables to confirm they load.

Note: If you named the IAM user something other than golden-analytics, the database user is IAM: followed by your name. If Golden connects with temporary credentials from an assumed role (the AWS Session Token field), Redshift names the user IAMR: followed by the role name instead.

Troubleshooting

When AWS rejects a request, Golden shows the AWS error code and message, so the left column is what you'll actually see.

What you seeCauseFix
AccessDeniedException … is not authorized to perform: redshift-data: …The policy from Step 2 isn't attached to the user, or its first statement was edited.Check the user's Permissions tab in IAM and re-attach GoldenAnalyticsRedshiftAccess.
AccessDeniedException … redshift:GetClusterCredentialsWithIAM, redshift-serverless:GetCredentials, redshift:GetClusterCredentials, or secretsmanager:GetSecretValueThe sign-in statement for your method is missing, or one of its placeholders (region, account, cluster, user, secret name) doesn't match.Compare the statement's Resource against the values from Step 1. For Database user, DB_USER must equal the Database User field exactly.
AccessDeniedException mentioning KMS or kms:CreateGrant, on a cluster or workgroup encrypted with a customer-managed keyThe Data API encrypts query text and results with your key and needs a KMS grant, which Redshift creates automatically on the first query — but the key's policy doesn't allow it. Clusters on the default AWS-owned key never hit this.In the key policy, allow kms:CreateGrant and kms:DescribeKey for callers in your account via redshift.amazonaws.com — see Using AWS KMS with the Data API.
UnrecognizedClientException, or "The security token included in the request is invalid"The access key or secret was pasted incorrectly (a trailing space is enough), or the key has been deactivated or deleted in IAM.Re-paste both values from the .csv, or create a fresh key as in Step 3.
"Temporary AWS credentials (an ASIA… access key) require an AWS Session Token…"You pasted a temporary key from AWS SSO or STS.Use the permanent key created for the golden-analytics user in Step 3.
"Could not determine the AWS region from the Redshift endpoint…" or "Host must end with one of: .redshift.amazonaws.com, .redshift-serverless.amazonaws.com."The endpoint isn't the standard AWS hostname — usually a custom domain name or a typo.Paste the Endpoint value from the console (Step 1). For a custom domain, also set AWS Region under More options.
ResourceNotFoundException, "Cluster … not found", or "Workgroup … not found"The endpoint is in a different region than the one Golden is calling, or the cluster or workgroup name is misspelled.Re-check the endpoint and clear any AWS Region override.
"Redshift query failed: … user … does not exist"Database user method: the Database User you entered hasn't been created in Redshift.Create it as in Step 4, or correct the name in the connection.
"Redshift query failed: permission denied for schema …" or "… permission denied for relation …"The database user can connect but has no grants on that schema or table.Run the GRANT statements from Step 4 or Step 6 for that schema.
"Redshift query failed: … password authentication failed for user …"The Secrets Manager secret holds the wrong username or password, or the password was changed in Redshift.Update the secret's value in Secrets Manager — its ARN stays the same, so Golden needs no change.
"Redshift query cancelled or exceeded the request deadline"A query ran longer than Golden's interactive limit (about two minutes).Filter or aggregate earlier, add sort keys, or give the cluster or workgroup more capacity.
"Some table metadata didn't load — search may be incomplete."A schema holds more than 50,000 tables, so Golden stopped listing.Point the connection's Schema at a smaller schema, or search tables by exact name.
ThrottlingExceptionToo many Data API requests in the same second for your account's quota.Retry. If it recurs under normal use, request a higher Data API quota from AWS.

Good to know

  • Queries run live. Golden doesn't copy your data. Every chart, filter, and AI question compiles to SQL that runs on your cluster or workgroup at that moment, so Redshift compute (or Serverless RPU-hours) is used as people work.
  • Limits. Golden waits about two minutes for an interactive query, and the Data API returns at most 500 MB per result. Golden aggregates in the warehouse, so real dashboards stay far below both.
  • What AWS logs. Every request Golden makes appears in CloudTrail as a redshift-data call by the golden-analytics user, and every query appears in Redshift's system tables under the database user from your sign-in method.
  • Rotating the key. Create a second access key for golden-analytics in IAM, edit the connection in Golden and paste the new pair, click Test Connection, then deactivate and delete the old key. Two active keys per user is what makes this a no-downtime swap.
  • Revoking access. Deactivate the access key (or delete the user) in IAM and Golden loses access on its next query. Removing the database grants works too, but the key is faster.
  • Same account only. Golden signs requests with the user's own key and doesn't assume roles, so the IAM user must live in the AWS account that owns the cluster or workgroup.
  • Private clusters are fine. The Data API is an AWS endpoint, so your cluster's "Publicly accessible" setting and its security groups don't affect Golden.
  • Customer-managed KMS keys. If the cluster or workgroup is encrypted with your own KMS key, the Data API uses that same key for query text and results and creates a KMS grant on the first query. The key policy must allow kms:CreateGrant via redshift.amazonaws.com; the default AWS-owned key needs nothing.

AWS documentation referenced