我们正在将数据从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";
答案 0 :(得分:0)
尽管此问题与Redshift无关,但是可以有多种选择来避免用户名/密码,例如(code repository
,cvs
等错误地签入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