Configuration

The virtual signer can be configured with environment variables during deployment.

Note: The VS_* prefix is preferred for all environment variables. Legacy EDG_VS_* variables are supported for backward compatibility.

Contact your io.finnet representative for more information if you would like to understand more about these options.

ConfigurationDescription
Port
VS_Port
Integer
The TCP port opened by the Virtual Signer, part of the URL exposed for device registration.
MPCCoreHost
VS_MPCCoreHost
String
The host name, that will be used by Virtual Signer light instance, to connect to Virtual Signer server instance.
MPCCorePort
VS_MPCCorePort
Integer
Port number, that will be used by Virtual Signer light instance, to connect to Virtual Signer server instance.
LogLevel
VS_LogLevel
String
The log level of the Virtual Signer. Valid values are "info" or "debug".
OrgId
VS_OrgId
String
Optional. The organization ID used when registering a device on launch. Required if InitialDevices is defined.
InitialDevice
VS_INITIAL_DEVICE
String
Optional. Device name to be registered on launch. Requires OrgId.
AuthClientId
VS_AuthClientId
String
The client ID used for authentication along with AuthClientSecret.
AuthClientSecret
VS_AuthClientSecret
String
The client secret used for authentication with AuthClientId.
ApprovalMode
VS_ApprovalMode
String
Determines approval mechanism. Valid values: "API", "SmartContract", or "AlwaysApprove".
ExternalReshareApprovalURL
VS_ExternalReshareApprovalURL
String
The URL of a user API that approves or rejects reshare requests. Required if ApprovalMode="API".
ExternalTransactionApprovalURL
VS_ExternalTransactionApprovalURL
String
The URL of a user API that approves or rejects transactions. Required if ApprovalMode="API".
ApprovalHTTPPublicKeyHex
VS_ApprovalHTTPPublicKeyHex
String
The EdDSA P256 public key (hex-encoded) used to verify HTTP responses from the user API when ApprovalMode="API".
ApprovalNodeRPCAddress
VS_ApprovalNodeRPCAddress
String
Required for "SmartContract" mode. RPC address of an Ethereum or io.network node.
ApprovalSmartContractAddress
VS_ApprovalSmartContractAddress
String
Required for "SmartContract" mode. Smart contract address in hex ("0x...") that approves/rejects requests.
PrometheusPort
VS_PrometheusPort
Integer
Optional.

Cloud Storage Configuration

For AWS and Azure deployments, cloud blob storage can be used instead of local filesystem storage.

ConfigurationDescription
STORAGE_BUCKET_URL
STORAGE_BUCKET_URL
String
Cloud storage URL. Examples:
  • AWS S3: s3://bucket-name?region=us-east-1
  • Azure Blob: azblob://container-name
  • S3-Compatible: s3://bucket?endpoint=https://minio.local
When not set, filesystem storage is used (/var/vsigner).

Recommended: For AWS S3, enable bucket encryption using a customer-managed key in AWS KMS.

Azure Secure Key Release (SKR) Configuration

For Azure deployments, SKR provides hardware-attested encryption for data at rest. SKR is automatically enabled when all three required parameters are set.

ConfigurationRequiredDescription
VS_SKR_AKV_ENDPOINTYes*Azure Key Vault URL (e.g., https://your-vault.vault.azure.net)
VS_SKR_MAA_ENDPOINTYes*Azure Attestation URL (e.g., https://sharedeus.eus.attest.azure.net)
VS_SKR_KEY_IDYes*Key identifier in Azure Key Vault (exportable symmetric key)
VS_SKR_ENDPOINTNoSKR sidecar endpoint (default: http://localhost:8080)
VS_SKR_ACCESS_TOKENNoBearer token for sidecar auth (when managed identity unavailable)

* Required to enable SKR. When all three are set, SKR encryption is automatically enabled.

Self-Hosted Encryption at Rest

For self-hosted deployments without Azure infrastructure, you can enable encryption at rest using a static AES-256-GCM key.

ConfigurationDescription
VS_ENCRYPTION_KEY

Hex-encoded 32-byte (64 character) AES-256 key for encrypting data at rest.

Generate with: openssl rand -hex 32

Important: Store this key securely (e.g., Docker secrets, HashiCorp Vault). If lost, encrypted data cannot be recovered.

Note: VS_ENCRYPTION_KEY and SKR (VS_SKR_*) are mutually exclusive. Use one or the other, not both.

Docker Compose example:

environment:
  # Generate with: openssl rand -hex 32
  VS_ENCRYPTION_KEY: "your-64-character-hex-key-here"

Backward compatibility: When encryption is enabled, the Virtual Signer can still read existing plaintext data. New writes are encrypted. Re-saving a file encrypts it opportunistically.