External Secrets Operator integrates with GCP Secret Manager for secret management.
A service account key is created and the JSON keyfile is stored in a Kind=Secret. The project_id and private_key should be configured for the project.
{% include 'gcpsm-credentials-secret.yaml' %}
Be sure the gcpsm provider is listed in the Kind=SecretStore
{% include 'gcpsm-secret-store.yaml' %}
To create a kubernetes secret from the GCP Secret Manager secret a Kind=ExternalSecret is needed.
{% include 'gcpsm-external-secret.yaml' %}
The operator will fetch the GCP Secret Manager secret and inject it as a Kind=Secret
kubectl get secret secret-to-be-created -n <namespace> | -o jsonpath='{.data.dev-secret-test}' | base64 -d
This makes it possible for your Google Kubernetes Engine (GKE) applications to consume services provided by Google APIs, namely Secrets Manager service in this case.
Here we will assume that you installed ESO using helm and that you named the chart installation external-secrets and the namespace where it lives es like:
helm install external-secrets external-secrets/external-secrets --namespace es
Then most of the resources would have this name, the important one here being the k8s service account attached to the external-secrets operator deployment:
# ...
containers:
- image: ghcr.io/external-secrets/external-secrets:vVERSION
name: external-secrets
ports:
- containerPort: 8080
protocol: TCP
restartPolicy: Always
schedulerName: default-scheduler
serviceAccount: external-secrets
serviceAccountName: external-secrets # <--- here
You can find the documentation for Workload Identity under this url. We will walk you through how to navigate it here.
Search the documment for this editable values and change them to your values:
es, but this will be the namespace where you deployed the external-secrets operatorYou can follow through the documentation and adapt it to your specific use case. If you want to just use the serviceaccount that we deployed with the helm chart, for example, you don't need to create a new service account on 2 of Authenticating to Google Cloud.
To use workload identity you can just omit the auth field of the secret store and let the operator client fall back to defaults using the roles attached to your service account.
apiVersion: external-secrets.io/v1alpha1
kind: SecretStore
metadata:
name: example
spec:
provider:
gcpsm:
projectID: pid