我正在尝试为Kinesis Firehoses编写一个AWS Cloud Formation模板,用于将数据写入Redshift群集。 在RedshiftDestinationConfiguration中,用户名和密码被标记为必需。
但是,由于我们将模板签入Git,我们希望避免将密码写入将提交给repo的文件。 目标Redshift集群未在模板中定义,因此在模板中将包含JDBC URL,用户名和密码。我相信通过这些信息,任何人都可以看到该文件可以连接到群集。
在这种情况下,有没有人知道管理密码的更好方法?
答案 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中提取更改时,你还需要记住解密 - 你可以自动化它以使其更容易。