Skip to main content

Securely manage runtime configuration

Project description

https://travis-ci.org/timeoutdigital/treehugger.svg?branch=master

Takes care of your environment (variables) on AWS.

Requirements

  • Python 2.7+ or 3.4+

  • Some simple dependencies as listed in setup.py - boto3, PyYAML, requests, and six.

  • A KMS key in your account aliased as alias/treehugger.

How it works

Treehugger lets you use KMS encrypted environment variables to run your application on EC2. You store the encrypted variables in YAML files alongside your other configuration management, then just get them into the EC2 User Data for an instance. Treehugger can read the variables from user data, decrypt the encrypted ones, and run your application.

For example, say we want to run an application that takes a GITHUB_TOKEN environment variable for talking to GitHub. Since this is sensitive data, we want to store it encrypted and only decrypt it when running the application. You can start by writing a YAML file my_app_vars.yml that contains the variable in its unencrypted form, in a to_encrypt key in a mapping that indicates it should be encrypted:

GITHUB_TOKEN: {to_encrypt: example-token}
TREEHUGGER_APP: my-app
TREEHUGGER_STAGE: prod

The TREEHUGGER_APP and TREEHUGGER_STAGE variables are mandatory and used to provide context to Treehugger. They are used to encrypt the variables using KMS’s Encryption Context feature, giving access control and protection against tampering.

You can encrypt the file by running:

treehugger encrypt-file my_app_vars.yml

It’ll be changed to something like:

GITHUB_TOKEN: {encrypted: AQECAHiVqEdWu6BhwWXkqJrEhgPpuDXA3TC1MPUeQb...}
TREEHUGGER_APP: my-app
TREEHUGGER_STAGE: prod

Note that the plaintext variables are not encrypted, only those marked to_encrypt.

Going forwards you can edit the file with:

treehugger edit my_app_vars.yml

This will decrypt the file into a temporary file, open that in your $EDITOR, then once that finishes encrypt it back in place. This avoids any risk of accidentally committing your decrypted secrets.

For deployment, it’s up to you to get the contents of that file into the User Data of the EC2 instance of the application, underneath the key treehugger.

For example, you could pass the contents of the file as a parameter to a CloudFormation template that puts the value into the UserData property of an AutoScaling Group. For example if passed in as a parameter TreehuggerUserData (with extra indentation):

LaunchConfig:
  Type: AWS::AutoScaling::LaunchConfiguration
  Properties:
    UserData:
      Fn::Base64:
        !Sub
        - |
          treehugger:
            ${IndentedTreehuggerUserData}

Then on the EC2 instance your application can be started with:

treehugger exec -- /path/to/application

Treehugger will load the User Data as YAML, extract the dictionary under the ‘treehugger’ key, decrypt the variables marked encrypted, put them into the environment, and then replace itself with a copy of the application using execlp.

N.B. To be sure of the Python you’re using to run Treehugger, you can also run it as a module. For example:

/usr/local/bin/python2 -m treehugger exec -- /path/to/application

Testing

Install and run tox (docs).

Credits

Treehugger was created by Niklas Lindblad and is now maintained by Adam Johnson.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

treehugger-2.1.0.tar.gz (14.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

treehugger-2.1.0-py2.py3-none-any.whl (16.6 kB view details)

Uploaded Python 2Python 3

File details

Details for the file treehugger-2.1.0.tar.gz.

File metadata

  • Download URL: treehugger-2.1.0.tar.gz
  • Upload date:
  • Size: 14.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for treehugger-2.1.0.tar.gz
Algorithm Hash digest
SHA256 4432c2870547262da4731dfe1b29fcaf7b2338b09087b886c1cb3bf5de6fc05e
MD5 559836ab9a986df372789dd3e6dc4768
BLAKE2b-256 63ac90dbed5da5cd46d67fc9464ef37d1755aea36101467d597e34813da84bfb

See more details on using hashes here.

File details

Details for the file treehugger-2.1.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for treehugger-2.1.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 18c4871f3b71baa101d5ca94f3208467c25a79e8212fbe41d5f3a0e04dcc4b50
MD5 f1f63c59bb1bdea68ac8adf5a5617d9d
BLAKE2b-256 dab2dd9b709f5b1389c591cc7f06157b672fed67359f1eaaadf197b9973a03e7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page