从s3加载到redshift,无需redshift凭据

时间:2018-07-04 10:44:16

标签: amazon-redshift

我们正在将数据从S3加载到Redshift,但是在命令行上证明了redshift用户名和密码。

我们也可以基于角色执行此操作吗,因为这会导致用安全漏洞在代码中对用户名密码进行硬编码。

psql -h $redshift_jdbc_url -U $redshift_db_username -d $redshift_dbname -p $port_number -c "copy $destinationTable$columnList from '$s3fileName' credentials 'aws_iam_role=arn:aws:iam::$account_number:role/$s3role;master_symmetric_key=$master_key' region '$s3region' format as json '$jsonPathFile' timeformat 'auto' GZIP TRUNCATECOLUMNS maxerror $maxError";

2 个答案:

答案 0 :(得分:0)

尽管此问题与Redshift无关,但是可以有多种选择来避免用户名/密码,例如(code repositorycvs等错误地签入git或被分享。

不确定我们的做法(如下所述)是否是最佳做法,这是我们的做法,我认为这是安全的。

在这种情况下,我们使用environment variable,并且这些环境变量不在源代码存储库中,并且shell脚本代码通常仅在特定的instance环境中读取。

例如如果您具有执行上述命令的shell脚本,则将加载如下所示的环境文件变量。示例psql.sh

#!/bin/bash
echo "Loading environment variable"

. "$HOME/.env"
Your other commands

env文件中的变量可能如下所示,

#!/bin/bash
export REDSHIFT_USER="xxxxxxxxx"
export REDSHIFT_PASSWORD="xxxxxx"

还有其他选择,但是不确定它们是否可以与Redshift一起使用。

希望能回答您的问题。

答案 1 :(得分:0)

方法1 : 生成包含TTL的临时用户名/密码作为脚本的一部分。使用该临时用户名/密码连接到数据库。

AWS文档参考

https://docs.aws.amazon.com/cli/latest/reference/redshift/get-cluster-credentials.html

方法2 : 使用AWS Secerets Manager Service