如何在 AWS Data Pipeline 中隐藏或加密我的数据库凭证?

上次更新时间: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 策略,例如DescribeGetPipelineDefinition,以及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

在管道中加密数据库凭据,最安全的方式是执行以下操作:

  1. 使用 AWS Secrets Manager 来存储密码。
  2. 安装 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";

这篇文章对您有帮助吗?


您是否需要账单或技术支持?