执行 Redshift 复制命令时获取凭据的最佳实践

Posted

技术标签:

【中文标题】执行 Redshift 复制命令时获取凭据的最佳实践【英文标题】:Best practice for obtaining the credentials when executing a Redshift copy command 【发布时间】:2015-10-15 04:37:34 【问题描述】:

从 S3 获取执行 Redshift 复制命令所需的 AWS 凭证的最佳做法是什么?我正在通过让机器触发复制命令来自动化从 S3 到 Redshift 的摄取过程。

我知道建议在 ec2 主机上使用 IAM 角色,这样您就不需要存储 AWS 凭证。使用 Redshift 复制命令将如何工作?我并不特别想要源代码中的凭据。同样,主机由 Chef 配置,因此如果我想将凭据设置为环境变量,它们将在 Chef 脚本中可用。

【问题讨论】:

你找到可行的方法了吗? @x85ms16 - 我写这个问题已经快 4 年了。如果我没记错的话,我只是使用 ec2 实例配置文件来执行命令。 java SDK 选择了实例配置文件凭据,我可以使用它。 【参考方案1】:

您需要凭证才能使用 COPY 命令,如果您的问题是,如何从运行程序的主机获取这些凭证,您可以获取 IAM 角色的元数据并使用访问密钥、密钥和令牌。您可以在 COPY 命令之前动态参数化它并在 COPY 命令中使用它们。

导出 ACCESSKEY=curl -s http://169.254.169.254/IAMROLE | grep '"AccessKeyId" : *' | cut -f5 -d " " | cut -b2- | rev | cut -b3- | rev

提取密钥并创建参数的命令

导出 SECRETKEY=curl -s http://169.254.169.254/IAMROLE | grep '"SecretAccessKey" : *' | cut -f5 -d " " | cut -b2- | rev | cut -b3- | rev

提取令牌并创建参数的命令

export TOKEN=curl -s http://169.254.169.254/IAMROLE | grep '"Token" : *' | cut -f5 -d " " | rev | cut -b2- | rev

【讨论】:

【参考方案2】:

似乎推荐的方法 (as suggested by an AWS developer) 是通过调用 AWS Security Token Service (AWS STS) 来使用 temporary credentials。

我还没有实现这个,但这是我将要采取的方法。

【讨论】:

以上是关于执行 Redshift 复制命令时获取凭据的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

Redshift - 复制多个清单文件

如何从 lambda 函数异步传递红移查询?

将 txt 文件复制到 Redshift

使用 COPY 将数据上传到 RedShift

从 Python 访问 Redshift 时出现“无效凭据”错误

在不使用 aws 凭据的情况下连接 Redshift 和 Python(在 emr 上运行)