The FlossWare Platform implements secure secrets management to prevent credential exposure in configuration files, logs, and backups. Credentials are no longer stored in plaintext and are instead referenced from external secret management systems or environment variables.
- No Plaintext Credentials - Credentials never stored in YAML descriptors
- Encrypted Storage - Secrets stored in external systems (Vault, AWS)
- Auditability - Secret access logged with audit trails
- Rotability - Credentials rotatable without code changes
- No Leakage - Credentials masked in all logs and errors
The simplest solution. Secret values injected as environment variables at deployment.
Configuration:
classpath:
- url: https://repo.example.com/libs
auth:
type: basic
username: ${REPO_USERNAME}
password: ${REPO_PASSWORD}Deployment:
export REPO_USERNAME=myuser
export REPO_PASSWORD=mypassword
java -Dplatform.config=application.yaml ...Three new classes in platform-api:
- SecretsProvider - Interface for secret retrieval
- EnvironmentVariablesSecretsProvider - Environment variable implementation
- CredentialMasker - Utility for masking credentials in logs
- Added
resolveSecret()method for credential resolution - Updated
getAuthFromDescriptor()to resolve secrets - Never logs plaintext credentials
- Supports ${VARNAME} syntax for environment variables
- Added
resolveProperty()method for custom secret resolution - Updated documentation to mention environment variable support
- Replace plaintext credentials with
${VAR_NAME}references - Set environment variables before deployment
- Verify no credentials in logs or version control
Comprehensive tests included:
- EnvironmentVariablesSecretsProviderTest
- CredentialMaskerTest
- IsolatedClassLoaderTest enhancements for environment variable resolution
GitHub Issue #323: SECURITY - Implement Secrets Management for Credential Storage
Addresses:
- Credentials in plaintext in YAML files
- Passwords logged in debugging output
- Credentials in configuration backups
- No encryption at rest
- No credential rotation mechanism