如何管理 AWS Kinesis Firehose 用于将数据写入 Redshift 集群的密码

How to manage password that is used by AWS Kinesis Firehose to write data to a Redshift cluster

我正在尝试为将数据写入 Redshift 集群的 Kinesis Firehoses 编写 AWS Cloud Formation 模板。 在RedshiftDestinationConfiguration中,用户名和密码标记为必填。

但是,由于我们会将模板签入到 Git,因此我们希望避免将密码写入将提交到 repo 的文件。 模板中没有定义目标Redshift集群,所以模板中会有JDBC URL、用户名和密码。我相信通过这些信息任何人都可以看到该文件可以连接到集群。

有人知道在这种情况下管理密码的更好方法吗?

您可以使用的一种模式是将密码存储在 CloudFormation 参数文件中并使用 AWS KMS 加密该文件。您可以将未加密的文件添加到您的 .gitignore,并将加密的二进制文件添加到您的 git 存储库。您还需要向 IAM 添加可用于此目的的加密密钥。

结果是没有 IAM 使用该加密密钥的权限的任何人都无法读取加密文件。

下面是一个示例,说明如何使用 KMS 通过 AWS CLI 加密和解密文件。

加密:

aws kms encrypt \
    --key-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --plaintext file://params.json \
    --query CiphertextBlob \
    --output text | base64 --decode > params.json.encrypted

解密:

aws kms decrypt \
    --ciphertext-blob fileb://params.json.encrypted \
    --query Plaintext \
    --output text | base64 --decode > params.json

需要注意的是,您需要记住加密新参数文件并将其提交给 git,因为对未加密文件的编辑不会显示在您的 git diff 中.您还需要记住在从 git 存储库中提取更改时进行解密 - 您可以将其自动化以使其更容易。