我想在 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": [
{
"Sid": "SecretPolicytoretrievesecretvalue",
"Effect": "Allow",
"Action": [
"secretsmanager:GetSecretValue",
"secretsmanager:DescribeSecret",
"secretsmanager:ListSecretVersionIds"
],
"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";
相关信息
AWS Data Pipeline 中的安全性