chalice icon indicating copy to clipboard operation
chalice copied to clipboard

Setting environment variables securly

Open yuvadm opened this issue 1 year ago • 3 comments

Documentation states that all environment variables, global or per-stage, should be set in .chalice/config.json.

However, assuming config.json is committed to source control, this is a bad practice that commit secrets to a shared project.

Setting environment variables directly through the AWS Lambda web UI is a non-solution since they will be deleted / overridden on the next chalice deploy.

What's the best way to store env vars in a secure way that also allows committing config.json to source control?

yuvadm avatar May 27 '24 12:05 yuvadm

Maybe use AWS Systems Manager and then fetch at runtime as a best practice, and a secure solution

AmirFone avatar Jun 03 '24 02:06 AmirFone

@AmirFone interesting proposal, but right now I'm using a very lean deployment of Lambda/Chalice and would prefer a solution that does not involve any additional AWS products that will bloat my deployment.

yuvadm avatar Jun 03 '24 07:06 yuvadm

An intermediary solution is to commit config.json.default like this:

{
  "stages": {
      "prod": {
        "environment_variables": {
          "MY_SECRET_KEY": "$MY_SECRET_KEY"
        }
     }
  }
}

Then, just before plan+deploy call (In ci/cd or manual script): cat .chalice/config.json.default | envsubst > .chalice/config.json This will replace $MY_SECRET_KEY with what is currently inside MY_SECRET_KEY env variable.

Of course, the secret will be present in the deployed archive, (make sure it is eventually destroyed) but at least it is not committed.

Ecitperbo avatar Oct 03 '24 08:10 Ecitperbo