Type something to search...
Secrets Management DevOps Tools and More

Secrets Management DevOps Tools and More

These tools provide a means of securely storing secrets (encryption keys, passwords, all that good stuff that you want to make available to your production systems, but you must protect from exposure) I started my research with This Reddit Post

Simple Tools

💫 SOPS: Simple and flexible tool for managing secrets: getsops.io | SOPS: github: SOPS allows the encryption of secrets directly in the configuration files from which your applications load them. Using SOPS, secrets are decrypted at runtime.

👉 using SOPS is kind of a pain, but it doesn’t involve relying on any external webservices. It supports encrypting secrets using PGP (and that got me stuck on looking at all…. It works as follows.

👉 create a sops.yaml file in the root of your project, this file will at minimum need to specify the fingerprint for the pgp key you’ll use to encrypt secrets. It supports other methods… but why? I’m not interested.

    creation_rules:
  - path_regex: ./*
    pgp: 'FA2A456F0B079A46CDE2E2275D2D'

👉 move your .env file variables into a json file, converting the list of variables to a dictionary.

#env.json
{"SECRET1":"SECRET1VAL", "SECRET2":"SECRET2VAL", ... "SECRETN":"SECRETNVAL"}

👉 run sops encrypt env.json > env.enc.json which will encrypt the individual values within the file. Take a look.

👉 run sops exec-env env.enc.json <your app launch command> any application launched with sops exec-env <encrypted secrets file> will have environment variables defined for each key in the json array… which is why we converted our .env variables to json keys. To use this, make sure your app doesn’t specifically need the .env file. I got some warnings that I think came from python dotenv, but it all seems to be working fine anyway.


🤢 pass the standard unix password manager bleh…

Components of Larger Software Packages

🪐 Portainer.io: Container management for Docker and Kubernetes with a built in system for managing secrets | How to create and manage Kubernetes Secrets in Portainer

🪐 Ansible Vault

Webservice Based Solutions

😐 Arctera Enterprise Vault

VaultPlusPlus: looks promising, but command is provided binary only and it doesn’t seem to work on my fedora kinoite system

🧐 AWS Secrets Manager$0.40 per secret/month, $0.05 per 10k API Calls so pretty reasonable… except my newest app has like a dozen secrets at least. There are free options below that will be much less expensive,but less full-featured.

🤦 1password.com: User Account is 2.99, but I think the $19.99 package is necessary to access the secrets management for web applications.

⚠️ Evervault: Free edition limited to 500 decrypts/mo which, depending on how your project is coded, could be plenty or not nearly enough


✅ 👌😎🧸 Infisical: Free edition is entirely usable

👉🤛 Using infisical:fairly simple cli usage,

‍👉 first install (rpm, apt, or npm),

👉 go to the directory for the project where you want to create an association with an infisical project, runinfisical init and choose the appropriate project

👉 now you can prefix any command with infisical run --env=<dev,staging,production> --path=/path/to/application <application start command>.

👉 Alternately, you can run infisical secrets --env=<dev,staging,production> and it will print out a table SECRET NAME | SECRET VALUE | SECRET TYPE.


✅ 🚀🔮🪐Doppler: Free edition is entirely usable: similar cli usage to Infisical.

🧿 first install (rpm, apt, or shell-script -for the shell-script option on fedoria ostree based installs, you must save install.sh and edit it setting USE_PACKAGE_MANAGER=0 then run it as root)

💫 run doppler login to get a token

☄️ go to the directory for the project where you want to create an association with a doppler project and run doppler setup and choose the appropriate project

🌌 now you can prefix any command with doppler run --command= for example, the simplest case, to verify the secrets are accessible, if you created a secret called TEST_SECRET run doppler run --command="echo \$TEST_SECRET" it should print the secret value to the screen demonstrating that it is now available as an environment variable.


⚠️🤦Hashicorp Vault: Was Free, now Requires Hasicorp Dedicated 💵$400+/month.

😐 Pulumi IaC ESC : Pulumi is an infratructure as Code Provider.

Summary

In experimenting with the reccomendations from the reddit post I found Doppler and Infisical to be the best webservice options… really the only useable ones.


Ubiq: Encryption for Everything

Not exactly a secrets manager, but an interesting service that I feel like mentioning anyway. Designed to be very easy to implement so that no sensitive data need be left unencrypted at rest.

UBIQ It might be possible to setup a workflow using ubiq for secrets management since it provides such generic access to encryption.


Post Quantum Cryptography

and that got me stuck on looking at all… the new encryption types that have appeared in the latest version of gnupg. unfortunately none are quantum safe, even though it sounds like the algorithms exist.

🔮 Post Quantum Cryptography PQC

👨‍💻 Shor’s Algoritm: theoretically capable of defeating all traditonal assymetric key encryption given sufficient quantum computing resources. (RSA, and all variations of the elliptic-curve) because of its potential to be able to factor large numbers. Not proven yet, but theoretical possibility is probable enough to warrant the development of new methods for genration asymmetric keypairs. So far the following have been proposed:

Post-quantum cryptography research is mostly focused on six different approaches:

🔏 Lattice Based Cryptography

🔑 Multivariate cryptography

🗝 Hash Based Cryptography

💻 Code-based cryptography

🔢 Isogeny-based cryptography

🔐 Symmetric key quantum resistance

🕵🛡️ Hybrid encryption is often recommended, where data is encrypted with both a new Post Quantum Encryption Technology as well as an existing proven non Post Quantum encryption technology like ed25519. This way if the new algorithm turns out to be vulnerable to a non-quantum attack, then the data will be protected by the well tested, but not quantum safe algorithm. This is a good idea since there is a lot of risk with the new algorithms simply because they are that new.

Related Posts

Horizontal Scaling in Kubernetes

Horizontal Scaling in Kubernetes

Horizontal scaling in Kubernetes refers to dynamically adjusting the number of application instances (pods) based on workload changes to maintain optimal performance. Unlike vertical scaling, which in

read more
How to Use Docker for Development Environments

How to Use Docker for Development Environments

When developing an application running in Docker, you can edit the files on your local machine and have those changes immediately reflected in the running container. This is typically done using Docke

read more
CLI pager commands - more, less, and most

CLI pager commands - more, less, and most

These PAGER commands allow you to navigate through file and data stream content with a variety of useful commands. If you need to manually visually navigate through a lot of text or data, you'll f

read more
Defining New ASCII Designs For Thomas Jensens Boxes Software

Defining New ASCII Designs For Thomas Jensens Boxes Software

The "Boxes" command line tool takes a block of text and wraps it in one of 50 some frames listed with boxed -l and specified by the user with boxes -d the text can either be piped into boxed or a

read more
Javascript ES6 Modules, Introduction

Javascript ES6 Modules, Introduction

With the release of ECMAScript 2015 (ES6), JavaScript introduced a powerful new feature: modules. This addition was a significant shift in how developers structure and manage code, allowing for better

read more
Understanding JavaScript Promises

Understanding JavaScript Promises

In JavaScript, the concept of thenables often arises when working with Promises. Promises inherit from the base class Thenable, meaning that Promises are a type of Thenable, but a Thenable is not

read more
Part 4, Dynamic Imports and Lazy Loading

Part 4, Dynamic Imports and Lazy Loading

Introduction So far, we’ve explored the world of static imports in JavaScript, where dependencies are imported at the start of a script’s execution. However, in modern web development, there are c

read more
Understanding JavaScript Promises and Lazy Loading Callbacks

Understanding JavaScript Promises and Lazy Loading Callbacks

In JavaScript, thenables play a key role in asynchronous programming, particularly with Promises in ES6. One of the advantages of ES6 Promises (which use thenables) over older implementations like

read more
Part 2, Understanding Named and Default Exports

Part 2, Understanding Named and Default Exports

Introduction In the previous part, we introduced the basics of importing and exporting in JavaScript ES6, covering both named and default exports. Now, it’s time to explore these t

read more
Part 1, Getting Started with Modules

Part 1, Getting Started with Modules

Introduction Before ES6, JavaScript did not have a native module system, which made it difficult to split large codebases into manageable pieces. Developers relied on patterns like the Module Patt

read more
Part 3, Re-exports and Module Aggregation

Part 3, Re-exports and Module Aggregation

Introduction As projects grow, the number of modules and dependencies can quickly become overwhelming. In large codebases, managing and organizing these modules is key to maintaining readability a

read more
Managing Multiple Git Identities Per Single User Account

Managing Multiple Git Identities Per Single User Account

If you need to work make changes to code under different identities, there are a few different ways you can approach this. The first solution I saw on many webpages was way too clunky for my taste. It

read more
Secure Authentication & Authorization Exercises

Secure Authentication & Authorization Exercises

Each exercise includes:Scenario Initial Information Problem Statement Tasks for the student Bonus Challenges for deeper thinking**Section 1: OAuth 2.0 + PKCE

read more
Never Been a Huge Fan of IDEs, but I Like Visual Studio Code

Never Been a Huge Fan of IDEs, but I Like Visual Studio Code

To be completely honest, for the past many years, I've debated whether or not to use an IDE. On one had, they provide a number of features like code completion, debugging, and a number of other things

read more
Powerful Text Selection Operations in VSCode

Powerful Text Selection Operations in VSCode

VSCode has become one of the most popular IDEs in recent years. It is also available for free. Here are a few text selection options of which you may not be aware. Multiple Selections It is possi

read more
Visual Studio Code - Creating a Custom Text Filter Extension

Visual Studio Code - Creating a Custom Text Filter Extension

In this post I will describe a way to create an extension which allows the user to receive the selected text as a string passed into a Typescript function, run that string through any command line pro

read more
What is Docker and Where and Why Should You Use it?

What is Docker and Where and Why Should You Use it?

Docker is a platform designed for containerization, allowing developers to package applications and their dependencies into lightweight, portable containers. These containers are isolated environments

read more
What is Kubernetes? Where and Why Should You Use it?

What is Kubernetes? Where and Why Should You Use it?

Key Use Cases and Benefits Kubernetes simplifies the deployment and scaling of applications through automation. It facilitates automated rollouts and rollbacks, ensuring seamless updates without d

read more
Web Application Boilerplate

Web Application Boilerplate

I've been tinkering with a number of projects and along the way I've come up with what I think is a solid starting point for any web application that you might build. Understanding that your applicat

read more
Part 5, Best Practices and Advanced Techniques

Part 5, Best Practices and Advanced Techniques

In the previous parts of this series, we explored the fundamentals of module importing and exporting in ES6, the different ways to define modules, and how to work with default and named exports. In th

read more
Using Makefiles, SOPS, and virtualenv Together for Elegant Python Environments

Using Makefiles, SOPS, and virtualenv Together for Elegant Python Environments

I've been managing my secrets with sops ever since I looked into the subject last month, and I've been using Makefiles to handle bringing up my docker environments as they provide a nice way to not

read more