安全地管理运行时配置
项目描述
负责您在AWS上的环境(变量)。
需求
Python 3.4+
一些简单的依赖项,如setup.py中列出 - boto3, PyYAML, requests和six。
您的账户中一个名为alias/treehugger的KMS密钥。
工作原理
Treehugger允许您使用KMS加密的环境变量在EC2上运行应用程序。您将加密的变量存储在与您的其他配置管理一起的YAML文件中,然后只需将它们放入实例的EC2用户数据中。Treehugger可以从用户数据中读取变量,解密加密的变量,并运行您的应用程序。
例如,假设我们想运行一个需要GITHUB_TOKEN环境变量来与GitHub通信的应用程序。由于这是敏感数据,我们想将其加密,仅在运行应用程序时解密。您可以从编写一个包含变量未加密形式的YAML文件开始,该文件包含一个to_encrypt键,该键指示它应该被加密
GITHUB_TOKEN: {to_encrypt: example-token}
TREEHUGGER_APP: my-app
TREEHUGGER_STAGE: prod
《TREEHUGGER_APP》和《TREEHUGGER_STAGE》变量是必填的,用于为Treehugger提供上下文。它们用于使用KMS的加密上下文功能加密变量,提供访问控制和防止篡改。
您可以通过运行以下命令加密文件:
treehugger encrypt-file my_app_vars.yml
它将变成类似以下的内容:
GITHUB_TOKEN: {encrypted: AQECAHiVqEdWu6BhwWXkqJrEhgPpuDXA3TC1MPUeQb...}
TREEHUGGER_APP: my-app
TREEHUGGER_STAGE: prod
请注意,明文变量没有被加密,只有标记为to_encrypt的变量。
从现在开始,您可以使用以下命令编辑文件:
treehugger edit my_app_vars.yml
这将解密文件到一个临时文件,然后在您的$EDITOR中打开它,完成后再次将其加密回原位。这样可以避免意外提交解密后的机密信息。
对于部署,您需要将文件的 内容放入应用程序的EC2实例的用户数据 中,位于 treehugger 键下。
例如,您可以将文件的 内容作为参数传递给CloudFormation模板,将值放入自动扩展组的UserData 属性中。例如,如果作为参数传递 TreehuggerUserData(带有额外缩进):
LaunchConfig:
Type: AWS::AutoScaling::LaunchConfiguration
Properties:
UserData:
Fn::Base64:
!Sub
- |
treehugger:
${IndentedTreehuggerUserData}
然后,在EC2实例上,您的应用程序可以通过以下命令启动:
treehugger exec -- /path/to/application
Treehugger将加载用户数据为YAML,提取“treehugger”键下的字典,解密标记为encrypted的变量,将它们放入环境变量中,然后使用execlp替换自身。
您还可以使用键 include 合并来自外部源的数据,例如
include: s3://bucket-name/filename.yml?versionId=7
其中值是一个指向另一个包含环境变量的YAML文件的URL。该文件将被检索,并将键合并到本地定义的内容之上。目前只支持S3 URL,并使用S3 API进行处理;versionId 是必需的,以避免歧义。
您还可以在环境变量中设置外部源的位置
TREEHUGGER_DATA='s3://bucket-name/filename.yml?versionId=7' treehugger exec -- /path/to/application
这在使用容器中的treehugger且UserData不可用时很有用。如果设置了TREEHUGGER_DATA环境变量,则不会读取UserData或文件。
注意。为了确保运行Treehugger时使用的是正确的Python版本,您还可以将其作为模块运行。例如
/usr/local/bin/python -m treehugger exec -- /path/to/application
测试
安装并运行 tox(文档)。
致谢
Treehugger由Niklas Lindblad创建,并由Adam Johnson维护。
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装软件包的信息。