docs/operator-manual/secret-management.md
There are two general ways to populate secrets when doing GitOps: on the destination cluster, or in Argo CD during manifest generation. We strongly recommend the former, as it is more secure and provides a better user experience.
For further discussion, see #1364.
In this approach, secrets are populated on the destination cluster, and Argo CD does not need to directly manage them. Sealed Secrets, External Secrets Operator, and Kubernetes Secrets Store CSI Driver are examples of this style of secret management.
This approach has two main advantages:
We strongly recommend this style of secret management.
Other examples of this style of secret management include:
In this approach, Argo CD's manifest generation step is used to inject secrets. This may be done using a Config Management Plugin like argocd-vault-plugin.
We strongly caution against this style of secret management, as it has several disadvantages:
Many users have already adopted generation-based solutions, and we understand that migrating to an operator-based solution can be a significant effort. Argo CD will continue to support generation-based secret management, but we will not prioritize new features or improvements that solely support this style of secret management.
Argo CD caches the manifests generated by plugins, along with the injected secrets, in its Redis instance. Those manifests are also available via the repo-server API (a gRPC service). This means that the secrets are available to anyone who has access to the Redis instance or to the repo-server.
Consider these steps to mitigate the risks of secret-injection plugins: