Using the kubernetes
auth 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
curl \
--request POST \
--data '{"jwt": "<your service account jwt>", "role": "demo"}' \
http://127.0.0.1:8200/v1/auth/kubernetes/login
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
vault write auth/kubernetes/role/demo \
bound_service_account_names=myapp \
bound_service_account_namespaces=default \
policies=default \
ttl=1h
The above role can be used to authenticate only for myapp
from the default
namespace. 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