|
|
@@ -49,6 +49,7 @@ const (
|
|
|
errFetchPodToken = "unable to fetch pod token: %w"
|
|
|
errFetchIBToken = "unable to fetch identitybindingtoken: %w"
|
|
|
errGenAccessToken = "unable to generate gcp access token: %w"
|
|
|
+ errNoProjectID = "unable to find ProjectID in storeSpec"
|
|
|
)
|
|
|
|
|
|
// workloadIdentity holds all clients and generators needed
|
|
|
@@ -114,17 +115,21 @@ func (w *workloadIdentity) TokenSource(ctx context.Context, store esv1beta1.Gene
|
|
|
saKey.Namespace = *wi.ServiceAccountRef.Namespace
|
|
|
}
|
|
|
|
|
|
+ clusterProjectID, err := clusterProjectID(spec)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
sa := &v1.ServiceAccount{}
|
|
|
- err := kube.Get(ctx, saKey, sa)
|
|
|
+ err = kube.Get(ctx, saKey, sa)
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
|
|
|
idProvider := fmt.Sprintf("https://container.googleapis.com/v1/projects/%s/locations/%s/clusters/%s",
|
|
|
- spec.Provider.GCPSM.ProjectID,
|
|
|
+ clusterProjectID,
|
|
|
wi.ClusterLocation,
|
|
|
wi.ClusterName)
|
|
|
- idPool := fmt.Sprintf("%s.svc.id.goog", spec.Provider.GCPSM.ProjectID)
|
|
|
+ idPool := fmt.Sprintf("%s.svc.id.goog", clusterProjectID)
|
|
|
gcpSA := sa.Annotations[gcpSAAnnotation]
|
|
|
|
|
|
resp, err := w.saTokenGenerator.Generate(ctx, idPool, saKey.Name, saKey.Namespace)
|
|
|
@@ -257,3 +262,13 @@ func (g *gcpIDBindTokenGenerator) Generate(ctx context.Context, client *http.Cli
|
|
|
}
|
|
|
return idBindToken, nil
|
|
|
}
|
|
|
+
|
|
|
+func clusterProjectID(spec *esv1beta1.SecretStoreSpec) (string, error) {
|
|
|
+ if spec.Provider.GCPSM.Auth.WorkloadIdentity.ClusterProjectID != "" {
|
|
|
+ return spec.Provider.GCPSM.Auth.WorkloadIdentity.ClusterProjectID, nil
|
|
|
+ } else if spec.Provider.GCPSM.ProjectID != "" {
|
|
|
+ return spec.Provider.GCPSM.ProjectID, nil
|
|
|
+ } else {
|
|
|
+ return "", fmt.Errorf(errNoProjectID)
|
|
|
+ }
|
|
|
+}
|