Skip to content

should fail when node SA has bucket access but pod KSA does not #1357

Open
tanuja-sunda73 wants to merge 5 commits into
GoogleCloudPlatform:mainfrom
tanuja-sunda73:node_has_bucketAccess_but_pod_doesnot
Open

should fail when node SA has bucket access but pod KSA does not #1357
tanuja-sunda73 wants to merge 5 commits into
GoogleCloudPlatform:mainfrom
tanuja-sunda73:node_has_bucketAccess_but_pod_doesnot

Conversation

@tanuja-sunda73
Copy link
Copy Markdown

What type of PR is this?
/kind feature

What this PR does / why we need it:
Adds a WIF E2E test that is it should fail when node SA has bucket access but pod KSA does not — confirms no node SA fallback. Supports both OSS (external WIF via OIDC pool/provider) and GKE (native Workload Identity) clusters via IS_OSS.

Which issue(s) this PR fixes:
N/A

@google-oss-prow
Copy link
Copy Markdown

@tanuja-sunda73: The label(s) kind/feature cannot be applied, because the repository doesn't have them.

Details

In response to this:

What type of PR is this?
/kind feature

What this PR does / why we need it:
Adds a WIF E2E test that is it should fail when node SA has bucket access but pod KSA does not — confirms no node SA fallback. Supports both OSS (external WIF via OIDC pool/provider) and GKE (native Workload Identity) clusters via IS_OSS.

Which issue(s) this PR fixes:
N/A

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.

@google-cla
Copy link
Copy Markdown

google-cla Bot commented May 13, 2026

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

@google-oss-prow
Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: tanuja-sunda73

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@google-oss-prow
Copy link
Copy Markdown

Hi @tanuja-sunda73. Thanks for your PR.

I'm waiting for a GoogleCloudPlatform member to verify that this patch is reasonable to test. If it is, they should reply with /ok-to-test on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should join the org to skip this step.

Once the patch is verified, the new status will be reflected by the ok-to-test label.

I understand the commands that are listed here.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.

Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a new E2E test suite for Workload Identity Federation (WIF) and refactors IAM member generation into a centralized helper method within the test driver. The reviewer identified several issues, including missing helper function definitions, the removal of the iamPropagationWaitTime constant, and potential risks with malformed IAM principal strings. Additionally, the reviewer provided actionable feedback to improve code quality, such as adopting idiomatic polling mechanisms instead of manual loops, using proper context handling for Ginkgo v2, replacing fragile project ID parsing, and reducing hardcoded sleep durations to improve test performance.

Comment on lines +107 to +130
projectNumber := getProjectNumber(projectID)
gomega.Expect(projectNumber).NotTo(gomega.BeEmpty(), "failed to get project number")

ginkgo.By(fmt.Sprintf("Creating workload identity pool: %s", poolID))
createWorkloadIdentityPool(projectID, poolID)

clusterName := os.Getenv(utils.ClusterNameEnvVar)
clusterLocation := os.Getenv(utils.ClusterLocationEnvVar)
clusterIssuer := getClusterOIDCIssuer(clusterName, clusterLocation, projectID)
gomega.Expect(clusterIssuer).NotTo(gomega.BeEmpty(), "failed to discover cluster OIDC issuer")

ginkgo.By(fmt.Sprintf("Creating workload identity provider: %s", providerID))
createWorkloadIdentityProvider(projectID, poolID, providerID, clusterIssuer)

ginkgo.By("Generating credential configuration")
credentialConfig := generateCredentialConfig(projectNumber, poolID, providerID)

ginkgo.By(fmt.Sprintf("Creating Kubernetes service account: %s", ksaName))
createServiceAccount(ctx, f, ksaName)
ginkgo.DeferCleanup(func() { deleteServiceAccount(ctx, f, ksaName) })

ginkgo.By(fmt.Sprintf("Creating credential ConfigMap: %s", configMapName))
createCredentialConfigMap(ctx, f, configMapName, credentialConfig)
ginkgo.DeferCleanup(func() { deleteConfigMap(ctx, f, configMapName) })
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

Several helper functions (e.g., getProjectNumber, createWorkloadIdentityPool, getClusterOIDCIssuer, createWorkloadIdentityProvider, generateCredentialConfig, createServiceAccount, deleteServiceAccount, createCredentialConfigMap, deleteConfigMap) are used but not defined in this file or package. If these are new helpers, they should be included in the PR.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like this PR is not yet ready to review?

Comment on lines +339 to +340
grantBucketAccess(bucketName, nodeSAPrincipal, "roles/storage.objectAdmin")
ginkgo.DeferCleanup(func() { revokeBucketAccess(bucketName, nodeSAPrincipal, "roles/storage.objectAdmin") })
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The functions grantBucketAccess and revokeBucketAccess are used but not defined. Please ensure they are included in the PR or available in the testsuites package.

gcsfuseCSIProfilesStaticBucket = "gcsfusecsi-list-storm-hns-bucket"
gcsfuseCSIProfilesStaticBucketRegion = "us-central1"
gkeScalabilityImagesProjectID = "gke-scalability-images"
iamPropagationWaitTime = 10 * time.Minute
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The constant iamPropagationWaitTime was removed and replaced with hardcoded 5 * time.Minute values at lines 159 and 172. It is better to maintain the constant for readability and to avoid magic numbers. If the reduction from 10 to 5 minutes is intentional, the constant's value should be updated instead of being removed.

Comment on lines +511 to +515
if wifPoolID := os.Getenv("OSS_WIF_POOL_ID"); wifPoolID != "" {
projectNumber := os.Getenv(utils.ProjectNumberEnvVar)
return fmt.Sprintf("principal://iam.googleapis.com/projects/%s/locations/global/workloadIdentityPools/%s/subject/system:serviceaccount:%s:%s",
projectNumber, wifPoolID, serviceAccountNamespace, serviceAccountName)
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

When OSS_WIF_POOL_ID is set, the code assumes utils.ProjectNumberEnvVar is also available. If it's missing, the IAM principal string will be malformed. Consider adding a check for projectNumber.

	if wifPoolID := os.Getenv("OSS_WIF_POOL_ID"); wifPoolID != "" {
		projectNumber := os.Getenv(utils.ProjectNumberEnvVar)
		if projectNumber == "" {
			e2eframework.Failf("Environment variable %v must be set when OSS_WIF_POOL_ID is used", utils.ProjectNumberEnvVar)
		}
		return fmt.Sprintf("principal://iam.googleapis.com/projects/%s/locations/global/workloadIdentityPools/%s/subject/system:serviceaccount:%s:%s",
			projectNumber, wifPoolID, serviceAccountNamespace, serviceAccountName)
	}

volumeResource *storageframework.VolumeResource
}
var l local
ctx := context.Background()
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

In Ginkgo v2, it is recommended to use ginkgo.SpecContext or the context provided by the framework instead of context.Background() to ensure proper cancellation and timeout handling during tests.

Comment on lines +147 to +148
lines := strings.Split(strings.TrimSpace(rawProjectID), "\n")
projectID := lines[len(lines)-1]
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The logic to extract the project ID by taking the last line of the PROJECT environment variable is fragile and seems like a workaround for environment-specific output (like Cloud Shell warnings). It would be better to ensure the environment variable is clean or use a more robust parsing method.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See other uses of ProjectEnvVar --- it's just used verbatium. So there's no need to add extra processing here.

Comment thread test/e2e/testsuites/workload_identity_federation.go
Comment on lines +203 to +243
for i := 0; i < 60; i++ {
pod, err := f.ClientSet.CoreV1().Pods(f.Namespace.Name).Get(ctx, podName, metav1.GetOptions{})
gomega.Expect(err).ToNot(gomega.HaveOccurred())
for _, cs := range pod.Status.ContainerStatuses {
if cs.State.Waiting != nil && cs.State.Waiting.Reason == "CreateContainerError" {
ginkgo.By(fmt.Sprintf("CreateContainerError on %s: %s", cs.Name, cs.State.Waiting.Message))
}
}

events, err := f.ClientSet.CoreV1().Events(f.Namespace.Name).List(ctx,
metav1.ListOptions{
FieldSelector: fmt.Sprintf(
"involvedObject.name=%s",
podName,
),
},
)

gomega.Expect(err).ToNot(gomega.HaveOccurred())
lastEvents = events.Items
for _, e := range events.Items {

ginkgo.By(fmt.Sprintf("Event [%s]: %s", e.Reason, e.Message))

if strings.Contains(e.Message, "PermissionDenied") && (strings.Contains(e.Message, "storage.objects.list") || strings.Contains(e.Message, "storageLayout") || strings.Contains(e.Message, "failed to get GCS bucket")) {
foundAuthFailure = true
foundWrongReason = false
ginkgo.By("Confirmed PermissionDenied auth failure")
break
}

if !foundAuthFailure && (strings.Contains(e.Message, "transport endpoint is not connected") || strings.Contains(e.Message, "failed to generate container") || strings.Contains(e.Message, "failed to stat")) {
foundWrongReason = true
}
}

if foundAuthFailure {
break
}
time.Sleep(5 * time.Second)
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Using a manual loop with time.Sleep for polling is discouraged. Use wait.PollUntilContextTimeout or Gomega's Eventually for more robust and idiomatic polling logic.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1, use a poll ftn rather than a sleep loop.

@mattcary mattcary self-assigned this May 13, 2026
@tanuja-sunda73
Copy link
Copy Markdown
Author

Manual testing for this testcase
On OSS:

E2E Test Suite [Driver: gcsfuse.csi.storage.gke.io] [Testpattern: CSI Ephemeral-volume (default fs)] workload-identity-federation should fail when node SA has bucket access but pod KSA does not — confirms no node SA fallback
/root/gcs-fuse-csi-driver/test/e2e/testsuites/workloadfederation.go:297
STEP: Creating a kubernetes client @ 05/14/26 09:33:08.754
I0514 09:33:08.754956 2269884 util.go:453] >>> kubeConfig: /etc/kubernetes/admin.conf
STEP: Building a namespace api object, basename workload-identity-federation @ 05/14/26 09:33:08.755
STEP: Waiting for a default service account to be provisioned in namespace @ 05/14/26 09:33:08.775
STEP: Waiting for kube-root-ca.crt to be provisioned in namespace @ 05/14/26 09:33:08.779
I0514 09:33:08.784017 2269884 iam_utils.go:94] Creating Kubernetes Service Account gcsfuse-csi-sa
I0514 09:33:08.787642 2269884 volume_resource.go:128] Creating resource for CSI ephemeral inline volume
STEP: Creating bucket "fb5c5686-8424-4530-b8a2-284b88a26f4c" @ 05/14/26 09:33:08.789
STEP: Getting GCP project number @ 05/14/26 09:33:09.942
STEP: Creating workload identity pool: gcs-fuse-oidc-pool-1 @ 05/14/26 09:33:10.949
STEP: Creating workload identity provider: gcs-fuse-oidc-provider-1 @ 05/14/26 09:33:12.428
STEP: Generating credential configuration @ 05/14/26 09:33:14.146
STEP: Creating Kubernetes service account: wif-node-access-pod-no-access-ksa @ 05/14/26 09:33:14.146
I0514 09:33:14.150810 2269884 gcsfuse_oidc_auth.go:509] Created service account: wif-node-access-pod-no-access-ksa
STEP: Creating credential ConfigMap: wif-node-access-pod-no-access-credentials @ 05/14/26 09:33:14.15
I0514 09:33:14.154691 2269884 gcsfuse_oidc_auth.go:533] Created ConfigMap: wif-node-access-pod-no-access-credentials
STEP: Granting bucket access to node SA only: serviceAccount:283386259326-compute@developer.gserviceaccount.com @ 05/14/26 09:33:14.154
I0514 09:33:16.114275 2269884 gcsfuse_oidc_auth.go:553] Granted roles/storage.objectAdmin access to bucket fb5c5686-8424-4530-b8a2-284b88a26f4c for principal serviceAccount:283386259326-compute@developer.gserviceaccount.com
STEP: Confirming pod principal has NO bucket access: principal://iam.googleapis.com/projects/283386259326/locations/global/workloadIdentityPools/gcs-fuse-oidc-pool-1/subject/system:serviceaccount:workload-identity-federation-7662:wif-node-access-pod-no-access-ksa @ 05/14/26 09:33:16.114
I0514 09:35:16.115860 2269884 specs.go:210] Creating Pod
I0514 09:35:16.144917 2269884 warnings.go:110] "Warning: would violate PodSecurity "restricted:latest": allowPrivilegeEscalation != false (container "volume-tester" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container "volume-tester" must set securityContext.capabilities.drop=["ALL"]), runAsNonRoot != true (pod or container "volume-tester" must set securityContext.runAsNonRoot=true), seccompProfile (pod or container "volume-tester" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost")"
STEP: Waiting for PermissionDenied auth failure @ 05/14/26 09:35:16.145
STEP: CreateContainerError on volume-tester: failed to generate container "bdb7ad29e8df89267282202ed9bf710b65ffa98aff58287c1ceba2a6f36c207f" spec: failed to generate spec: failed to stat "/var/lib/kubelet/pods/fc856dee-2d3d-4ce9-838c-7a5c17f0991a/volumes/kubernetes.iocsi/gcs-volume/mount": stat /var/lib/kubelet/pods/fc856dee-2d3d-4ce9-838c-7a5c17f0991a/volumes/kubernetes.iocsi/gcs-volume/mount: transport endpoint is not connected @ 05/14/26 09:35:21.158
STEP: Event [Scheduled]: Successfully assigned workload-identity-federation-7662/gcsfuse-volume-tester-4rnhq to kub-n-1 @ 05/14/26 09:35:21.161
STEP: Event [Pulled]: Container image "gcr.io/gke-release/gcs-fuse-csi-driver-sidecar-mounter:v1.23.4-gke.1" already present on machine @ 05/14/26 09:35:21.161
STEP: Event [Created]: Created container gke-gcsfuse-sidecar @ 05/14/26 09:35:21.161
STEP: Event [Started]: Started container gke-gcsfuse-sidecar @ 05/14/26 09:35:21.161
STEP: Event [Pulled]: Container image "registry.k8s.io/e2e-test-images/busybox:1.36.1-1" already present on machine @ 05/14/26 09:35:21.161
STEP: Event [Failed]: Error: failed to generate container "bdb7ad29e8df89267282202ed9bf710b65ffa98aff58287c1ceba2a6f36c207f" spec: failed to generate spec: failed to stat "/var/lib/kubelet/pods/fc856dee-2d3d-4ce9-838c-7a5c17f0991a/volumes/kubernetes.iocsi/gcs-volume/mount": stat /var/lib/kubelet/pods/fc856dee-2d3d-4ce9-838c-7a5c17f0991a/volumes/kubernetes.iocsi/gcs-volume/mount: transport endpoint is not connected @ 05/14/26 09:35:21.161
STEP: Event [Failed]: Error: failed to generate container "6df6de96b0164f8213ccb163db5bfcdbe2d6bb749814fba667847953c01f8369" spec: failed to generate spec: failed to stat "/var/lib/kubelet/pods/fc856dee-2d3d-4ce9-838c-7a5c17f0991a/volumes/kubernetes.iocsi/gcs-volume/mount": stat /var/lib/kubelet/pods/fc856dee-2d3d-4ce9-838c-7a5c17f0991a/volumes/kubernetes.iocsi/gcs-volume/mount: transport endpoint is not connected @ 05/14/26 09:35:21.161
STEP: Event [FailedMount]: MountVolume.SetUp failed for volume "gcs-volume" : rpc error: code = PermissionDenied desc = gcsfuse failed with error: Error: mountWithStorageHandle: fs.NewServer: create file system: SetUpBucket: BucketHandle: storageLayout call failed: GetStorageLayout for "projects/_/buckets/fb5c5686-8424-4530-b8a2-284b88a26f4c/storageLayout" failed with a non-retryable error: rpc error: code = PermissionDenied desc = Caller does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist).
gcsfuse exited with error: exit status 1
@ 05/14/26 09:35:21.161
STEP: Confirmed PermissionDenied auth failure @ 05/14/26 09:35:21.161
STEP: Confirming pod never reaches Running state @ 05/14/26 09:35:21.161
STEP: Deleting pod gcsfuse-volume-tester-4rnhq in namespace workload-identity-federation-7662 @ 05/14/26 09:36:21.262
STEP: Deleting bucket "fb5c5686-8424-4530-b8a2-284b88a26f4c" @ 05/14/26 09:36:23.204
I0514 09:36:23.579683 2269884 iam_utils.go:101] Deleting Kubernetes Service Account gcsfuse-csi-sa
STEP: Destroying namespace "workload-identity-federation-7662" for this suite. @ 05/14/26 09:36:23.584
• [194.834 seconds]

SSSSSSSSSSSSSSSSSSSSSSSSSS

Ran 1 of 478 Specs in 194.865 seconds
SUCCESS! -- 1 Passed | 0 Failed | 0 Pending | 477 Skipped
PASS

On GKE:

E2E Test Suite [Driver: gcsfuse.csi.storage.gke.io] [Testpattern: CSI Ephemeral-volume (default fs)] workload-identity-federation should fail when node SA has bucket access but pod KSA does not — confirms no node SA fallback
/home/gcptest2404/pravin/upstream/gcs-fuse-csi-driver/test/e2e/testsuites/workload_identity_federation.go:297
STEP: Creating a kubernetes client @ 05/14/26 09:28:46.371
I0514 09:28:46.371298 46159 util.go:453] >>> kubeConfig: /home/gcptest2404/.kube/config
STEP: Building a namespace api object, basename workload-identity-federation @ 05/14/26 09:28:46.372
STEP: Waiting for a default service account to be provisioned in namespace @ 05/14/26 09:28:49.18
STEP: Waiting for kube-root-ca.crt to be provisioned in namespace @ 05/14/26 09:28:49.596
I0514 09:28:50.057087 46159 iam_utils.go:94] Creating Kubernetes Service Account gcsfuse-csi-sa
I0514 09:28:50.304710 46159 volume_resource.go:128] Creating resource for CSI ephemeral inline volume
STEP: Creating bucket "c6d3a440-0af5-4ddc-9caf-6886c3988aa9" @ 05/14/26 09:28:50.306
STEP: Creating GCP service account: wif-node-access-pod-no-access @ 05/14/26 09:28:52.941
I0514 09:28:52.941141 46159 iam_utils.go:120] Creating GCP IAM Service Account wif-node-access-pod-no-access
STEP: Binding KSA wif-node-access-pod-no-access-ksa to GCP service account wif-node-access-pod-no-access@project-b78250c9-d753-4d2f-ad7.iam.gserviceaccount.com with roles/iam.workloadIdentityUser @ 05/14/26 09:28:56.297
STEP: Creating Kubernetes service account wif-node-access-pod-no-access-ksa annotated with GCP service account wif-node-access-pod-no-access@project-b78250c9-d753-4d2f-ad7.iam.gserviceaccount.com @ 05/14/26 09:28:59.101
I0514 09:28:59.101734 46159 iam_utils.go:94] Creating Kubernetes Service Account wif-node-access-pod-no-access-ksa
STEP: Waiting for Workload Identity binding to propagate globally (~60s) @ 05/14/26 09:28:59.332
STEP: Granting bucket access to node SA only: serviceAccount:1019643271805-compute@developer.gserviceaccount.com @ 05/14/26 09:30:59.333
I0514 09:31:04.010567 46159 gcsfuse_oidc_auth.go:518] Granted roles/storage.objectAdmin access to bucket c6d3a440-0af5-4ddc-9caf-6886c3988aa9 for principal serviceAccount:1019643271805-compute@developer.gserviceaccount.com
STEP: Confirming pod principal has NO bucket access: serviceAccount:wif-node-access-pod-no-access@project-b78250c9-d753-4d2f-ad7.iam.gserviceaccount.com @ 05/14/26 09:31:04.01
I0514 09:33:04.011356 46159 specs.go:210] Creating Pod
I0514 09:33:04.756497 46159 warnings.go:110] "Warning: would violate PodSecurity "restricted:latest": allowPrivilegeEscalation != false (container "volume-tester" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container "volume-tester" must set securityContext.capabilities.drop=["ALL"]), runAsNonRoot != true (pod or container "volume-tester" must set securityContext.runAsNonRoot=true), seccompProfile (pod or container "volume-tester" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost")"
STEP: Waiting for PermissionDenied auth failure @ 05/14/26 09:33:04.756
STEP: Event [Scheduled]: Successfully assigned workload-identity-federation-4966/gcsfuse-volume-tester-lfq82 to gke-my-gke-cluster-default-pool-ee2edc56-39zq @ 05/14/26 09:33:05.226
STEP: Event [Scheduled]: Successfully assigned workload-identity-federation-4966/gcsfuse-volume-tester-lfq82 to gke-my-gke-cluster-default-pool-ee2edc56-39zq @ 05/14/26 09:33:10.672
STEP: Event [FailedMount]: MountVolume.SetUp failed for volume "gcs-volume" : rpc error: code = PermissionDenied desc = failed to get GCS bucket "c6d3a440-0af5-4ddc-9caf-6886c3988aa9": rpc error: code = PermissionDenied desc = wif-node-access-pod-no-access@project-b78250c9-d753-4d2f-ad7.iam.gserviceaccount.com does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist). @ 05/14/26 09:33:10.672
STEP: Confirmed PermissionDenied auth failure @ 05/14/26 09:33:10.672
STEP: Confirming pod never reaches Running state @ 05/14/26 09:33:10.672
STEP: Deleting pod gcsfuse-volume-tester-lfq82 in namespace workload-identity-federation-4966 @ 05/14/26 09:34:12.081
I0514 09:34:15.789050 46159 iam_utils.go:101] Deleting Kubernetes Service Account wif-node-access-pod-no-access-ksa
I0514 09:34:16.043504 46159 iam_utils.go:174] Deleting GCP IAM Service Account projects/project-b78250c9-d753-4d2f-ad7/serviceAccounts/wif-node-access-pod-no-access@project-b78250c9-d753-4d2f-ad7.iam.gserviceaccount.com
STEP: Deleting bucket "c6d3a440-0af5-4ddc-9caf-6886c3988aa9" @ 05/14/26 09:34:17.387
I0514 09:34:19.221834 46159 iam_utils.go:101] Deleting Kubernetes Service Account gcsfuse-csi-sa
STEP: Destroying namespace "workload-identity-federation-4966" for this suite. @ 05/14/26 09:34:19.481
• [333.381 seconds]

SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS

Ran 1 of 479 Specs in 333.411 seconds
SUCCESS! -- 1 Passed | 0 Failed | 0 Pending | 478 Skipped
PASS

@mattcary
Copy link
Copy Markdown
Member

/ok-to-test

@tanuja-sunda73 tanuja-sunda73 marked this pull request as draft May 21, 2026 05:28
@tanuja-sunda73 tanuja-sunda73 marked this pull request as ready for review May 21, 2026 11:04
@tanuja-sunda73 tanuja-sunda73 force-pushed the node_has_bucketAccess_but_pod_doesnot branch from 38aabcb to b7c5837 Compare May 22, 2026 10:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants