Passer au contenu

How to use SOPS + age

Le contenu de cette page n'est pas encore traduit dans votre langue. Vous pouvez consulter la version originale en anglais.

As we saw earlier, SOPS supports multiple formats and encryption backends. In this guide, we will focus on using SOPS with age for encrypting sensitive files like *.tfvars, terraform.tfstate, and other secrets.

Terminal window
mkdir $env:APPDATA\sops\age
age-keygen -o $env:APPDATA\sops\age\keys.txt

Grab your public key:

Terminal window
grep public /path/to/keys.txt
# public key: age1xxxx...

There are multiple ways to encrypt a file using age with SOPS:

Terminal window
sops -e --age age1xxxx...,age1yyyy... opentofu.auto.tfvars > opentofu.auto.tfvars.enc

This encrypts the file using the provided public age keys.

Terminal window
export SOPS_AGE_RECIPIENTS="age1xxxx...,age1yyyy..."
sops -e opentofu.auto.tfvars > opentofu.auto.tfvars.enc

This is useful when scripting or storing your recipient key in an environment configuration.

You can also specify the recipient in a .sops.yaml file in your repository:

.sops.yaml
creation_rules:
- path_regex: \.tfvars(\.json)?$
encrypted_regex: "^(.*)$"
age: "age1xxxx...,age1yyyy..."

Using .sops.yaml is best for projects as it avoids setting env variables or using the age flag, enabling consistent, automatic encryption config.

Terminal window
sops -d opentofu.auto.tfvars.enc
Terminal window
sops -d opentofu.auto.tfvars.enc > opentofu.auto.tfvars

You can also use SSH keys for encryption and decryption. This is particularly useful if you already manage SSH keys for other purposes.

Terminal window
sops -e --age "$(cat ~/.ssh/id_ed25519.pub)" opentofu.auto.tfvars > opentofu.auto.tfvars.enc

By default, SOPS will try to decrypt using the following SSH private keys (in order):

  • ~/.ssh/id_ed25519
  • ~/.ssh/id_rsa

If your private key is stored in a custom location or if you manage multiple keys, you can explicitly specify which one to use:

Terminal window
export SOPS_AGE_SSH_PRIVATE_KEY_FILE=~/.ssh/id_rsa
sops -d opentofu.auto.tfvars.enc > opentofu.auto.tfvars
  • Never commit decrypted files (*.tfvars, *.tfstate, secrets.json, secrets.yaml, .env etc.)
  • Use .gitignore to exclude them
  • Always encrypt before pushing
  • Share only the public key
  • Store private keys securely (e.g., in a password manager or vault)

References