Skip to content

ClusterSecretStore Kubernetes Provider shows expired bearer token as valid #5038

@alvin-rw

Description

@alvin-rw

Describe the bug
Creating a ClusterSecretStore with Kubernetes Provider using an expired bearer token authentication will show a "Valid" status in the secret store.

To Reproduce
Steps to reproduce the behavior:
ESO version: 0.18.2
Kubernetes version: 1.33 (kind)

  1. Prerequisites
apiVersion: v1
kind: Namespace
metadata:
  name: testing
---
apiVersion: v1
kind: Secret
metadata:
  name: top-secret
  namespace: testing
type: Opaque
data:
  secret: dGhpcyBpcyBhIHNlY3JldA==
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-sa
  namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-sa-binding
subjects:
  - kind: ServiceAccount
    name: admin-sa
    namespace: default
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io
  1. Create a service account token with expiration
kubectl create token admin-sa --duration=600s
  1. Create a Kubernetes Secret from the token
apiVersion: v1
kind: Secret
metadata:
  name: my-token
  namespace: default
data:
  token: |
    <base64 encoded token>
  1. Create ClusterSecretStore with Kubernetes Provider using the bearer token
apiVersion: external-secrets.io/v1
kind: ClusterSecretStore
metadata:
  name: cluster-store
spec:
  provider:
    kubernetes:
      remoteNamespace: testing
      server:
        url: "https://kubernetes.default.svc"
        caProvider:
          type: ConfigMap
          name: kube-root-ca.crt
          namespace: default
          key: ca.crt
      auth:
        token:
          bearerToken:
            name: my-token
            key: token
            namespace: default
  1. Create an ExternalSecret refering to the secret store
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
  name: "hello-world"
  namespace: default
spec:
  refreshPolicy: Periodic
  refreshInterval: "5s"
  target:
    name: hello-world
    creationPolicy: Owner
    deletionPolicy: Delete
  data:
    - secretKey: admin
      remoteRef:
        key: top-secret
        version: v1
        property: secret
        decodingStrategy: None
      sourceRef:
        storeRef:
          name: cluster-store
          kind: ClusterSecretStore
  1. When the token expired, the ClusterSecretStore status is still valid, but the ExternalSecret got err: Unauthorized
Image Image Image

Expected behavior
ClusterSecretStore shows authentication error for expired bearer token

Metadata

Metadata

Assignees

No one assigned

    Labels

    kind/bugCategorizes issue or PR as related to a bug.

    Type

    No type

    Projects

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions