Hey Joel,
Many thanks for the thorough response.
Regarding what has been mentioned:
When fetching secrets for a config, secret references are fully resolved… That said, you could potentially create a third config in Doppler that combines all the secrets via secret references. You could then fetch those secrets via the CLI using a single service token. Would something like that work for you?
This could potentially work if the secrets store was not integrated in any way to external providers (that way only Doppler knows and has control over it, similar to a projected view).
Despite this being an unintuitive setup (since we would need to maintain 3 separate environments to generate a view for a single use-case), I think it functionally serves the basic needs at the cost of extra maintenance.
# ENV 1 - Insensitive Paramaters Only
environment: stg
integration: AWS Parameters Store
secrets: Non-sensitive secrets
used by: None
# ENV 2 - Sensitive Paramaters Only
environment: stg-secrets
integration: AWS Secrets Manager
secrets: Sensitive secrets
used by: None
# ENV 3 - Projected View Only
environment: stg-view
integration: None
secrets: Purely references to `stg` and `stg-secrets` and other trivial params
used by: Actual implementation (e.g. containers / apps / CI)
In the future, it would be great if we could select integration options at a per-secret level so that we can fine tune which secrets sync to where (with none as an option). This would remove the need to setup a projected view environment as the insensitive paramaters environment could take up that responsibility as well.
EDIT: Actually nevermind, in order for this to work we would need to change how the permissions works so that the consumer of the insensitive parameters won’t be able to see the raw value of the sensitive secrets when they pull it down (and somehow still be able to use it). Since that’s a bit of a hard problem, I think the solution that was suggested (with a pattern of 1 integration / isolated concern → 1 environment) is the preferred method AFAIK.
Unfortunately, in this case the fact that AWS Parameter Store displays all its secrets in plain text in their dashboard is a bit unfortunate.
They have masked and unmasked access to the values / secrets in both Parameter Store and Secrets Manager depending on your permission level. I screenshotted the unmasked value to simply demonstrate the behaviour.
Thanks again for the neat suggestion, this solves a critical problem in deciding how to handle the pipeline!
Cheers,
Dan