DEV Community

Konrad Kurek
Konrad Kurek

Posted on

Secrets 101: A fun and practical basic guide to avoiding leaks and not becoming a meme

Ah, secrets - the underrated unsung heroes of software development powering your apps, securing your data, and sometimes making into public GitHub repositories.

Funny meme

-- Image from Reddit --

Sensitive data leaked, accident? Intention? We will never know. But what we know is this: how to manage secrets securely is not optional, it's a must-have skill for every developer. Let's get into how to avoid making headlines with bad news.


πŸ€” Why Should You Care About Secrets Management?

Secrets are just the backstage passes of the app: the keys to databases and APIs, among other things. Unfortunately, bad things happen when you mishandle secrets, such as:

  • A data breachπŸ“‰
  • Unauthorized entry🚨
  • Unplanned costs associated with abuse of paid services. πŸ’°
  • An embarrassing moment in your team's Slack channelπŸ˜…

The risks extend beyond just development as it's just as important to keep sensitive values (like the production database credentials) secure during deployment.

Let's break it down into how you can securely handle secrets in both development and deployment.


πŸ” Secrets and Version Control: Best Practices

Version control systems like Git are indispensable for teamwork, but they can also expose secrets if not handled carefully.
🚫 What Not to Do:

  • Don't upload .env or secrets files directly to your repository. (always place file names in .gitignore)
  • Don't hardcode sensitive values in your source code.
  • Don't name files something like super_secret.json and think nobody would notice.

βœ… Better Way:

The golden rule is to encrypt and centralize your secrets. Here's how:

  • Encrypt your secrets or .env file before going ahead to commit them to the repository. πŸ”’

Not encrypted:

$ cat .env
API_KEY=<your_api_key>
DB_PASSWORD=<your_db_password>
...
Enter fullscreen mode Exit fullscreen mode

Encrypted:

$ cat .env.encrypted
AH6Z9YQAUZyy3SrYZcbqge6QvWtC93f/d853XfVBm8qOvepGLUGvoRfMW7urZpjIsfWy4wb4c3T4p7LQ
Enter fullscreen mode Exit fullscreen mode

☝️ Better, more secure, able to be "accidentaly" (or notπŸ˜‚) shared?

  • Enabling a shared decryption key to allow a team of members access to such a file locally. πŸ”‘
  • Automate such encryption with a lightweight script for easy onboarding of new developers with some simple instructions. πŸ› οΈ
  • Always keep unencrypted env files in .gitignore, better not to have one that have leaked one ! I know that I'm redundant in this but it is basic rule. 🀌

This keeps your secrets safe even if someone accidentally finds this encrypted file in your repository.


πŸ’₯ Keeping Secrets Secure During Deployment

Ideal secrets management does not come to an end soon after your code goes into production. Just as important is its deployment phase, during which sensitive values are protected and never let out into logs, errors, or (may this never happen) public dashboards.

Here are several best practices for deployment:

  • Use environment variables for injecting secrets at run time; that way, they won't be in your codebase.
  • Rotate passwords and keys regularly: That little effort today might save gaining a big headache later.
  • Utilize safe CI/CD expose secret inject during builds and deployments.

Automation is in your corner on this one: secrets should be touched in as little manual fashion as possible. πŸ€–


☁︎ Think about cloud providers key management options

There are plenty of options, You or your company may use one of them that will make easier to keep encrypted variables safe. Established secret management solutions such as HashiCorp Vault, AWS Secrets Manager, or Azure Key Vault are probably best options for medium to large projects/companies. You may also use mentioned services as keystore for your encrypted env files. But personally when I hear cloud i have πŸ€‘ such a facial expression. For no-cost or small projects cloud services may be overkill.


🀝 A Helping Hand

This section contains self-promotion, you can safely skip it, but I would appreciate reading it.

You may use corporate grade solutions that will protect your sensitive data, but if you are sole developer or work in small team those solutions may be - as stated in previous section - overkill. So...

Idea for creating EnvCloak was forged from a need for a cool lightweight development tool that makes secrets easy to manage in development and deployment process.
How may it help you in your work:

  • Secure and controled handling of .env and all other sensitive files.
  • Collaboration supportive tool.
  • Seamlessly integrates secrets management into your CI/CD workflows.

This tool is one in a stream of answering the challenge of secret management in an organization. Whether you will choose to use it or any other, the main aim is to make things easy in workflow and secure entry of the secrets. πŸš€


πŸ—‚οΈ One Central File to Rule Them All

The best way to do secrets management is to centralize your sensitive values. Having all secrets in a single secure file (and well encrypted of course) will:

  • Lower Duplication.
  • Reduce the likelihood of accidental exposure.
  • Simple Update across teams and environments.

It's organized, safe, and always ready approach for development process. And naming it do_not_open.txt.encrypted (without encryption at all) is not considered as secure. πŸ˜‚


Conclusive ThoughtsπŸ’­

It is possible that manipulating secrets may not seem the most exciting part of software development, but it is an essential activity. By following best practices such as encryption, automation, and centralization, one will avoid leaks. Also, it will save a great deal of time in future troubles and make systems secure.

You are supposed to remember whenever you are tempted to commit that .env file: all this effort seems really small compared to what goes into - protecting your team, and securing those secrets-your API keys will steer clear of memes. ✌️.

Keep yourself and your sensitive data secured πŸ”
And wish you not to become meme πŸ˜‰

Top comments (0)