如何在 AWS Datapipeline 中的 Python 脚本中提供 Redshift 数据库密码?

Posted

技术标签:

【中文标题】如何在 AWS Datapipeline 中的 Python 脚本中提供 Redshift 数据库密码?【英文标题】:How to provide Redshift Database Password in Python Script in AWS Datapipeline? 【发布时间】:2017-02-19 17:39:09 【问题描述】:

我正在使用 Redshift,并且必须编写一些自定义脚本来生成报告。我正在使用 AWS 数据管道 CustomShellActivity 来运行我的自定义逻辑。我正在使用python和boto3。我想知道什么是最安全的方法,事实上,在 python 脚本中提供数据库密码的最佳实践。我确信在脚本中硬编码密码不是一个好习惯。我还有哪些其他选择或应该探索哪些选择?

【问题讨论】:

【参考方案1】:

一个非常标准的方法是在安全的 S3 存储桶中 store credentials 并使用具有安全存储桶访问权限的 IAM 角色下载它们作为部署/启动过程的一部分。对于 lambda 或 datapipeline 等有限的运行时情况,您可以在启动时从 S3 下载到 memory buffer using boto.Key.get_contents_as_string() 中,解析文件并设置您的凭据。

为了提高安全性,您可以合并KMS secret management。这是结合了两者的an example。

【讨论】:

【参考方案2】:

我通常将它们存储为环境变量。我不确定 AWS 数据管道部署,但在标准 Linux 机器 (EC2) 上,您可以这样做:

# ~/.profile or /etc/profile
export MY_VAR="my_value"

然后你可以像这样在 Python 中访问它们:

# python script
import os
my_var_value = os.environ['MY_VAR'] if 'MY_VAR' in os.environ else 'default'

【讨论】:

可能不是一个好主意,因为默认情况下访问服务器会授予对 AWS 凭证的访问权限。

以上是关于如何在 AWS Datapipeline 中的 Python 脚本中提供 Redshift 数据库密码?的主要内容,如果未能解决你的问题,请参考以下文章

AWS DataPipeline:RedshiftCopyActivity OVERWRITE_EXISTING 未强制执行主键

AWS DataPipeline表示未找到DynamoDB表

使用 AWS Datapipeline 将 DynamoDB 导出到 S3 数据

覆盖现有插入模式如何在 aws 数据管道的 redshiftcopyactivity 中工作

如何在 aws lambda 超时时释放 resdhift 资源?

使用 Data Pipeline 在 AWS 中进行批处理文件