上次更新时间:2021 年 3 月 19 日
我想在 AWS Data Pipeline 中隐藏或加密我的数据库凭证。
简短描述数据管道在传输时对数据库凭据进行加密。但是,当您在导出期间访问管道时,管道 JSON 定义密码是可见的。
您可以通过执行以下操作之一来屏蔽管道中的数据库凭据:
创建和使用标签来限制 AWS Identity and Access Management(IAM)用户查看您的密码。 通过将数据库凭据导出为环境变量来创建自定义 Amazon 系统映像(AMI)。 使用 AWS Secrets Manager 将数据库密码存储在管道中。 解决方法 标记您可以根据标签授予 AWS Identity and Access Management(AWS IAM)用户对管道的完全或受限的访问权限。
要限制 IAM 用户查看密码,请创建并附加允许使用只读 Data Pipeline 操作的 IAM 策略,例如Describe、GetPipelineDefinition,以及QueryObjects。有关详细信息,请参阅 AWS Data Pipeline 的示例策略。
自定义 AMI您可以通过执行以下操作来保障管道中数据库凭据的安全:
1.将您的数据库用户名和密码作为环境变量导出到 Amazon 弹性计算云(Amazon EC2)实例上:运行以下命令,从而将数据库凭证导出为 Amazon EC2 实例上的环境变量:
sudo vi /etc/profile
export USERNAME=awsuser
export PASSWORD=
2.从 Amazon EC2 实例中创建自定义 AMI。
3.将 PostgreSQL 连接方法中的此变量作为 ShellCommandActivity 传递给数据库实例:使用 Data Pipeline Architect 定义以下 ShellCommanandActivity:
psql "host=redshiftendpoint port=5439 dbname=Dbname user=$USERNAME password=$PASSWORD" -c "select 1;"
有关详细信息,请参阅使用 AWS Data Pipeline Architect 定义活动。
AWS Secrets Manager在管道中加密数据库凭据,最安全的方式是执行以下操作:
-
使用 AWS Secrets Manager 来存储密码。
安装 PostgreSQL 以连接到 Redshift 数据库实例,或安装 SQL Workbench 以连接到其他数据库实例。
您可以使用 AWS Secrets Manager 将密码存储为环境变量。然后,您可以在 PostgreSQL 连接方法中将此变量作为 ShellCommandActivity 传递给数据库实例。有关详细信息,请参阅使用 psql 工具连接到集群。
1.在 AWS Secrets Manager 中创建并存储您的 Redshift 数据库凭证。
2.将以下策略附加到 DatapipeLineDefaultResource 角色以授予对存储在 AWS Secret Manager 中的密钥的列表/读取访问权限:
{
"Version": "2012-10-17",
"Statement": ,
"Resource": "arn:aws:secretsmanager:us-east-1:1111222233334444:secret:mysecret/secret-10aaPx"
}
]
}
替换上述策略中的以下内容:
将 us-east-1 替换为您的密钥所在的区域 将 1111222233334444 替换为您的 AWS 账户 ID 将 mysecret 替换为您的虚拟文件夹的名称 将 Secre-10AAPX 替换为您的密钥的名称3.使用 Data Pipeline Architect 定义以下 ShellCommandActivity:
sudo yum -y install aws-cli jq postgresql95-server.x86_64 postgresql95-contrib.x86_64 postgresql95.x86_64 postgresql95-libs.x86_64 && export USERNAME=`aws secretsmanager get-secret-value --secret-id mysecret/secret --region regionname | jq -r '.SecretString' | cut -f4 -d \"\\\"\"` && export AWS_REGION=region_name && export PASSWORD=`aws secretsmanager get-secret-value --secret-id mysecret/secret --region region_name | jq -r '.SecretString' | cut -f8 -d \"\\\"\"` && psql "host=redshiftendpointname port=5439 dbname=sampledbname user=$USERNAME password=$PASSWORD" -c "select 1";