Documentation
¶
Overview ¶
Package secrets provides cloud-agnostic secret management
Index ¶
- type AWSResolver
- func (r *AWSResolver) Close() error
- func (r *AWSResolver) GetSecret(ctx context.Context, secretID string) (string, error)
- func (r *AWSResolver) GetSecretJSON(ctx context.Context, secretID string) (map[string]any, error)
- func (r *AWSResolver) ListSecrets(ctx context.Context, filter string) ([]string, error)
- func (r *AWSResolver) PutSecret(ctx context.Context, secretID, value string) error
- type AzureResolver
- func (r *AzureResolver) Close() error
- func (r *AzureResolver) GetSecret(ctx context.Context, secretID string) (string, error)
- func (r *AzureResolver) GetSecretJSON(ctx context.Context, secretID string) (map[string]any, error)
- func (r *AzureResolver) ListSecrets(ctx context.Context, filter string) ([]string, error)
- func (r *AzureResolver) PutSecret(ctx context.Context, secretID, value string) error
- type Config
- type EnvResolver
- func (r *EnvResolver) Close() error
- func (r *EnvResolver) GetSecret(ctx context.Context, secretID string) (string, error)
- func (r *EnvResolver) GetSecretJSON(ctx context.Context, secretID string) (map[string]any, error)
- func (r *EnvResolver) ListSecrets(ctx context.Context, filter string) ([]string, error)
- func (r *EnvResolver) PutSecret(_ context.Context, _, _ string) error
- type GCPResolver
- func (r *GCPResolver) Close() error
- func (r *GCPResolver) GetSecret(ctx context.Context, secretID string) (string, error)
- func (r *GCPResolver) GetSecretJSON(ctx context.Context, secretID string) (map[string]any, error)
- func (r *GCPResolver) ListSecrets(ctx context.Context, filter string) ([]string, error)
- func (r *GCPResolver) PutSecret(ctx context.Context, secretID, value string) error
- type Resolver
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) GetSecretJSON ¶
GetSecretJSON retrieves and parses a JSON secret.
func (*AWSResolver) ListSecrets ¶
ListSecrets lists secrets 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) GetSecretJSON ¶
GetSecretJSON retrieves and parses a JSON secret.
func (*AzureResolver) ListSecrets ¶
ListSecrets lists secrets 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 ¶
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 ¶
GetSecretJSON retrieves and parses a JSON secret from environment variable.
func (*EnvResolver) ListSecrets ¶
ListSecrets lists all environment variables matching the filter (prefix).
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) GetSecretJSON ¶
GetSecretJSON retrieves and parses a JSON secret.
func (*GCPResolver) ListSecrets ¶
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.