I have a Vault deployment in my cluster that I use to store secrets. Additionally, I have created roles, policies, and a ServiceAccount. My applications will retrieve secrets from Vault using this service account. However, I am concerned that another application could use the service account meant for a different application. What measures can I take to prevent this from happening?
Say, I have assigned different policies to application A and application B, so I need a way to ensure that application B cannot use the ServiceAccount meant for application A.
Using the
kubernetesauth method, this is how it works. You don't need to do anything else. Assuming you are using the default behavior of kubernetes where it creates a service account per app, you're good.When an app logins to Vault using a ServiceAccount, it provides its token and authenticates for a specific role, e.g
The SA token is available only to your service. Kubernetes creates a SA for each app. It means AppA doesn't have the access for AppB ServiceAccount token (unless you explicitly specify that).
The way to integrate that with Vault is to config a named role with a bounded service account and namespace
The above role can be used to authenticate only for
myappfrom thedefaultnamespace. No other app can login using this role.To address your question, you would need a different Vault role for each app, with different bounded service account and namespace.
Check out Vault documentation on kubernetes auth method for full example