首页 > 解决方案 > Nodejs 使用临时凭证错误连接到 Redshift

问题描述

我想使用临时凭据连接到 Redshift。

我试过用主用户名和密码连接,它工作正常。临时凭证的问题是以下格式的用户名:

username: 'IAM:awsuser'.

所以我认为连接没有正确理解“:”。所以它总是通过无效的密码。我已经从 Redshift 查询编辑器尝试了这个用户名和密码,它可以毫无问题地连接。

这是我正在使用的配置:

const configRed = {
  host: 'redshift-cluster-name.aaaaaaa.eu-west-1.redshift.amazonaws.com',
  user: 'IAM:awsuser',
  password: data.DbPassword,
  database: 'dev',
  port: 5439,
  idleTimeoutMillis: 0,
  max: 10000
};

redshiftPool = new psql.Pool(configRed);

redshiftCon = await redshiftPool.connect();

我也尝试过使用带有 encodeURIComponent 的用户名:

    user: encodeURIComponent('IAM:awsuser'),

它通过下一个错误:

  "errorMessage": "password authentication failed for user \"IAM:awsuser\"",

对于一些自定义 URL,可以更改 PG 库中的连接 URL,例如:

jdbc:redshift:iam://examplecluster.abc123xyz789.us-west-2.redshift.amazonaws.com:5439/dev

标签: node.jsamazon-redshift

解决方案


在创建 Pool 对象时在 params 参数中指定“ssl: true”确实有效:

const configRed = {
  host: 'redshift-cluster-name.aaaaaaa.eu-west-1.redshift.amazonaws.com',
  user: 'IAM:awsuser',
  password: data.DbPassword,
  database: 'dev',
  port: 5439,
  idleTimeoutMillis: 0,
  max: 10000,
  ssl: true
};

推荐阅读