From 9a74fa4c9c855df7d16324d4f1d9a3044a7a9811 Mon Sep 17 00:00:00 2001 From: Toni Tauro Date: Mon, 1 Sep 2025 14:14:42 +0200 Subject: [PATCH] feat: add OpenBao as provider Signed-off-by: Toni Tauro --- README.md | 17 +- docs/book/src/providers.md | 12 +- test/bats/openbao.bats | 314 ++++++++++++++++++ .../tests/openbao/deployment-synck8s.yaml | 41 +++ .../tests/openbao/deployment-two-synck8s.yaml | 41 +++ ...penbao_synck8s_v1_secretproviderclass.yaml | 33 ++ ...enbao_v1_multiple_secretproviderclass.yaml | 49 +++ .../openbao_v1_secretproviderclass.yaml | 16 + .../openbao_v1_secretproviderclass_ns.yaml | 51 +++ ...od-openbao-inline-volume-multiple-spc.yaml | 44 +++ ...bao-inline-volume-secretproviderclass.yaml | 23 ++ .../tests/openbao/pod-openbao-rotation.yaml | 37 +++ 12 files changed, 664 insertions(+), 14 deletions(-) create mode 100644 test/bats/openbao.bats create mode 100644 test/bats/tests/openbao/deployment-synck8s.yaml create mode 100644 test/bats/tests/openbao/deployment-two-synck8s.yaml create mode 100644 test/bats/tests/openbao/openbao_synck8s_v1_secretproviderclass.yaml create mode 100644 test/bats/tests/openbao/openbao_v1_multiple_secretproviderclass.yaml create mode 100644 test/bats/tests/openbao/openbao_v1_secretproviderclass.yaml create mode 100644 test/bats/tests/openbao/openbao_v1_secretproviderclass_ns.yaml create mode 100644 test/bats/tests/openbao/pod-openbao-inline-volume-multiple-spc.yaml create mode 100644 test/bats/tests/openbao/pod-openbao-inline-volume-secretproviderclass.yaml create mode 100644 test/bats/tests/openbao/pod-openbao-rotation.yaml diff --git a/README.md b/README.md index e104032d1..950e6e201 100644 --- a/README.md +++ b/README.md @@ -12,14 +12,15 @@ The Secrets Store CSI Driver `secrets-store.csi.k8s.io` allows Kubernetes to mou ## Test Status -| Test | Status | -| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| periodic/image-scan | [![sig-auth-secrets-store-csi-driver-periodic/secrets-store-csi-driver-image-scan](https://testgrid.k8s.io/q/summary/sig-auth-secrets-store-csi-driver-periodic/secrets-store-csi-driver-image-scan/tests_status?style=svg)](https://testgrid.k8s.io/sig-auth-secrets-store-csi-driver-periodic#secrets-store-csi-driver-image-scan) | -| periodic/e2e-provider-upgrade | [![sig-auth-secrets-store-csi-driver-periodic/secrets-store-csi-driver-upgrade-test-e2e-provider](https://testgrid.k8s.io/q/summary/sig-auth-secrets-store-csi-driver-periodic/secrets-store-csi-driver-upgrade-test-e2e-provider/tests_status?style=svg)](https://testgrid.k8s.io/sig-auth-secrets-store-csi-driver-periodic#secrets-store-csi-driver-upgrade-test-e2e-provider) | -| postsubmit/aws | [![sig-auth-secrets-store-csi-driver-postsubmit/secrets-store-csi-driver-e2e-aws-postsubmit](https://testgrid.k8s.io/q/summary/sig-auth-secrets-store-csi-driver-postsubmit/secrets-store-csi-driver-e2e-aws-postsubmit/tests_status?style=svg)](https://testgrid.k8s.io/sig-auth-secrets-store-csi-driver-postsubmit#secrets-store-csi-driver-e2e-aws-postsubmit) | -| postsubmit/azure | [![sig-auth-secrets-store-csi-driver-postsubmit/secrets-store-csi-driver-e2e-azure-postsubmit](https://testgrid.k8s.io/q/summary/sig-auth-secrets-store-csi-driver-postsubmit/secrets-store-csi-driver-e2e-azure-postsubmit/tests_status?style=svg)](https://testgrid.k8s.io/sig-auth-secrets-store-csi-driver-postsubmit#secrets-store-csi-driver-e2e-azure-postsubmit) | -| postsubmit/gcp | [![sig-auth-secrets-store-csi-driver-postsubmit/secrets-store-csi-driver-e2e-gcp-postsubmit](https://testgrid.k8s.io/q/summary/sig-auth-secrets-store-csi-driver-postsubmit/secrets-store-csi-driver-e2e-gcp-postsubmit/tests_status?style=svg)](https://testgrid.k8s.io/sig-auth-secrets-store-csi-driver-postsubmit#secrets-store-csi-driver-e2e-gcp-postsubmit) | -| postsubmit/vault | [![sig-auth-secrets-store-csi-driver-postsubmit/secrets-store-csi-driver-e2e-vault-postsubmit](https://testgrid.k8s.io/q/summary/sig-auth-secrets-store-csi-driver-postsubmit/secrets-store-csi-driver-e2e-vault-postsubmit/tests_status?style=svg)](https://testgrid.k8s.io/sig-auth-secrets-store-csi-driver-postsubmit#secrets-store-csi-driver-e2e-vault-postsubmit) | +| Test | Status | +| ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| periodic/image-scan | [![sig-auth-secrets-store-csi-driver-periodic/secrets-store-csi-driver-image-scan](https://testgrid.k8s.io/q/summary/sig-auth-secrets-store-csi-driver-periodic/secrets-store-csi-driver-image-scan/tests_status?style=svg)](https://testgrid.k8s.io/sig-auth-secrets-store-csi-driver-periodic#secrets-store-csi-driver-image-scan) | +| periodic/e2e-provider-upgrade | [![sig-auth-secrets-store-csi-driver-periodic/secrets-store-csi-driver-upgrade-test-e2e-provider](https://testgrid.k8s.io/q/summary/sig-auth-secrets-store-csi-driver-periodic/secrets-store-csi-driver-upgrade-test-e2e-provider/tests_status?style=svg)](https://testgrid.k8s.io/sig-auth-secrets-store-csi-driver-periodic#secrets-store-csi-driver-upgrade-test-e2e-provider) | +| postsubmit/aws | [![sig-auth-secrets-store-csi-driver-postsubmit/secrets-store-csi-driver-e2e-aws-postsubmit](https://testgrid.k8s.io/q/summary/sig-auth-secrets-store-csi-driver-postsubmit/secrets-store-csi-driver-e2e-aws-postsubmit/tests_status?style=svg)](https://testgrid.k8s.io/sig-auth-secrets-store-csi-driver-postsubmit#secrets-store-csi-driver-e2e-aws-postsubmit) | +| postsubmit/azure | [![sig-auth-secrets-store-csi-driver-postsubmit/secrets-store-csi-driver-e2e-azure-postsubmit](https://testgrid.k8s.io/q/summary/sig-auth-secrets-store-csi-driver-postsubmit/secrets-store-csi-driver-e2e-azure-postsubmit/tests_status?style=svg)](https://testgrid.k8s.io/sig-auth-secrets-store-csi-driver-postsubmit#secrets-store-csi-driver-e2e-azure-postsubmit) | +| postsubmit/gcp | [![sig-auth-secrets-store-csi-driver-postsubmit/secrets-store-csi-driver-e2e-gcp-postsubmit](https://testgrid.k8s.io/q/summary/sig-auth-secrets-store-csi-driver-postsubmit/secrets-store-csi-driver-e2e-gcp-postsubmit/tests_status?style=svg)](https://testgrid.k8s.io/sig-auth-secrets-store-csi-driver-postsubmit#secrets-store-csi-driver-e2e-gcp-postsubmit) | +| postsubmit/vault | [![sig-auth-secrets-store-csi-driver-postsubmit/secrets-store-csi-driver-e2e-vault-postsubmit](https://testgrid.k8s.io/q/summary/sig-auth-secrets-store-csi-driver-postsubmit/secrets-store-csi-driver-e2e-vault-postsubmit/tests_status?style=svg)](https://testgrid.k8s.io/sig-auth-secrets-store-csi-driver-postsubmit#secrets-store-csi-driver-e2e-vault-postsubmit) | +| postsubmit/openbao | [![sig-auth-secrets-store-csi-driver-postsubmit/secrets-store-csi-driver-e2e-openbao-postsubmit](https://testgrid.k8s.io/q/summary/sig-auth-secrets-store-csi-driver-postsubmit/secrets-store-csi-driver-e2e-openbao-postsubmit/tests_status?style=svg)](https://testgrid.k8s.io/sig-auth-secrets-store-csi-driver-postsubmit#secrets-store-csi-driver-e2e-openbao-postsubmit) | ## Want to help? diff --git a/docs/book/src/providers.md b/docs/book/src/providers.md index 2a140a4fa..d24c36ace 100644 --- a/docs/book/src/providers.md +++ b/docs/book/src/providers.md @@ -37,9 +37,9 @@ See [design doc](https://docs.google.com/document/d/10-RHUJGM0oMN88AZNxjOmGz0NsW ## Features supported by current providers -| Features \ Providers | Azure | GCP | AWS | Vault | Akeyless | Conjur | -| ------------------------- | ----- | --- | --- | ----- | -------- | ------ | -| Sync as Kubernetes secret | Yes | Yes | Yes | Yes | Yes | Yes | -| Rotation | Yes | Yes | Yes | Yes | Yes | Yes | -| Windows | Yes | No | No | No | No | No | -| Helm Chart | Yes | No | Yes | Yes | Yes | Yes | +| Features \ Providers | Azure | GCP | AWS | Vault | Akeyless | Conjur | OpenBao | +| ------------------------- | ----- | --- | --- | ----- | -------- | ------ | ------- | +| Sync as Kubernetes secret | Yes | Yes | Yes | Yes | Yes | Yes | Yes | +| Rotation | Yes | Yes | Yes | Yes | Yes | Yes | Yes | +| Windows | Yes | No | No | No | No | No | No | +| Helm Chart | Yes | No | Yes | Yes | Yes | Yes | Yes | diff --git a/test/bats/openbao.bats b/test/bats/openbao.bats new file mode 100644 index 000000000..8054dd058 --- /dev/null +++ b/test/bats/openbao.bats @@ -0,0 +1,314 @@ +#!/usr/bin/env bats + +# mostly inspired by the vault provider tests +# https://github.com/kubernetes-sigs/secrets-store-csi-driver/blob/main/test/bats/vault.bats +# credits to @sozercan @aramase @ritazh and the rest of the community + +load helpers + +BATS_TESTS_DIR=test/bats/tests/openbao +WAIT_TIME=120 +SLEEP_TIME=1 + +export LABEL_VALUE=${LABEL_VALUE:-"test"} +export ANNOTATION_VALUE=${ANNOTATION_VALUE:-"app=test"} + +@test "install openbao provider" { + # install openbao including the csi provider using helm + helm repo add openbao https://openbao.github.io/openbao-helm + helm repo update + helm install openbao openbao/openbao -n openbao --create-namespace \ + --set "server.dev.enabled=true" \ + --set "injector.enabled=false" \ + --set "csi.enabled=true" + + # wait for openbao and openbao-csi-provider pods to be running + kubectl wait --for=condition=Ready --timeout=120s pods --all -n openbao +} + +@test "configure openbao" { + # create the secrets pair in openbao + kubectl exec openbao-0 -n openbao -- bao secrets enable -version=2 -path=secrets kv + kubectl exec openbao-0 -n openbao -- bao kv put secrets/foo foo=openbao-foo + kubectl exec openbao-0 -n openbao -- bao kv put secrets/bar bar=openbao-bar + + # enable authentication + kubectl exec openbao-0 -n openbao -- bao auth enable kubernetes + + local token_reviewer_jwt="$(kubectl exec openbao-0 -n openbao -- cat /var/run/secrets/kubernetes.io/serviceaccount/token)" + local kubernetes_service_ip="$(kubectl get svc kubernetes -o go-template="{{ .spec.clusterIP }}")" + # enable authentication using the kubernetes service token from openbao pod + kubectl exec -i openbao-0 -n openbao -- bao write auth/kubernetes/config \ + issuer="https://kubernetes.default.svc.cluster.local" \ + token_reviewer_jwt="${token_reviewer_jwt}" \ + kubernetes_host="https://${kubernetes_service_ip}:443" \ + kubernetes_ca_cert=@/var/run/secrets/kubernetes.io/serviceaccount/ca.crt + + # create openbao policy to allow access to created secrets + kubectl exec -i openbao-0 -n openbao -- bao policy write csi - <