如何在 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 中工作