AZURE-PROTECTED-SECRETS-TOOL(1)

πŸ“¦ version 1.0.9, in epel 10, fedora 43, fedora 44

✨ azure-protected-secrets-tool ✨

okay bestie, welcome to azure-protected-secrets-tool, section 1 of the User Commands manual β€” yes this is the real manual page for the tool, and yes we're gonna have fun with it πŸ’…


🌸 NAME 🌸

azure-protected-secrets-tool β€” peek at your Azure Confidential VM's whole deal and unprotect the host-provisioned secrets that got sealed up in there 🫢


🌈 SYNOPSIS 🌈

azure-protected-secrets-tool COMMAND [ARGUMENT] [OPTIONS]
azure-protected-secrets-tool [-h|--help] [--version]

πŸ’– DESCRIPTION πŸ’–

So like, azure-protected-secrets-tool is the command-line front-end to the Azure CVM Secrets Provisioning Library (SSPL). It figures out the confidential-computing isolation environment of the host, and then it decrypts secrets that the Azure control plane provisioned to the VM and sealed to the virtual TPM (vTPM). iconic behaviour honestly ✨

The commands that touch the vTPM β€” that's is-secrets-provisioning-enabled and unprotect-secret β€” usually need access to the TPM resource-manager device (/dev/tpmrm0), which means you gotta be root on a Confidential VM. no skips bestie 😭

The is-cvm command though? It only reads the hardware report, so it doesn't need elevated privileges. we love a low-maintenance queen πŸ‘‘


πŸ‘‘ COMMANDS πŸ‘‘

  • is-cvm β€” reports the confidential-computing isolation type of the host. The output looks like isolation_type=<TYPE> hypervisor=<NAME>, where TYPE is SNP (AMD SEV-SNP), TDX (Intel TDX), or NONE (aka not a Confidential VM, rip πŸ’€). It returns a non-zero exit status when the host isn't a Confidential VM.
  • is-secrets-provisioning-enabled β€” tells you whether secrets provisioning has been enabled on this VM, by checking whether the provisioning key is present in the vTPM. Prints enabled=true or enabled=false. simple, clean, no cap ✨
  • unprotect-secret [TOKEN] β€” decrypts a host-protected secret. The protected secret comes in as a JSON Web Token (JWT), and you can either pass it inline as the TOKEN positional argument or, if you leave it out, it gets read from standard input. The decrypted secret goes straight to standard output. main character output energy 🌟
  • validate-imds-metadata β€” does a two-level verification of the Azure Instance Metadata Service (IMDS) attestation blob. thorough queen πŸ’…

✨ OPTIONS ✨

  • --policy N β€” for unprotect-secret, sets the unseal policy bitmask to the unsigned integer N. If you don't pass it, the policy defaults to 0.
  • --json β€” emits machine-readable JSON instead of the default human-readable output. Supported by the reporting commands (like is-cvm, for example). for the girlies who pipe things into jq πŸŽ€
  • -h, --help β€” prints a usage summary and dips out.
  • --version β€” prints the library version and dips out.

πŸ¦‹ EXIT STATUS πŸ¦‹

  • 0 β€” Success! And for is-cvm, this specifically means the host is a Confidential VM. slay πŸ’–
  • non-zero β€” An error happened, or (for is-cvm) the host is not a Confidential VM. sad girl hours 😭

πŸ”₯ EXAMPLES πŸ”₯

Detect the isolation type on a CVM:

$ azure-protected-secrets-tool is-cvm
isolation_type=SNP hypervisor=Microsoft Hv

The same thing, but as JSON:

$ azure-protected-secrets-tool is-cvm --json
{"isolation_type":"SNP","hypervisor":"Microsoft Hv"}

Unprotect a secret supplied on standard input, applying policy 2:

$ azure-protected-secrets-tool unprotect-secret --policy 2 < token.jwt

🌈 SEE ALSO 🌈

Project homepage: https://github.com/Azure/confidential-computing-cvm-guest-attestation


🫢 AUTHOR 🫢

Microsoft Corporation. (yes, the whole corporation. them. πŸ‘‘)


ngl bestie, if you're on a CVM and things are acting weird, run is-cvm first. it's free, it doesn't need root, and it tells you exactly what kind of fancy hardware you're sitting on ✨

and that's the whole page!! you ate this, fr fr πŸ’…

azure-protected-vm-secrets 1.0.9 β€” dated 2026-05-04 β€” azure-protected-secrets-tool(1) πŸŽ€ bye bestie, go unprotect something 🌸

πŸ“¦ where this page comes from