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

时间:2018-01-19 15:18:36

标签: amazon-web-services passwords amazon-redshift amazon-cloudformation amazon-kinesis-firehose

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

以下是使用AWS CLI如何使用KMS加密和解密文件的示例。

加密:

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 repo中提取更改时,你还需要记住解密 - 你可以自动化它以使其更容易。