secrets

package
v0.0.0-...-8caed39 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 18, 2026 License: OSL-3.0 Imports: 19 Imported by: 0

Documentation

Overview

Package secrets provides cloud-agnostic secret management

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type AWSResolver

type AWSResolver struct {
	// contains filtered or unexported fields
}

AWSResolver implements Resolver for AWS Secrets Manager.

func NewAWSResolver

func NewAWSResolver(ctx context.Context, region string) (*AWSResolver, error)

NewAWSResolver creates a new AWS Secrets Manager resolver.

func (*AWSResolver) Close

func (r *AWSResolver) Close() error

Close cleans up resources (no-op for AWS).

func (*AWSResolver) GetSecret

func (r *AWSResolver) GetSecret(ctx context.Context, secretID string) (string, error)

GetSecret retrieves a secret from AWS Secrets Manager.

func (*AWSResolver) GetSecretJSON

func (r *AWSResolver) GetSecretJSON(ctx context.Context, secretID string) (map[string]any, error)

GetSecretJSON retrieves and parses a JSON secret.

func (*AWSResolver) ListSecrets

func (r *AWSResolver) ListSecrets(ctx context.Context, filter string) ([]string, error)

ListSecrets lists secrets in AWS Secrets Manager.

func (*AWSResolver) PutSecret

func (r *AWSResolver) PutSecret(ctx context.Context, secretID, value string) error

PutSecret creates or updates a secret value in AWS Secrets Manager.

type AzureResolver

type AzureResolver struct {
	// contains filtered or unexported fields
}

AzureResolver implements Resolver for Azure Key Vault.

func NewAzureResolver

func NewAzureResolver(ctx context.Context, vaultURL string) (*AzureResolver, error)

NewAzureResolver creates a Key Vault resolver using the shared metadata-blocking transport.

func (*AzureResolver) Close

func (r *AzureResolver) Close() error

Close cleans up resources (no-op for Azure).

func (*AzureResolver) GetSecret

func (r *AzureResolver) GetSecret(ctx context.Context, secretID string) (string, error)

GetSecret retrieves a secret from Azure Key Vault.

func (*AzureResolver) GetSecretJSON

func (r *AzureResolver) GetSecretJSON(ctx context.Context, secretID string) (map[string]any, error)

GetSecretJSON retrieves and parses a JSON secret.

func (*AzureResolver) ListSecrets

func (r *AzureResolver) ListSecrets(ctx context.Context, filter string) ([]string, error)

ListSecrets lists secrets in Azure Key Vault.

func (*AzureResolver) PutSecret

func (r *AzureResolver) PutSecret(ctx context.Context, secretID, value string) error

PutSecret creates or updates a secret in Azure Key Vault.

type Config

type Config struct {
	// Provider specifies which secret manager to use
	// Valid values: "aws", "gcp", "azure", "env"
	Provider string

	// AWS specific
	AWSRegion string

	// GCP specific
	GCPProjectID string

	// Azure specific
	AzureVaultURL string
}

Config holds secrets resolver configuration.

func LoadConfigFromEnv

func LoadConfigFromEnv() *Config

LoadConfigFromEnv loads resolver configuration from environment variables. Defaults to the "env" (environment variable) provider when SECRET_PROVIDER is unset, which is suitable for local development only. In production, ensure SECRET_PROVIDER is explicitly set (aws, gcp, or azure) to avoid accidental use of the dev-only resolver.

type EnvResolver

type EnvResolver struct{}

EnvResolver implements Resolver using environment variables This is useful for local development where secrets are stored as env vars.

func NewEnvResolver

func NewEnvResolver() *EnvResolver

NewEnvResolver creates a new environment variable resolver.

func (*EnvResolver) Close

func (r *EnvResolver) Close() error

Close cleans up resources (no-op for environment variables).

func (*EnvResolver) GetSecret

func (r *EnvResolver) GetSecret(ctx context.Context, secretID string) (string, error)

GetSecret retrieves a secret from environment variables. secretID is the environment variable name. Note: both "variable not set" and "variable set to empty string" return an error, meaning intentionally-empty secret values are not supported by this resolver. This is consistent with cloud-provider resolvers that also reject empty values.

func (*EnvResolver) GetSecretJSON

func (r *EnvResolver) GetSecretJSON(ctx context.Context, secretID string) (map[string]any, error)

GetSecretJSON retrieves and parses a JSON secret from environment variable.

func (*EnvResolver) ListSecrets

func (r *EnvResolver) ListSecrets(ctx context.Context, filter string) ([]string, error)

ListSecrets lists all environment variables matching the filter (prefix).

func (*EnvResolver) PutSecret

func (r *EnvResolver) PutSecret(_ context.Context, _, _ string) error

PutSecret is not supported for environment variables. EnvResolver is read-only; use a real secret provider (aws/gcp/azure) for writes.

type GCPResolver

type GCPResolver struct {
	// contains filtered or unexported fields
}

GCPResolver implements Resolver for GCP Secret Manager.

func NewGCPResolver

func NewGCPResolver(ctx context.Context, projectID string) (*GCPResolver, error)

NewGCPResolver creates a new GCP Secret Manager resolver.

func (*GCPResolver) Close

func (r *GCPResolver) Close() error

Close cleans up resources.

func (*GCPResolver) GetSecret

func (r *GCPResolver) GetSecret(ctx context.Context, secretID string) (string, error)

GetSecret retrieves a secret from GCP Secret Manager.

func (*GCPResolver) GetSecretJSON

func (r *GCPResolver) GetSecretJSON(ctx context.Context, secretID string) (map[string]any, error)

GetSecretJSON retrieves and parses a JSON secret.

func (*GCPResolver) ListSecrets

func (r *GCPResolver) ListSecrets(ctx context.Context, filter string) ([]string, error)

ListSecrets lists secrets in GCP Secret Manager whose short name has the given prefix. The Resolver interface documents GCP as using prefix matching (strings.HasPrefix); to honor that contract the filter is applied client-side after listing, because GCP's ListSecrets.Filter field accepts an expression language (not a simple name prefix) and the two semantics are incompatible. The API request is sent without a Filter so we always get the full list; for projects with very large numbers of secrets callers should prefer GetSecret by exact name.

func (*GCPResolver) PutSecret

func (r *GCPResolver) PutSecret(ctx context.Context, secretID, value string) error

PutSecret adds a new version to an existing secret in GCP Secret Manager. Note: unlike AWS, GCP requires the secret resource to already exist — this function only appends a new version. It will return an error if the secret has not been pre-created via CreateSecret.

type Resolver

type Resolver interface {
	// GetSecret retrieves a secret value by ID/ARN/name
	GetSecret(ctx context.Context, secretID string) (string, error)

	// GetSecretJSON retrieves a secret and parses it as JSON
	GetSecretJSON(ctx context.Context, secretID string) (map[string]any, error)

	// PutSecret creates or updates a secret value by ID/ARN/name
	PutSecret(ctx context.Context, secretID, value string) error

	// ListSecrets lists available secrets.
	// Filter behavior varies by provider:
	//   - AWS: uses API-side substring matching (FilterNameStringTypeName)
	//   - Azure: uses prefix matching (strings.HasPrefix)
	//   - GCP: uses prefix matching (strings.HasPrefix)
	//   - Env: uses prefix matching (strings.HasPrefix)
	ListSecrets(ctx context.Context, filter string) ([]string, error)

	// Close cleans up any resources
	Close() error
}

Resolver defines the interface for retrieving secrets from various secret managers.

func NewResolver

func NewResolver(ctx context.Context, config *Config) (Resolver, error)

NewResolver creates a new secret resolver based on the provider.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL